regenerate APIs

The auto-auto-regenerator app is currently down (being investigated), so in
the interim this unblocks some APIs that need generating.

Fixes #312

Change-Id: I9518514d593b526fef9c63b5472c9fc5c12fbcf8
Reviewed-on: https://code-review.googlesource.com/c/35910
Reviewed-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Eno Compton <enocom@google.com>
diff --git a/adexchangebuyer2/v2beta1/adexchangebuyer2-api.json b/adexchangebuyer2/v2beta1/adexchangebuyer2-api.json
index f006648..f6c063a 100644
--- a/adexchangebuyer2/v2beta1/adexchangebuyer2-api.json
+++ b/adexchangebuyer2/v2beta1/adexchangebuyer2-api.json
@@ -2521,7 +2521,7 @@
       }
     }
   },
-  "revision": "20181026",
+  "revision": "20181127",
   "rootUrl": "https://adexchangebuyer.googleapis.com/",
   "schemas": {
     "AbsoluteDateRange": {
@@ -3008,17 +3008,24 @@
             "The creative expands up and right.",
             "The creative expands down and left.",
             "The creative expands down and right.",
+            "The creative type is HTML.",
+            "The creative type is VAST video.",
             "The creative expands up or down.",
             "The creative expands left or right.",
             "The creative expands on any diagonal.",
             "The creative expands when rolled over.",
             "The instream vast video type is vpaid flash.",
-            "The creative is MRAID",
+            "The creative is MRAID.",
+            "The creative is Flash.",
+            "The creative is HTML5.",
             "The creative is SSL.",
+            "The creative is non-SSL.",
             "The creative is an interstitial.",
             "The creative is eligible for native.",
             "The creative is not eligible for native.",
-            "The creative can dynamically resize to fill a variety of slot sizes."
+            "The video type is in-banner video.",
+            "The creative can dynamically resize to fill a variety of slot sizes.",
+            "The open measurement SDK is supported."
           ],
           "items": {
             "enum": [
@@ -3035,17 +3042,24 @@
               "EXPANDING_DIRECTION_UP_RIGHT",
               "EXPANDING_DIRECTION_DOWN_LEFT",
               "EXPANDING_DIRECTION_DOWN_RIGHT",
+              "CREATIVE_TYPE_HTML",
+              "CREATIVE_TYPE_VAST_VIDEO",
               "EXPANDING_DIRECTION_UP_OR_DOWN",
               "EXPANDING_DIRECTION_LEFT_OR_RIGHT",
               "EXPANDING_DIRECTION_ANY_DIAGONAL",
               "EXPANDING_ACTION_ROLLOVER_TO_EXPAND",
               "INSTREAM_VAST_VIDEO_TYPE_VPAID_FLASH",
               "RICH_MEDIA_CAPABILITY_TYPE_MRAID",
+              "RICH_MEDIA_CAPABILITY_TYPE_FLASH",
+              "RICH_MEDIA_CAPABILITY_TYPE_HTML5",
               "RICH_MEDIA_CAPABILITY_TYPE_SSL",
+              "RICH_MEDIA_CAPABILITY_TYPE_NON_SSL",
               "RICH_MEDIA_CAPABILITY_TYPE_INTERSTITIAL",
               "NATIVE_ELIGIBILITY_ELIGIBLE",
               "NATIVE_ELIGIBILITY_NOT_ELIGIBLE",
-              "RENDERING_SIZELESS_ADX"
+              "IN_BANNER_VIDEO",
+              "RENDERING_SIZELESS_ADX",
+              "OMSDK_1_0"
             ],
             "type": "string"
           },
@@ -5507,7 +5521,7 @@
       "id": "RowDimensions",
       "properties": {
         "publisherIdentifier": {
-          "description": "The publisher identifier for this row, if a breakdown by\nBreakdownDimension.PUBLISHER_IDENTIFIER\nwas requested.",
+          "description": "The publisher identifier for this row, if a breakdown by\n[BreakdownDimension.PUBLISHER_IDENTIFIER](https://developers.google.com/authorized-buyers/apis/reference/rest/v2beta1/bidders.accounts.filterSets#FilterSet.BreakdownDimension)\nwas requested.",
           "type": "string"
         },
         "timeInterval": {
diff --git a/adexchangebuyer2/v2beta1/adexchangebuyer2-gen.go b/adexchangebuyer2/v2beta1/adexchangebuyer2-gen.go
index 73403f7..39eed04 100644
--- a/adexchangebuyer2/v2beta1/adexchangebuyer2-gen.go
+++ b/adexchangebuyer2/v2beta1/adexchangebuyer2-gen.go
@@ -1363,6 +1363,8 @@
 	// left.
 	//   "EXPANDING_DIRECTION_DOWN_RIGHT" - The creative expands down and
 	// right.
+	//   "CREATIVE_TYPE_HTML" - The creative type is HTML.
+	//   "CREATIVE_TYPE_VAST_VIDEO" - The creative type is VAST video.
 	//   "EXPANDING_DIRECTION_UP_OR_DOWN" - The creative expands up or down.
 	//   "EXPANDING_DIRECTION_LEFT_OR_RIGHT" - The creative expands left or
 	// right.
@@ -1372,16 +1374,21 @@
 	// rolled over.
 	//   "INSTREAM_VAST_VIDEO_TYPE_VPAID_FLASH" - The instream vast video
 	// type is vpaid flash.
-	//   "RICH_MEDIA_CAPABILITY_TYPE_MRAID" - The creative is MRAID
+	//   "RICH_MEDIA_CAPABILITY_TYPE_MRAID" - The creative is MRAID.
+	//   "RICH_MEDIA_CAPABILITY_TYPE_FLASH" - The creative is Flash.
+	//   "RICH_MEDIA_CAPABILITY_TYPE_HTML5" - The creative is HTML5.
 	//   "RICH_MEDIA_CAPABILITY_TYPE_SSL" - The creative is SSL.
+	//   "RICH_MEDIA_CAPABILITY_TYPE_NON_SSL" - The creative is non-SSL.
 	//   "RICH_MEDIA_CAPABILITY_TYPE_INTERSTITIAL" - The creative is an
 	// interstitial.
 	//   "NATIVE_ELIGIBILITY_ELIGIBLE" - The creative is eligible for
 	// native.
 	//   "NATIVE_ELIGIBILITY_NOT_ELIGIBLE" - The creative is not eligible
 	// for native.
+	//   "IN_BANNER_VIDEO" - The video type is in-banner video.
 	//   "RENDERING_SIZELESS_ADX" - The creative can dynamically resize to
 	// fill a variety of slot sizes.
+	//   "OMSDK_1_0" - The open measurement SDK is supported.
 	Attributes []string `json:"attributes,omitempty"`
 
 	// ClickThroughUrls: The set of destination URLs for the creative.
@@ -5296,8 +5303,11 @@
 // Encapsulates the values of all dimensions for a given row.
 type RowDimensions struct {
 	// PublisherIdentifier: The publisher identifier for this row, if a
-	// breakdown by
-	// BreakdownDimension.PUBLISHER_IDENTIFIER
+	// breakdown
+	// by
+	// [BreakdownDimension.PUBLISHER_IDENTIFIER](https://developers.google
+	// .com/authorized-buyers/apis/reference/rest/v2beta1/bidders.accounts.fi
+	// lterSets#FilterSet.BreakdownDimension)
 	// was requested.
 	PublisherIdentifier string `json:"publisherIdentifier,omitempty"`
 
diff --git a/alertcenter/v1beta1/alertcenter-api.json b/alertcenter/v1beta1/alertcenter-api.json
index 8e4cc5b..e13df0a 100644
--- a/alertcenter/v1beta1/alertcenter-api.json
+++ b/alertcenter/v1beta1/alertcenter-api.json
@@ -162,7 +162,7 @@
               "type": "string"
             },
             "filter": {
-              "description": "Optional. A query string for filtering alert results.\nFor more details, see [Query\nfilters](/admin-sdk/alertcenter/guides/query-filters) and [Supported\nquery filter fields](/admin-sdk/alertcenter/reference/filter-fields).",
+              "description": "Optional. A query string for filtering alert results.\nFor more details, see [Query\nfilters](/admin-sdk/alertcenter/guides/query-filters) and [Supported\nquery filter fields](/admin-sdk/alertcenter/reference/filter-fields#alerts.list).",
               "location": "query",
               "type": "string"
             },
@@ -240,6 +240,11 @@
                   "description": "Optional. The unique identifier of the G Suite organization account of the\ncustomer the alert feedback are associated with.\nInferred from the caller identity if not provided.",
                   "location": "query",
                   "type": "string"
+                },
+                "filter": {
+                  "description": "Optional. A query string for filtering alert feedback results.\nFor more details, see [Query\nfilters](/admin-sdk/alertcenter/guides/query-filters) and [Supported\nquery filter fields](/admin-sdk/alertcenter/reference/filter-fields#alerts.feedback.list).",
+                  "location": "query",
+                  "type": "string"
                 }
               },
               "path": "v1beta1/alerts/{alertId}/feedback",
@@ -252,7 +257,7 @@
       }
     }
   },
-  "revision": "20181103",
+  "revision": "20181121",
   "rootUrl": "https://alertcenter.googleapis.com/",
   "schemas": {
     "AccountWarning": {
diff --git a/alertcenter/v1beta1/alertcenter-gen.go b/alertcenter/v1beta1/alertcenter-gen.go
index 63dac2f..4e4377c 100644
--- a/alertcenter/v1beta1/alertcenter-gen.go
+++ b/alertcenter/v1beta1/alertcenter-gen.go
@@ -1355,7 +1355,8 @@
 // [Query
 // filters](/admin-sdk/alertcenter/guides/query-filters) and
 // [Supported
-// query filter fields](/admin-sdk/alertcenter/reference/filter-fields).
+// query filter
+// fields](/admin-sdk/alertcenter/reference/filter-fields#alerts.list).
 func (c *AlertsListCall) Filter(filter string) *AlertsListCall {
 	c.urlParams_.Set("filter", filter)
 	return c
@@ -1499,7 +1500,7 @@
 	//       "type": "string"
 	//     },
 	//     "filter": {
-	//       "description": "Optional. A query string for filtering alert results.\nFor more details, see [Query\nfilters](/admin-sdk/alertcenter/guides/query-filters) and [Supported\nquery filter fields](/admin-sdk/alertcenter/reference/filter-fields).",
+	//       "description": "Optional. A query string for filtering alert results.\nFor more details, see [Query\nfilters](/admin-sdk/alertcenter/guides/query-filters) and [Supported\nquery filter fields](/admin-sdk/alertcenter/reference/filter-fields#alerts.list).",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
@@ -1725,6 +1726,20 @@
 	return c
 }
 
+// Filter sets the optional parameter "filter": A query string for
+// filtering alert feedback results.
+// For more details, see
+// [Query
+// filters](/admin-sdk/alertcenter/guides/query-filters) and
+// [Supported
+// query filter
+// fields](/admin-sdk/alertcenter/reference/filter-fields#alerts.feedback
+// .list).
+func (c *AlertsFeedbackListCall) Filter(filter string) *AlertsFeedbackListCall {
+	c.urlParams_.Set("filter", filter)
+	return c
+}
+
 // Fields allows partial responses to be retrieved. See
 // https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
 // for more information.
@@ -1841,6 +1856,11 @@
 	//       "description": "Optional. The unique identifier of the G Suite organization account of the\ncustomer the alert feedback are associated with.\nInferred from the caller identity if not provided.",
 	//       "location": "query",
 	//       "type": "string"
+	//     },
+	//     "filter": {
+	//       "description": "Optional. A query string for filtering alert feedback results.\nFor more details, see [Query\nfilters](/admin-sdk/alertcenter/guides/query-filters) and [Supported\nquery filter fields](/admin-sdk/alertcenter/reference/filter-fields#alerts.feedback.list).",
+	//       "location": "query",
+	//       "type": "string"
 	//     }
 	//   },
 	//   "path": "v1beta1/alerts/{alertId}/feedback",
diff --git a/androidenterprise/v1/androidenterprise-api.json b/androidenterprise/v1/androidenterprise-api.json
index fd76c36..8a480ed 100644
--- a/androidenterprise/v1/androidenterprise-api.json
+++ b/androidenterprise/v1/androidenterprise-api.json
@@ -15,7 +15,7 @@
   "description": "Manages the deployment of apps to Android for Work users.",
   "discoveryVersion": "v1",
   "documentationLink": "https://developers.google.com/android/work/play/emm-api",
-  "etag": "\"J3WqvAcMk4eQjJXvfSI4Yr8VouA/-WjiIAVNcRnZOqZ7_gp3nJhPcz4\"",
+  "etag": "\"J3WqvAcMk4eQjJXvfSI4Yr8VouA/_41XhMkjmqptXD-fYNmY575w21g\"",
   "icons": {
     "x16": "https://www.google.com/images/icons/product/android-16.png",
     "x32": "https://www.google.com/images/icons/product/android-32.png"
@@ -2427,7 +2427,7 @@
           ]
         },
         "generateAuthenticationToken": {
-          "description": "Generates an authentication token which the device policy client can use to provision the given EMM-managed user account on a device. The generated token is single-use and expires after a few minutes.\n\nThis call only works with EMM-managed accounts.",
+          "description": "Generates an authentication token which the device policy client can use to provision the given EMM-managed user account on a device. The generated token is single-use and expires after a few minutes.\n\nYou can provision a maximum of 10 devices per user.\n\nThis call only works with EMM-managed accounts.",
           "httpMethod": "POST",
           "id": "androidenterprise.users.generateAuthenticationToken",
           "parameterOrder": [
@@ -2756,9 +2756,185 @@
           ]
         }
       }
+    },
+    "webapps": {
+      "methods": {
+        "delete": {
+          "description": "Deletes an existing web app.",
+          "httpMethod": "DELETE",
+          "id": "androidenterprise.webapps.delete",
+          "parameterOrder": [
+            "enterpriseId",
+            "webAppId"
+          ],
+          "parameters": {
+            "enterpriseId": {
+              "description": "The ID of the enterprise.",
+              "location": "path",
+              "required": true,
+              "type": "string"
+            },
+            "webAppId": {
+              "description": "The ID of the web app.",
+              "location": "path",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "path": "enterprises/{enterpriseId}/webApps/{webAppId}",
+          "scopes": [
+            "https://www.googleapis.com/auth/androidenterprise"
+          ]
+        },
+        "get": {
+          "description": "Gets an existing web app.",
+          "httpMethod": "GET",
+          "id": "androidenterprise.webapps.get",
+          "parameterOrder": [
+            "enterpriseId",
+            "webAppId"
+          ],
+          "parameters": {
+            "enterpriseId": {
+              "description": "The ID of the enterprise.",
+              "location": "path",
+              "required": true,
+              "type": "string"
+            },
+            "webAppId": {
+              "description": "The ID of the web app.",
+              "location": "path",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "path": "enterprises/{enterpriseId}/webApps/{webAppId}",
+          "response": {
+            "$ref": "WebApp"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/androidenterprise"
+          ]
+        },
+        "insert": {
+          "description": "Creates a new web app for the enterprise.",
+          "httpMethod": "POST",
+          "id": "androidenterprise.webapps.insert",
+          "parameterOrder": [
+            "enterpriseId"
+          ],
+          "parameters": {
+            "enterpriseId": {
+              "description": "The ID of the enterprise.",
+              "location": "path",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "path": "enterprises/{enterpriseId}/webApps",
+          "request": {
+            "$ref": "WebApp"
+          },
+          "response": {
+            "$ref": "WebApp"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/androidenterprise"
+          ]
+        },
+        "list": {
+          "description": "Retrieves the details of all web apps for a given enterprise.",
+          "httpMethod": "GET",
+          "id": "androidenterprise.webapps.list",
+          "parameterOrder": [
+            "enterpriseId"
+          ],
+          "parameters": {
+            "enterpriseId": {
+              "description": "The ID of the enterprise.",
+              "location": "path",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "path": "enterprises/{enterpriseId}/webApps",
+          "response": {
+            "$ref": "WebAppsListResponse"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/androidenterprise"
+          ]
+        },
+        "patch": {
+          "description": "Updates an existing web app. This method supports patch semantics.",
+          "httpMethod": "PATCH",
+          "id": "androidenterprise.webapps.patch",
+          "parameterOrder": [
+            "enterpriseId",
+            "webAppId"
+          ],
+          "parameters": {
+            "enterpriseId": {
+              "description": "The ID of the enterprise.",
+              "location": "path",
+              "required": true,
+              "type": "string"
+            },
+            "webAppId": {
+              "description": "The ID of the web app.",
+              "location": "path",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "path": "enterprises/{enterpriseId}/webApps/{webAppId}",
+          "request": {
+            "$ref": "WebApp"
+          },
+          "response": {
+            "$ref": "WebApp"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/androidenterprise"
+          ]
+        },
+        "update": {
+          "description": "Updates an existing web app.",
+          "httpMethod": "PUT",
+          "id": "androidenterprise.webapps.update",
+          "parameterOrder": [
+            "enterpriseId",
+            "webAppId"
+          ],
+          "parameters": {
+            "enterpriseId": {
+              "description": "The ID of the enterprise.",
+              "location": "path",
+              "required": true,
+              "type": "string"
+            },
+            "webAppId": {
+              "description": "The ID of the web app.",
+              "location": "path",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "path": "enterprises/{enterpriseId}/webApps/{webAppId}",
+          "request": {
+            "$ref": "WebApp"
+          },
+          "response": {
+            "$ref": "WebApp"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/androidenterprise"
+          ]
+        }
+      }
     }
   },
-  "revision": "20181105",
+  "revision": "20181121",
   "rootUrl": "https://www.googleapis.com/",
   "schemas": {
     "Administrator": {
@@ -4485,6 +4661,75 @@
         }
       },
       "type": "object"
+    },
+    "WebApp": {
+      "description": "WebApp resource info.",
+      "id": "WebApp",
+      "properties": {
+        "displayMode": {
+          "description": "The display mode of the web app.",
+          "type": "string"
+        },
+        "icons": {
+          "description": "A list of icons representing this website. Must have at least one element.",
+          "items": {
+            "$ref": "WebAppIcon"
+          },
+          "type": "array"
+        },
+        "isPublished": {
+          "description": "A flag whether the app has been published to the Play store yet.",
+          "type": "boolean"
+        },
+        "startUrl": {
+          "description": "The start URL, i.e. the URL that should load when the user opens the application.",
+          "type": "string"
+        },
+        "title": {
+          "description": "The title of the web application as displayed to the user (e.g., amongst a list of other applications, or as a label for an icon).",
+          "type": "string"
+        },
+        "versionCode": {
+          "description": "The current version of the app.\n\n\nNote that the version can automatically increase during the lifetime of the web app, while Google does internal housekeeping to keep the web app up-to-date.",
+          "format": "int64",
+          "type": "string"
+        },
+        "webAppId": {
+          "description": "The ID of the application.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "WebAppIcon": {
+      "description": "Icon for a web app.",
+      "id": "WebAppIcon",
+      "properties": {
+        "imageData": {
+          "description": "The actual bytes of the image in a base64url encoded string (c.f. RFC4648, section 5 \"Base 64 Encoding with URL and Filename Safe Alphabet\").  \n- The image type can be png or jpg.\n- The image should ideally be square.\n- The image should ideally have a size of 512x512.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "WebAppsListResponse": {
+      "description": "The web app details for an enterprise.",
+      "id": "WebAppsListResponse",
+      "properties": {
+        "kind": {
+          "default": "androidenterprise#webAppsListResponse",
+          "description": "Identifies what kind of resource this is. Value: the fixed string \"androidenterprise#webAppsListResponse\".",
+          "type": "string"
+        },
+        "webApp": {
+          "description": "The manifest describing a web app.",
+          "items": {
+            "$ref": "WebApp"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
     }
   },
   "servicePath": "androidenterprise/v1/",
diff --git a/androidenterprise/v1/androidenterprise-gen.go b/androidenterprise/v1/androidenterprise-gen.go
index 07f6109..4129231 100644
--- a/androidenterprise/v1/androidenterprise-gen.go
+++ b/androidenterprise/v1/androidenterprise-gen.go
@@ -86,6 +86,7 @@
 	s.Storelayoutclusters = NewStorelayoutclustersService(s)
 	s.Storelayoutpages = NewStorelayoutpagesService(s)
 	s.Users = NewUsersService(s)
+	s.Webapps = NewWebappsService(s)
 	return s, nil
 }
 
@@ -123,6 +124,8 @@
 	Storelayoutpages *StorelayoutpagesService
 
 	Users *UsersService
+
+	Webapps *WebappsService
 }
 
 func (s *Service) userAgent() string {
@@ -267,6 +270,15 @@
 	s *Service
 }
 
+func NewWebappsService(s *Service) *WebappsService {
+	rs := &WebappsService{s: s}
+	return rs
+}
+
+type WebappsService struct {
+	s *Service
+}
+
 // Administrator: This represents an enterprise admin who can manage the
 // enterprise in the managed Google Play store.
 type Administrator struct {
@@ -3549,6 +3561,135 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// WebApp: WebApp resource info.
+type WebApp struct {
+	// DisplayMode: The display mode of the web app.
+	DisplayMode string `json:"displayMode,omitempty"`
+
+	// Icons: A list of icons representing this website. Must have at least
+	// one element.
+	Icons []*WebAppIcon `json:"icons,omitempty"`
+
+	// IsPublished: A flag whether the app has been published to the Play
+	// store yet.
+	IsPublished bool `json:"isPublished,omitempty"`
+
+	// StartUrl: The start URL, i.e. the URL that should load when the user
+	// opens the application.
+	StartUrl string `json:"startUrl,omitempty"`
+
+	// Title: The title of the web application as displayed to the user
+	// (e.g., amongst a list of other applications, or as a label for an
+	// icon).
+	Title string `json:"title,omitempty"`
+
+	// VersionCode: The current version of the app.
+	//
+	//
+	// Note that the version can automatically increase during the lifetime
+	// of the web app, while Google does internal housekeeping to keep the
+	// web app up-to-date.
+	VersionCode int64 `json:"versionCode,omitempty,string"`
+
+	// WebAppId: The ID of the application.
+	WebAppId string `json:"webAppId,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "DisplayMode") 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. "DisplayMode") 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 *WebApp) MarshalJSON() ([]byte, error) {
+	type NoMethod WebApp
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// WebAppIcon: Icon for a web app.
+type WebAppIcon struct {
+	// ImageData: The actual bytes of the image in a base64url encoded
+	// string (c.f. RFC4648, section 5 "Base 64 Encoding with URL and
+	// Filename Safe Alphabet").
+	// - The image type can be png or jpg.
+	// - The image should ideally be square.
+	// - The image should ideally have a size of 512x512.
+	ImageData string `json:"imageData,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ImageData") 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. "ImageData") 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 *WebAppIcon) MarshalJSON() ([]byte, error) {
+	type NoMethod WebAppIcon
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// WebAppsListResponse: The web app details for an enterprise.
+type WebAppsListResponse struct {
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "androidenterprise#webAppsListResponse".
+	Kind string `json:"kind,omitempty"`
+
+	// WebApp: The manifest describing a web app.
+	WebApp []*WebApp `json:"webApp,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// 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 *WebAppsListResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod WebAppsListResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // method id "androidenterprise.devices.get":
 
 type DevicesGetCall struct {
@@ -13979,6 +14120,8 @@
 // user account on a device. The generated token is single-use and
 // expires after a few minutes.
 //
+// You can provision a maximum of 10 devices per user.
+//
 // This call only works with EMM-managed accounts.
 func (r *UsersService) GenerateAuthenticationToken(enterpriseId string, userId string) *UsersGenerateAuthenticationTokenCall {
 	c := &UsersGenerateAuthenticationTokenCall{s: r.s, urlParams_: make(gensupport.URLParams)}
@@ -14073,7 +14216,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Generates an authentication token which the device policy client can use to provision the given EMM-managed user account on a device. The generated token is single-use and expires after a few minutes.\n\nThis call only works with EMM-managed accounts.",
+	//   "description": "Generates an authentication token which the device policy client can use to provision the given EMM-managed user account on a device. The generated token is single-use and expires after a few minutes.\n\nYou can provision a maximum of 10 devices per user.\n\nThis call only works with EMM-managed accounts.",
 	//   "httpMethod": "POST",
 	//   "id": "androidenterprise.users.generateAuthenticationToken",
 	//   "parameterOrder": [
@@ -15521,3 +15664,836 @@
 	// }
 
 }
+
+// method id "androidenterprise.webapps.delete":
+
+type WebappsDeleteCall struct {
+	s            *Service
+	enterpriseId string
+	webAppId     string
+	urlParams_   gensupport.URLParams
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// Delete: Deletes an existing web app.
+func (r *WebappsService) Delete(enterpriseId string, webAppId string) *WebappsDeleteCall {
+	c := &WebappsDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.enterpriseId = enterpriseId
+	c.webAppId = webAppId
+	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 *WebappsDeleteCall) Fields(s ...googleapi.Field) *WebappsDeleteCall {
+	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 *WebappsDeleteCall) Context(ctx context.Context) *WebappsDeleteCall {
+	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 *WebappsDeleteCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *WebappsDeleteCall) 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)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "enterprises/{enterpriseId}/webApps/{webAppId}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("DELETE", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"enterpriseId": c.enterpriseId,
+		"webAppId":     c.webAppId,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "androidenterprise.webapps.delete" call.
+func (c *WebappsDeleteCall) 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": "Deletes an existing web app.",
+	//   "httpMethod": "DELETE",
+	//   "id": "androidenterprise.webapps.delete",
+	//   "parameterOrder": [
+	//     "enterpriseId",
+	//     "webAppId"
+	//   ],
+	//   "parameters": {
+	//     "enterpriseId": {
+	//       "description": "The ID of the enterprise.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "webAppId": {
+	//       "description": "The ID of the web app.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "enterprises/{enterpriseId}/webApps/{webAppId}",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidenterprise"
+	//   ]
+	// }
+
+}
+
+// method id "androidenterprise.webapps.get":
+
+type WebappsGetCall struct {
+	s            *Service
+	enterpriseId string
+	webAppId     string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// Get: Gets an existing web app.
+func (r *WebappsService) Get(enterpriseId string, webAppId string) *WebappsGetCall {
+	c := &WebappsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.enterpriseId = enterpriseId
+	c.webAppId = webAppId
+	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 *WebappsGetCall) Fields(s ...googleapi.Field) *WebappsGetCall {
+	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 *WebappsGetCall) IfNoneMatch(entityTag string) *WebappsGetCall {
+	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 *WebappsGetCall) Context(ctx context.Context) *WebappsGetCall {
+	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 *WebappsGetCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *WebappsGetCall) 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)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "enterprises/{enterpriseId}/webApps/{webAppId}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"enterpriseId": c.enterpriseId,
+		"webAppId":     c.webAppId,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "androidenterprise.webapps.get" call.
+// Exactly one of *WebApp or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *WebApp.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 *WebappsGetCall) Do(opts ...googleapi.CallOption) (*WebApp, 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 := &WebApp{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets an existing web app.",
+	//   "httpMethod": "GET",
+	//   "id": "androidenterprise.webapps.get",
+	//   "parameterOrder": [
+	//     "enterpriseId",
+	//     "webAppId"
+	//   ],
+	//   "parameters": {
+	//     "enterpriseId": {
+	//       "description": "The ID of the enterprise.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "webAppId": {
+	//       "description": "The ID of the web app.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "enterprises/{enterpriseId}/webApps/{webAppId}",
+	//   "response": {
+	//     "$ref": "WebApp"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidenterprise"
+	//   ]
+	// }
+
+}
+
+// method id "androidenterprise.webapps.insert":
+
+type WebappsInsertCall struct {
+	s            *Service
+	enterpriseId string
+	webapp       *WebApp
+	urlParams_   gensupport.URLParams
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// Insert: Creates a new web app for the enterprise.
+func (r *WebappsService) Insert(enterpriseId string, webapp *WebApp) *WebappsInsertCall {
+	c := &WebappsInsertCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.enterpriseId = enterpriseId
+	c.webapp = webapp
+	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 *WebappsInsertCall) Fields(s ...googleapi.Field) *WebappsInsertCall {
+	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 *WebappsInsertCall) Context(ctx context.Context) *WebappsInsertCall {
+	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 *WebappsInsertCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *WebappsInsertCall) 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.webapp)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "enterprises/{enterpriseId}/webApps")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"enterpriseId": c.enterpriseId,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "androidenterprise.webapps.insert" call.
+// Exactly one of *WebApp or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *WebApp.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 *WebappsInsertCall) Do(opts ...googleapi.CallOption) (*WebApp, 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 := &WebApp{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Creates a new web app for the enterprise.",
+	//   "httpMethod": "POST",
+	//   "id": "androidenterprise.webapps.insert",
+	//   "parameterOrder": [
+	//     "enterpriseId"
+	//   ],
+	//   "parameters": {
+	//     "enterpriseId": {
+	//       "description": "The ID of the enterprise.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "enterprises/{enterpriseId}/webApps",
+	//   "request": {
+	//     "$ref": "WebApp"
+	//   },
+	//   "response": {
+	//     "$ref": "WebApp"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidenterprise"
+	//   ]
+	// }
+
+}
+
+// method id "androidenterprise.webapps.list":
+
+type WebappsListCall struct {
+	s            *Service
+	enterpriseId string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// List: Retrieves the details of all web apps for a given enterprise.
+func (r *WebappsService) List(enterpriseId string) *WebappsListCall {
+	c := &WebappsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.enterpriseId = enterpriseId
+	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 *WebappsListCall) Fields(s ...googleapi.Field) *WebappsListCall {
+	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 *WebappsListCall) IfNoneMatch(entityTag string) *WebappsListCall {
+	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 *WebappsListCall) Context(ctx context.Context) *WebappsListCall {
+	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 *WebappsListCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *WebappsListCall) 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)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "enterprises/{enterpriseId}/webApps")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"enterpriseId": c.enterpriseId,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "androidenterprise.webapps.list" call.
+// Exactly one of *WebAppsListResponse or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *WebAppsListResponse.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 *WebappsListCall) Do(opts ...googleapi.CallOption) (*WebAppsListResponse, 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 := &WebAppsListResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves the details of all web apps for a given enterprise.",
+	//   "httpMethod": "GET",
+	//   "id": "androidenterprise.webapps.list",
+	//   "parameterOrder": [
+	//     "enterpriseId"
+	//   ],
+	//   "parameters": {
+	//     "enterpriseId": {
+	//       "description": "The ID of the enterprise.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "enterprises/{enterpriseId}/webApps",
+	//   "response": {
+	//     "$ref": "WebAppsListResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidenterprise"
+	//   ]
+	// }
+
+}
+
+// method id "androidenterprise.webapps.patch":
+
+type WebappsPatchCall struct {
+	s            *Service
+	enterpriseId string
+	webAppId     string
+	webapp       *WebApp
+	urlParams_   gensupport.URLParams
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// Patch: Updates an existing web app. This method supports patch
+// semantics.
+func (r *WebappsService) Patch(enterpriseId string, webAppId string, webapp *WebApp) *WebappsPatchCall {
+	c := &WebappsPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.enterpriseId = enterpriseId
+	c.webAppId = webAppId
+	c.webapp = webapp
+	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 *WebappsPatchCall) Fields(s ...googleapi.Field) *WebappsPatchCall {
+	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 *WebappsPatchCall) Context(ctx context.Context) *WebappsPatchCall {
+	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 *WebappsPatchCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *WebappsPatchCall) 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.webapp)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "enterprises/{enterpriseId}/webApps/{webAppId}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("PATCH", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"enterpriseId": c.enterpriseId,
+		"webAppId":     c.webAppId,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "androidenterprise.webapps.patch" call.
+// Exactly one of *WebApp or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *WebApp.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 *WebappsPatchCall) Do(opts ...googleapi.CallOption) (*WebApp, 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 := &WebApp{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates an existing web app. This method supports patch semantics.",
+	//   "httpMethod": "PATCH",
+	//   "id": "androidenterprise.webapps.patch",
+	//   "parameterOrder": [
+	//     "enterpriseId",
+	//     "webAppId"
+	//   ],
+	//   "parameters": {
+	//     "enterpriseId": {
+	//       "description": "The ID of the enterprise.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "webAppId": {
+	//       "description": "The ID of the web app.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "enterprises/{enterpriseId}/webApps/{webAppId}",
+	//   "request": {
+	//     "$ref": "WebApp"
+	//   },
+	//   "response": {
+	//     "$ref": "WebApp"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidenterprise"
+	//   ]
+	// }
+
+}
+
+// method id "androidenterprise.webapps.update":
+
+type WebappsUpdateCall struct {
+	s            *Service
+	enterpriseId string
+	webAppId     string
+	webapp       *WebApp
+	urlParams_   gensupport.URLParams
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// Update: Updates an existing web app.
+func (r *WebappsService) Update(enterpriseId string, webAppId string, webapp *WebApp) *WebappsUpdateCall {
+	c := &WebappsUpdateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.enterpriseId = enterpriseId
+	c.webAppId = webAppId
+	c.webapp = webapp
+	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 *WebappsUpdateCall) Fields(s ...googleapi.Field) *WebappsUpdateCall {
+	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 *WebappsUpdateCall) Context(ctx context.Context) *WebappsUpdateCall {
+	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 *WebappsUpdateCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *WebappsUpdateCall) 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.webapp)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "enterprises/{enterpriseId}/webApps/{webAppId}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("PUT", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"enterpriseId": c.enterpriseId,
+		"webAppId":     c.webAppId,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "androidenterprise.webapps.update" call.
+// Exactly one of *WebApp or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *WebApp.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 *WebappsUpdateCall) Do(opts ...googleapi.CallOption) (*WebApp, 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 := &WebApp{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates an existing web app.",
+	//   "httpMethod": "PUT",
+	//   "id": "androidenterprise.webapps.update",
+	//   "parameterOrder": [
+	//     "enterpriseId",
+	//     "webAppId"
+	//   ],
+	//   "parameters": {
+	//     "enterpriseId": {
+	//       "description": "The ID of the enterprise.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "webAppId": {
+	//       "description": "The ID of the web app.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "enterprises/{enterpriseId}/webApps/{webAppId}",
+	//   "request": {
+	//     "$ref": "WebApp"
+	//   },
+	//   "response": {
+	//     "$ref": "WebApp"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidenterprise"
+	//   ]
+	// }
+
+}
diff --git a/androidmanagement/v1/androidmanagement-api.json b/androidmanagement/v1/androidmanagement-api.json
index 8630cb6..1d1a16f 100644
--- a/androidmanagement/v1/androidmanagement-api.json
+++ b/androidmanagement/v1/androidmanagement-api.json
@@ -766,7 +766,7 @@
       }
     }
   },
-  "revision": "20181029",
+  "revision": "20181113",
   "rootUrl": "https://androidmanagement.googleapis.com/",
   "schemas": {
     "AlwaysOnVpnPackage": {
@@ -2743,7 +2743,7 @@
           "type": "boolean"
         },
         "usbMassStorageEnabled": {
-          "description": "Whether USB storage is enabled.",
+          "description": "Whether USB storage is enabled. Deprecated.",
           "type": "boolean"
         },
         "version": {
diff --git a/androidmanagement/v1/androidmanagement-gen.go b/androidmanagement/v1/androidmanagement-gen.go
index cc7fa5c..6cb3a47 100644
--- a/androidmanagement/v1/androidmanagement-gen.go
+++ b/androidmanagement/v1/androidmanagement-gen.go
@@ -2594,7 +2594,7 @@
 	// disabled.
 	UsbFileTransferDisabled bool `json:"usbFileTransferDisabled,omitempty"`
 
-	// UsbMassStorageEnabled: Whether USB storage is enabled.
+	// UsbMassStorageEnabled: Whether USB storage is enabled. Deprecated.
 	UsbMassStorageEnabled bool `json:"usbMassStorageEnabled,omitempty"`
 
 	// Version: The version of the policy. This is a read-only field. The
diff --git a/androidpublisher/v3/androidpublisher-api.json b/androidpublisher/v3/androidpublisher-api.json
index ed07097..8e9c4ff 100644
--- a/androidpublisher/v3/androidpublisher-api.json
+++ b/androidpublisher/v3/androidpublisher-api.json
@@ -15,7 +15,7 @@
   "description": "Accesses Android application developers' Google Play accounts.",
   "discoveryVersion": "v1",
   "documentationLink": "https://developers.google.com/android-publisher",
-  "etag": "\"J3WqvAcMk4eQjJXvfSI4Yr8VouA/zcbRQkf_Tx0OoUkltp1uvxXyfHQ\"",
+  "etag": "\"J3WqvAcMk4eQjJXvfSI4Yr8VouA/lTkj66Di1eRkZoaLoAOUB9OKJfk\"",
   "icons": {
     "x16": "https://www.google.com/images/icons/product/android-16.png",
     "x32": "https://www.google.com/images/icons/product/android-32.png"
@@ -2226,7 +2226,7 @@
       }
     }
   },
-  "revision": "20181009",
+  "revision": "20181126",
   "rootUrl": "https://www.googleapis.com/",
   "schemas": {
     "Apk": {
@@ -3052,6 +3052,11 @@
           "description": "Whether the subscription will automatically be renewed when it reaches its current expiry time.",
           "type": "boolean"
         },
+        "autoResumeTimeMillis": {
+          "description": "Time at which the subscription will be automatically resumed, in milliseconds since the Epoch. Only present if the user has requested to pause the subscription.",
+          "format": "int64",
+          "type": "string"
+        },
         "cancelReason": {
           "description": "The reason why a subscription was canceled or is not auto-renewing. Possible values are:  \n- User canceled the subscription \n- Subscription was canceled by the system, for example because of a billing problem \n- Subscription was replaced with a new subscription \n- Subscription was canceled by the developer",
           "format": "int32",
diff --git a/androidpublisher/v3/androidpublisher-gen.go b/androidpublisher/v3/androidpublisher-gen.go
index d6225b0..41c4a32 100644
--- a/androidpublisher/v3/androidpublisher-gen.go
+++ b/androidpublisher/v3/androidpublisher-gen.go
@@ -1864,6 +1864,11 @@
 	// when it reaches its current expiry time.
 	AutoRenewing bool `json:"autoRenewing,omitempty"`
 
+	// AutoResumeTimeMillis: Time at which the subscription will be
+	// automatically resumed, in milliseconds since the Epoch. Only present
+	// if the user has requested to pause the subscription.
+	AutoResumeTimeMillis int64 `json:"autoResumeTimeMillis,omitempty,string"`
+
 	// CancelReason: The reason why a subscription was canceled or is not
 	// auto-renewing. Possible values are:
 	// - User canceled the subscription
diff --git a/api-list.json b/api-list.json
index f70409a..54fca74 100644
--- a/api-list.json
+++ b/api-list.json
@@ -786,21 +786,6 @@
   },
   {
    "kind": "discovery#directoryItem",
-   "id": "cloudiot:v1beta1",
-   "name": "cloudiot",
-   "version": "v1beta1",
-   "title": "Cloud IoT API",
-   "description": "Registers and manages IoT (Internet of Things) devices that connect to the Google Cloud Platform.",
-   "discoveryRestUrl": "https://cloudiot.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/iot",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
    "id": "cloudkms:v1",
    "name": "cloudkms",
    "version": "v1",
@@ -891,6 +876,21 @@
   },
   {
    "kind": "discovery#directoryItem",
+   "id": "cloudscheduler:v1beta1",
+   "name": "cloudscheduler",
+   "version": "v1beta1",
+   "title": "Cloud Scheduler API",
+   "description": "Creates and manages jobs run on a regular recurring schedule.",
+   "discoveryRestUrl": "https://cloudscheduler.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/scheduler/",
+   "preferred": true
+  },
+  {
+   "kind": "discovery#directoryItem",
    "id": "cloudsearch:v1",
    "name": "cloudsearch",
    "version": "v1",
@@ -1528,6 +1528,21 @@
   },
   {
    "kind": "discovery#directoryItem",
+   "id": "driveactivity:v2",
+   "name": "driveactivity",
+   "version": "v2",
+   "title": "Drive Activity API",
+   "description": "Provides a historical view of activity in Google Drive.",
+   "discoveryRestUrl": "https://driveactivity.googleapis.com/$discovery/rest?version=v2",
+   "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://developers.google.com/drive/activity/",
+   "preferred": true
+  },
+  {
+   "kind": "discovery#directoryItem",
    "id": "file:v1beta1",
    "name": "file",
    "version": "v1beta1",
@@ -2234,6 +2249,22 @@
     "x32": "https://www.google.com/images/icons/product/pagespeed-32.png"
    },
    "documentationLink": "https://developers.google.com/speed/docs/insights/v4/getting-started",
+   "preferred": false
+  },
+  {
+   "kind": "discovery#directoryItem",
+   "id": "pagespeedonline:v5",
+   "name": "pagespeedonline",
+   "version": "v5",
+   "title": "PageSpeed Insights API",
+   "description": "Analyzes the performance of a web page and provides tailored suggestions to make that page faster.",
+   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/pagespeedonline/v5/rest",
+   "discoveryLink": "./apis/pagespeedonline/v5/rest",
+   "icons": {
+    "x16": "https://www.google.com/images/icons/product/pagespeed-16.png",
+    "x32": "https://www.google.com/images/icons/product/pagespeed-32.png"
+   },
+   "documentationLink": "https://developers.google.com/speed/docs/insights/v5/get-started",
    "preferred": true
   },
   {
@@ -2723,7 +2754,7 @@
    "name": "slides",
    "version": "v1",
    "title": "Google Slides API",
-   "description": "An API for creating and editing Google Slides presentations.",
+   "description": "Reads and writes Google Slides presentations.",
    "discoveryRestUrl": "https://slides.googleapis.com/$discovery/rest?version=v1",
    "icons": {
     "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
@@ -2764,6 +2795,21 @@
   },
   {
    "kind": "discovery#directoryItem",
+   "id": "speech:v1p1beta1",
+   "name": "speech",
+   "version": "v1p1beta1",
+   "title": "Cloud Speech API",
+   "description": "Converts audio to text by applying powerful neural network models.",
+   "discoveryRestUrl": "https://speech.googleapis.com/$discovery/rest?version=v1p1beta1",
+   "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/speech-to-text/docs/quickstart-protocol",
+   "preferred": false
+  },
+  {
+   "kind": "discovery#directoryItem",
    "id": "speech:v1",
    "name": "speech",
    "version": "v1",
@@ -2779,21 +2825,6 @@
   },
   {
    "kind": "discovery#directoryItem",
-   "id": "speech:v1beta1",
-   "name": "speech",
-   "version": "v1beta1",
-   "title": "Cloud Speech API",
-   "description": "Converts audio to text by applying powerful neural network models.",
-   "discoveryRestUrl": "https://speech.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/speech-to-text/docs/quickstart-protocol",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
    "id": "sqladmin:v1beta4",
    "name": "sqladmin",
    "version": "v1beta4",
diff --git a/appengine/v1/appengine-api.json b/appengine/v1/appengine-api.json
index 5b9476f..3805a74 100644
--- a/appengine/v1/appengine-api.json
+++ b/appengine/v1/appengine-api.json
@@ -1572,7 +1572,7 @@
       }
     }
   },
-  "revision": "20181020",
+  "revision": "20181120",
   "rootUrl": "https://appengine.googleapis.com/",
   "schemas": {
     "ApiConfigHandler": {
@@ -2010,7 +2010,7 @@
       "properties": {
         "cloudBuildOptions": {
           "$ref": "CloudBuildOptions",
-          "description": "Options for any Google Cloud Build builds created as a part of this deployment.Note that this is orthogonal to the build parameter, where the deployment depends on an already existing cloud build. These options will only be used if a new build is created, such as when deploying to the App Engine flexible environment using files or zip."
+          "description": "Options for any Google Cloud Build builds created as a part of this deployment.These options will only be used if a new build is created, such as when deploying to the App Engine flexible environment using files or zip."
         },
         "container": {
           "$ref": "ContainerInfo",
diff --git a/appengine/v1/appengine-gen.go b/appengine/v1/appengine-gen.go
index 27a0b78..e0eb303 100644
--- a/appengine/v1/appengine-gen.go
+++ b/appengine/v1/appengine-gen.go
@@ -1021,10 +1021,8 @@
 // to App Engine.
 type Deployment struct {
 	// CloudBuildOptions: Options for any Google Cloud Build builds created
-	// as a part of this deployment.Note that this is orthogonal to the
-	// build parameter, where the deployment depends on an already existing
-	// cloud build. These options will only be used if a new build is
-	// created, such as when deploying to the App Engine flexible
+	// as a part of this deployment.These options will only be used if a new
+	// build is created, such as when deploying to the App Engine flexible
 	// environment using files or zip.
 	CloudBuildOptions *CloudBuildOptions `json:"cloudBuildOptions,omitempty"`
 
diff --git a/appengine/v1beta/appengine-api.json b/appengine/v1beta/appengine-api.json
index 2d12dcd..4acc2d2 100644
--- a/appengine/v1beta/appengine-api.json
+++ b/appengine/v1beta/appengine-api.json
@@ -1572,7 +1572,7 @@
       }
     }
   },
-  "revision": "20181020",
+  "revision": "20181120",
   "rootUrl": "https://appengine.googleapis.com/",
   "schemas": {
     "ApiConfigHandler": {
@@ -2061,7 +2061,7 @@
         },
         "cloudBuildOptions": {
           "$ref": "CloudBuildOptions",
-          "description": "Options for any Google Cloud Build builds created as a part of this deployment.Note that this is orthogonal to the build parameter, where the deployment depends on an already existing cloud build. These options will only be used if a new build is created, such as when deploying to the App Engine flexible environment using files or zip."
+          "description": "Options for any Google Cloud Build builds created as a part of this deployment.These options will only be used if a new build is created, such as when deploying to the App Engine flexible environment using files or zip."
         },
         "container": {
           "$ref": "ContainerInfo",
diff --git a/appengine/v1beta/appengine-gen.go b/appengine/v1beta/appengine-gen.go
index 08b41e8..7e03b73 100644
--- a/appengine/v1beta/appengine-gen.go
+++ b/appengine/v1beta/appengine-gen.go
@@ -1118,10 +1118,8 @@
 	Build *BuildInfo `json:"build,omitempty"`
 
 	// CloudBuildOptions: Options for any Google Cloud Build builds created
-	// as a part of this deployment.Note that this is orthogonal to the
-	// build parameter, where the deployment depends on an already existing
-	// cloud build. These options will only be used if a new build is
-	// created, such as when deploying to the App Engine flexible
+	// as a part of this deployment.These options will only be used if a new
+	// build is created, such as when deploying to the App Engine flexible
 	// environment using files or zip.
 	CloudBuildOptions *CloudBuildOptions `json:"cloudBuildOptions,omitempty"`
 
diff --git a/bigquery/v2/bigquery-api.json b/bigquery/v2/bigquery-api.json
index c9f29c2..0547369 100644
--- a/bigquery/v2/bigquery-api.json
+++ b/bigquery/v2/bigquery-api.json
@@ -32,7 +32,7 @@
   "description": "A data platform for customers to create, manage, share and query data.",
   "discoveryVersion": "v1",
   "documentationLink": "https://cloud.google.com/bigquery/",
-  "etag": "\"J3WqvAcMk4eQjJXvfSI4Yr8VouA/jYrUubKKHFACpvSbIbPxYlukj5c\"",
+  "etag": "\"J3WqvAcMk4eQjJXvfSI4Yr8VouA/iR9vcxX0WBCms4jkbIj3mFOSrj4\"",
   "icons": {
     "x16": "https://www.google.com/images/icons/product/search-16.gif",
     "x32": "https://www.google.com/images/icons/product/search-32.gif"
@@ -998,7 +998,7 @@
       }
     }
   },
-  "revision": "20181025",
+  "revision": "20181105",
   "rootUrl": "https://www.googleapis.com/",
   "schemas": {
     "BigQueryModelTraining": {
@@ -1921,6 +1921,10 @@
           "pattern": ".?",
           "type": "string"
         },
+        "rangePartitioning": {
+          "$ref": "RangePartitioning",
+          "description": "[Experimental] Range partitioning specification for this table. Only one of timePartitioning and rangePartitioning should be specified."
+        },
         "schema": {
           "$ref": "TableSchema",
           "description": "[Optional] The schema for the destination table. The schema can be omitted if the destination table already exists, or if you're loading data from Google Cloud Datastore."
@@ -1958,10 +1962,10 @@
         },
         "timePartitioning": {
           "$ref": "TimePartitioning",
-          "description": "Time-based partitioning specification for the destination table."
+          "description": "Time-based partitioning specification for the destination table. Only one of timePartitioning and rangePartitioning should be specified."
         },
         "useAvroLogicalTypes": {
-          "description": "If sourceFormat is set to \"AVRO\", indicates whether to enable interpreting logical types into their corresponding types (ie. TIMESTAMP), instead of only using their raw types (ie. INTEGER). The default value will be true once this feature launches, but can be set now in preparation.",
+          "description": "[Optional] If sourceFormat is set to \"AVRO\", indicates whether to enable interpreting logical types into their corresponding types (ie. TIMESTAMP), instead of only using their raw types (ie. INTEGER).",
           "type": "boolean"
         },
         "writeDisposition": {
@@ -2038,6 +2042,10 @@
           },
           "type": "array"
         },
+        "rangePartitioning": {
+          "$ref": "RangePartitioning",
+          "description": "[Experimental] Range partitioning specification for this table. Only one of timePartitioning and rangePartitioning should be specified."
+        },
         "schemaUpdateOptions": {
           "description": "Allows the schema of the destination table to be updated as a side effect of the query job. Schema update options are supported in two cases: when writeDisposition is WRITE_APPEND; when writeDisposition is WRITE_TRUNCATE and the destination table is a partition of a table, specified by partition decorators. For normal tables, WRITE_TRUNCATE will always overwrite the schema. One or more of the following values are specified: ALLOW_FIELD_ADDITION: allow adding a nullable field to the schema. ALLOW_FIELD_RELAXATION: allow relaxing a required field in the original schema to nullable.",
           "items": {
@@ -2054,7 +2062,7 @@
         },
         "timePartitioning": {
           "$ref": "TimePartitioning",
-          "description": "Time-based partitioning specification for the destination table."
+          "description": "Time-based partitioning specification for the destination table. Only one of timePartitioning and rangePartitioning should be specified."
         },
         "useLegacySql": {
           "default": "true",
diff --git a/bigquery/v2/bigquery-gen.go b/bigquery/v2/bigquery-gen.go
index c37f370..44e73e5 100644
--- a/bigquery/v2/bigquery-gen.go
+++ b/bigquery/v2/bigquery-gen.go
@@ -1684,6 +1684,11 @@
 	// Default: "
 	Quote *string `json:"quote,omitempty"`
 
+	// RangePartitioning: [Experimental] Range partitioning specification
+	// for this table. Only one of timePartitioning and rangePartitioning
+	// should be specified.
+	RangePartitioning *RangePartitioning `json:"rangePartitioning,omitempty"`
+
 	// Schema: [Optional] The schema for the destination table. The schema
 	// can be omitted if the destination table already exists, or if you're
 	// loading data from Google Cloud Datastore.
@@ -1735,14 +1740,14 @@
 	SourceUris []string `json:"sourceUris,omitempty"`
 
 	// TimePartitioning: Time-based partitioning specification for the
-	// destination table.
+	// destination table. Only one of timePartitioning and rangePartitioning
+	// should be specified.
 	TimePartitioning *TimePartitioning `json:"timePartitioning,omitempty"`
 
-	// UseAvroLogicalTypes: If sourceFormat is set to "AVRO", indicates
-	// whether to enable interpreting logical types into their corresponding
-	// types (ie. TIMESTAMP), instead of only using their raw types (ie.
-	// INTEGER). The default value will be true once this feature launches,
-	// but can be set now in preparation.
+	// UseAvroLogicalTypes: [Optional] If sourceFormat is set to "AVRO",
+	// indicates whether to enable interpreting logical types into their
+	// corresponding types (ie. TIMESTAMP), instead of only using their raw
+	// types (ie. INTEGER).
 	UseAvroLogicalTypes bool `json:"useAvroLogicalTypes,omitempty"`
 
 	// WriteDisposition: [Optional] Specifies the action that occurs if the
@@ -1862,6 +1867,11 @@
 	// QueryParameters: Query parameters for standard SQL queries.
 	QueryParameters []*QueryParameter `json:"queryParameters,omitempty"`
 
+	// RangePartitioning: [Experimental] Range partitioning specification
+	// for this table. Only one of timePartitioning and rangePartitioning
+	// should be specified.
+	RangePartitioning *RangePartitioning `json:"rangePartitioning,omitempty"`
+
 	// SchemaUpdateOptions: Allows the schema of the destination table to be
 	// updated as a side effect of the query job. Schema update options are
 	// supported in two cases: when writeDisposition is WRITE_APPEND; when
@@ -1880,7 +1890,8 @@
 	TableDefinitions map[string]ExternalDataConfiguration `json:"tableDefinitions,omitempty"`
 
 	// TimePartitioning: Time-based partitioning specification for the
-	// destination table.
+	// destination table. Only one of timePartitioning and rangePartitioning
+	// should be specified.
 	TimePartitioning *TimePartitioning `json:"timePartitioning,omitempty"`
 
 	// UseLegacySql: Specifies whether to use BigQuery's legacy SQL dialect
diff --git a/calendar/v3/calendar-api.json b/calendar/v3/calendar-api.json
index 83f735e..3a58222 100644
--- a/calendar/v3/calendar-api.json
+++ b/calendar/v3/calendar-api.json
@@ -26,7 +26,7 @@
   "description": "Manipulates events and other calendar data.",
   "discoveryVersion": "v1",
   "documentationLink": "https://developers.google.com/google-apps/calendar/firstapp",
-  "etag": "\"J3WqvAcMk4eQjJXvfSI4Yr8VouA/7shFmGJYOQm8lYcU7swGRcnQGuU\"",
+  "etag": "\"J3WqvAcMk4eQjJXvfSI4Yr8VouA/lI7ZDM8riDWk38LHz77rwUi1L4g\"",
   "icons": {
     "x16": "http://www.google.com/images/icons/product/calendar-16.png",
     "x32": "http://www.google.com/images/icons/product/calendar-32.png"
@@ -1724,7 +1724,7 @@
       }
     }
   },
-  "revision": "20181023",
+  "revision": "20181125",
   "rootUrl": "https://www.googleapis.com/",
   "schemas": {
     "Acl": {
@@ -1991,7 +1991,7 @@
       "id": "CalendarNotification",
       "properties": {
         "method": {
-          "description": "The method used to deliver the notification. Possible values are:  \n- \"email\" - Reminders are sent via email. \n- \"sms\" - Reminders are sent via SMS. This value is read-only and is ignored on inserts and updates. SMS reminders are only available for G Suite customers.  \nRequired when adding a notification.",
+          "description": "The method used to deliver the notification. Possible values are:  \n- \"email\" - Notifications are sent via email. \n- \"sms\" - Deprecated. Once this feature is shutdown, the API will no longer return notifications using this method. Any newly added SMS notifications will be ignored. See  Google Calendar SMS notifications to be removed for more information.\nNotifications are sent via SMS. This value is read-only and is ignored on inserts and updates. SMS notifications are only available for G Suite customers.  \nRequired when adding a notification.",
           "type": "string"
         },
         "type": {
@@ -2710,7 +2710,7 @@
       "id": "EventReminder",
       "properties": {
         "method": {
-          "description": "The method used by this reminder. Possible values are:  \n- \"email\" - Reminders are sent via email. \n- \"sms\" - Reminders are sent via SMS. These are only available for G Suite customers. Requests to set SMS reminders for other account types are ignored. \n- \"popup\" - Reminders are sent via a UI popup.  \nRequired when adding a reminder.",
+          "description": "The method used by this reminder. Possible values are:  \n- \"email\" - Reminders are sent via email. \n- \"sms\" - Deprecated. Once this feature is shutdown, the API will no longer return reminders using this method. Any newly added SMS reminders will be ignored. See  Google Calendar SMS notifications to be removed for more information.\nReminders are sent via SMS. These are only available for G Suite customers. Requests to set SMS reminders for other account types are ignored. \n- \"popup\" - Reminders are sent via a UI popup.  \nRequired when adding a reminder.",
           "type": "string"
         },
         "minutes": {
diff --git a/calendar/v3/calendar-gen.go b/calendar/v3/calendar-gen.go
index 6fd2dc1..fdef5f7 100644
--- a/calendar/v3/calendar-gen.go
+++ b/calendar/v3/calendar-gen.go
@@ -593,10 +593,14 @@
 type CalendarNotification struct {
 	// Method: The method used to deliver the notification. Possible values
 	// are:
-	// - "email" - Reminders are sent via email.
-	// - "sms" - Reminders are sent via SMS. This value is read-only and is
-	// ignored on inserts and updates. SMS reminders are only available for
-	// G Suite customers.
+	// - "email" - Notifications are sent via email.
+	// - "sms" - Deprecated. Once this feature is shutdown, the API will no
+	// longer return notifications using this method. Any newly added SMS
+	// notifications will be ignored. See  Google Calendar SMS notifications
+	// to be removed for more information.
+	// Notifications are sent via SMS. This value is read-only and is
+	// ignored on inserts and updates. SMS notifications are only available
+	// for G Suite customers.
 	// Required when adding a notification.
 	Method string `json:"method,omitempty"`
 
@@ -1904,9 +1908,13 @@
 type EventReminder struct {
 	// Method: The method used by this reminder. Possible values are:
 	// - "email" - Reminders are sent via email.
-	// - "sms" - Reminders are sent via SMS. These are only available for G
-	// Suite customers. Requests to set SMS reminders for other account
-	// types are ignored.
+	// - "sms" - Deprecated. Once this feature is shutdown, the API will no
+	// longer return reminders using this method. Any newly added SMS
+	// reminders will be ignored. See  Google Calendar SMS notifications to
+	// be removed for more information.
+	// Reminders are sent via SMS. These are only available for G Suite
+	// customers. Requests to set SMS reminders for other account types are
+	// ignored.
 	// - "popup" - Reminders are sent via a UI popup.
 	// Required when adding a reminder.
 	Method string `json:"method,omitempty"`
diff --git a/classroom/v1/classroom-api.json b/classroom/v1/classroom-api.json
index f5a56b3..ce3a210 100644
--- a/classroom/v1/classroom-api.json
+++ b/classroom/v1/classroom-api.json
@@ -1092,7 +1092,7 @@
                   ]
                 },
                 "reclaim": {
-                  "description": "Reclaims a student submission on behalf of the student that owns it.\n\nReclaiming a student submission transfers ownership of attached Drive\nfiles to the student and update the submission state.\n\nOnly the student that owns the requested student submission may call this\nmethod, and only for a student submission that has been turned in.\n\nThis request must be made by the Developer Console project of the\n[OAuth client ID](https://support.google.com/cloud/answer/6158849) used to\ncreate the corresponding course work item.\n\nThis method returns the following error codes:\n\n* `PERMISSION_DENIED` if the requesting user is not permitted to access the\nrequested course or course work, unsubmit the requested student submission,\nor for access errors.\n* `FAILED_PRECONDITION` if the student submission has not been turned in.\n* `INVALID_ARGUMENT` if the request is malformed.\n* `NOT_FOUND` if the requested course, course work, or student submission\ndoes not exist.",
+                  "description": "Reclaims a student submission on behalf of the student that owns it.\n\nReclaiming a student submission transfers ownership of attached Drive\nfiles to the student and updates the submission state.\n\nOnly the student that owns the requested student submission may call this\nmethod, and only for a student submission that has been turned in.\n\nThis request must be made by the Developer Console project of the\n[OAuth client ID](https://support.google.com/cloud/answer/6158849) used to\ncreate the corresponding course work item.\n\nThis method returns the following error codes:\n\n* `PERMISSION_DENIED` if the requesting user is not permitted to access the\nrequested course or course work, unsubmit the requested student submission,\nor for access errors.\n* `FAILED_PRECONDITION` if the student submission has not been turned in.\n* `INVALID_ARGUMENT` if the request is malformed.\n* `NOT_FOUND` if the requested course, course work, or student submission\ndoes not exist.",
                   "flatPath": "v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{id}:reclaim",
                   "httpMethod": "POST",
                   "id": "classroom.courses.courseWork.studentSubmissions.reclaim",
@@ -1975,7 +1975,7 @@
       }
     }
   },
-  "revision": "20180919",
+  "revision": "20181127",
   "rootUrl": "https://classroom.googleapis.com/",
   "schemas": {
     "Announcement": {
@@ -2332,11 +2332,11 @@
         },
         "dueDate": {
           "$ref": "Date",
-          "description": "Optional date, in UTC, that submissions for this this course work are due.\nThis must be specified if `due_time` is specified."
+          "description": "Optional date, in UTC, that submissions for this course work are due.\nThis must be specified if `due_time` is specified."
         },
         "dueTime": {
           "$ref": "TimeOfDay",
-          "description": "Optional time of day, in UTC, that submissions for this this course work\nare due.\nThis must be specified if `due_date` is specified."
+          "description": "Optional time of day, in UTC, that submissions for this course work\nare due.\nThis must be specified if `due_date` is specified."
         },
         "id": {
           "description": "Classroom-assigned identifier of this course work, unique per course.\n\nRead-only.",
@@ -2392,8 +2392,8 @@
           ],
           "enumDescriptions": [
             "No modification mode specified. This is never returned.",
-            "Submisisons can be modified before being turned in.",
-            "Submisisons can be modified at any time."
+            "Submissions can be modified before being turned in.",
+            "Submissions can be modified at any time."
           ],
           "type": "string"
         },
diff --git a/classroom/v1/classroom-gen.go b/classroom/v1/classroom-gen.go
index 5514d8b..536c6be 100644
--- a/classroom/v1/classroom-gen.go
+++ b/classroom/v1/classroom-gen.go
@@ -989,12 +989,12 @@
 	// than 30,000 characters.
 	Description string `json:"description,omitempty"`
 
-	// DueDate: Optional date, in UTC, that submissions for this this course
-	// work are due.
+	// DueDate: Optional date, in UTC, that submissions for this course work
+	// are due.
 	// This must be specified if `due_time` is specified.
 	DueDate *Date `json:"dueDate,omitempty"`
 
-	// DueTime: Optional time of day, in UTC, that submissions for this this
+	// DueTime: Optional time of day, in UTC, that submissions for this
 	// course work
 	// are due.
 	// This must be specified if `due_date` is specified.
@@ -1066,9 +1066,9 @@
 	// Possible values:
 	//   "SUBMISSION_MODIFICATION_MODE_UNSPECIFIED" - No modification mode
 	// specified. This is never returned.
-	//   "MODIFIABLE_UNTIL_TURNED_IN" - Submisisons can be modified before
+	//   "MODIFIABLE_UNTIL_TURNED_IN" - Submissions can be modified before
 	// being turned in.
-	//   "MODIFIABLE" - Submisisons can be modified at any time.
+	//   "MODIFIABLE" - Submissions can be modified at any time.
 	SubmissionModificationMode string `json:"submissionModificationMode,omitempty"`
 
 	// Title: Title of this course work.
@@ -7716,7 +7716,7 @@
 //
 // Reclaiming a student submission transfers ownership of attached
 // Drive
-// files to the student and update the submission state.
+// files to the student and updates the submission state.
 //
 // Only the student that owns the requested student submission may call
 // this
@@ -7843,7 +7843,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Reclaims a student submission on behalf of the student that owns it.\n\nReclaiming a student submission transfers ownership of attached Drive\nfiles to the student and update the submission state.\n\nOnly the student that owns the requested student submission may call this\nmethod, and only for a student submission that has been turned in.\n\nThis request must be made by the Developer Console project of the\n[OAuth client ID](https://support.google.com/cloud/answer/6158849) used to\ncreate the corresponding course work item.\n\nThis method returns the following error codes:\n\n* `PERMISSION_DENIED` if the requesting user is not permitted to access the\nrequested course or course work, unsubmit the requested student submission,\nor for access errors.\n* `FAILED_PRECONDITION` if the student submission has not been turned in.\n* `INVALID_ARGUMENT` if the request is malformed.\n* `NOT_FOUND` if the requested course, course work, or student submission\ndoes not exist.",
+	//   "description": "Reclaims a student submission on behalf of the student that owns it.\n\nReclaiming a student submission transfers ownership of attached Drive\nfiles to the student and updates the submission state.\n\nOnly the student that owns the requested student submission may call this\nmethod, and only for a student submission that has been turned in.\n\nThis request must be made by the Developer Console project of the\n[OAuth client ID](https://support.google.com/cloud/answer/6158849) used to\ncreate the corresponding course work item.\n\nThis method returns the following error codes:\n\n* `PERMISSION_DENIED` if the requesting user is not permitted to access the\nrequested course or course work, unsubmit the requested student submission,\nor for access errors.\n* `FAILED_PRECONDITION` if the student submission has not been turned in.\n* `INVALID_ARGUMENT` if the request is malformed.\n* `NOT_FOUND` if the requested course, course work, or student submission\ndoes not exist.",
 	//   "flatPath": "v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{id}:reclaim",
 	//   "httpMethod": "POST",
 	//   "id": "classroom.courses.courseWork.studentSubmissions.reclaim",
diff --git a/cloudasset/v1beta1/cloudasset-api.json b/cloudasset/v1beta1/cloudasset-api.json
index ff9f145..b33a160 100644
--- a/cloudasset/v1beta1/cloudasset-api.json
+++ b/cloudasset/v1beta1/cloudasset-api.json
@@ -139,13 +139,13 @@
               "type": "string"
             },
             "readTimeWindow.endTime": {
-              "description": "End time of the time window (exclusive).\nCurrent timestamp if not specified.",
+              "description": "End time of the time window (inclusive).\nCurrent timestamp if not specified.",
               "format": "google-datetime",
               "location": "query",
               "type": "string"
             },
             "readTimeWindow.startTime": {
-              "description": "Start time of the time window (inclusive).",
+              "description": "Start time of the time window (exclusive).",
               "format": "google-datetime",
               "location": "query",
               "type": "string"
@@ -255,13 +255,13 @@
               "type": "string"
             },
             "readTimeWindow.endTime": {
-              "description": "End time of the time window (exclusive).\nCurrent timestamp if not specified.",
+              "description": "End time of the time window (inclusive).\nCurrent timestamp if not specified.",
               "format": "google-datetime",
               "location": "query",
               "type": "string"
             },
             "readTimeWindow.startTime": {
-              "description": "Start time of the time window (inclusive).",
+              "description": "Start time of the time window (exclusive).",
               "format": "google-datetime",
               "location": "query",
               "type": "string"
@@ -337,7 +337,7 @@
       }
     }
   },
-  "revision": "20181008",
+  "revision": "20181112",
   "rootUrl": "https://cloudasset.googleapis.com/",
   "schemas": {
     "Asset": {
@@ -452,7 +452,7 @@
       "id": "ExportAssetsRequest",
       "properties": {
         "assetTypes": {
-          "description": "A list of asset types of which to take a snapshot for. For example:\n\"google.compute.disk\". If specified, only matching assets will be returned.",
+          "description": "A list of asset types of which to take a snapshot for. For example:\n\"google.compute.disk\". If specified, only matching assets will be returned.\nSee [Introduction to Cloud Asset\nInventory](https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/overview)\nfor all supported asset types.",
           "items": {
             "type": "string"
           },
@@ -512,7 +512,7 @@
       "id": "GcsDestination",
       "properties": {
         "uri": {
-          "description": "The path of the Cloud Storage objects. It's the same path that is used by\n gsutil. For example: \"gs://bucket_name/object_path\". See [Viewing and Editing Object Metadata](https://cloud.google.com/storage/docs/viewing-editing-metadata)\nfor more information.",
+          "description": "The uri of the Cloud Storage object. It's the same uri that is used by\ngsutil. For example: \"gs://bucket_name/object_name\". See [Viewing and\nEditing Object\nMetadata](https://cloud.google.com/storage/docs/viewing-editing-metadata)\nfor more information.",
           "type": "string"
         }
       },
@@ -677,16 +677,16 @@
       "type": "object"
     },
     "TimeWindow": {
-      "description": "A time window of [start_time, end_time).",
+      "description": "A time window of (start_time, end_time].",
       "id": "TimeWindow",
       "properties": {
         "endTime": {
-          "description": "End time of the time window (exclusive).\nCurrent timestamp if not specified.",
+          "description": "End time of the time window (inclusive).\nCurrent timestamp if not specified.",
           "format": "google-datetime",
           "type": "string"
         },
         "startTime": {
-          "description": "Start time of the time window (inclusive).",
+          "description": "Start time of the time window (exclusive).",
           "format": "google-datetime",
           "type": "string"
         }
diff --git a/cloudasset/v1beta1/cloudasset-gen.go b/cloudasset/v1beta1/cloudasset-gen.go
index 29f13fd..c02fa3d 100644
--- a/cloudasset/v1beta1/cloudasset-gen.go
+++ b/cloudasset/v1beta1/cloudasset-gen.go
@@ -447,6 +447,11 @@
 	// For example:
 	// "google.compute.disk". If specified, only matching assets will be
 	// returned.
+	// See [Introduction to Cloud
+	// Asset
+	// Inventory](https://cloud.google.com/resource-manager/docs/cloud-
+	// asset-inventory/overview)
+	// for all supported asset types.
 	AssetTypes []string `json:"assetTypes,omitempty"`
 
 	// ContentType: Asset content type. If not specified, no content but the
@@ -1031,13 +1036,13 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
-// TimeWindow: A time window of [start_time, end_time).
+// TimeWindow: A time window of (start_time, end_time].
 type TimeWindow struct {
-	// EndTime: End time of the time window (exclusive).
+	// EndTime: End time of the time window (inclusive).
 	// Current timestamp if not specified.
 	EndTime string `json:"endTime,omitempty"`
 
-	// StartTime: Start time of the time window (inclusive).
+	// StartTime: Start time of the time window (exclusive).
 	StartTime string `json:"startTime,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "EndTime") to
@@ -1121,7 +1126,7 @@
 
 // ReadTimeWindowEndTime sets the optional parameter
 // "readTimeWindow.endTime": End time of the time window
-// (exclusive).
+// (inclusive).
 // Current timestamp if not specified.
 func (c *OrganizationsBatchGetAssetsHistoryCall) ReadTimeWindowEndTime(readTimeWindowEndTime string) *OrganizationsBatchGetAssetsHistoryCall {
 	c.urlParams_.Set("readTimeWindow.endTime", readTimeWindowEndTime)
@@ -1130,7 +1135,7 @@
 
 // ReadTimeWindowStartTime sets the optional parameter
 // "readTimeWindow.startTime": Start time of the time window
-// (inclusive).
+// (exclusive).
 func (c *OrganizationsBatchGetAssetsHistoryCall) ReadTimeWindowStartTime(readTimeWindowStartTime string) *OrganizationsBatchGetAssetsHistoryCall {
 	c.urlParams_.Set("readTimeWindow.startTime", readTimeWindowStartTime)
 	return c
@@ -1266,13 +1271,13 @@
 	//       "type": "string"
 	//     },
 	//     "readTimeWindow.endTime": {
-	//       "description": "End time of the time window (exclusive).\nCurrent timestamp if not specified.",
+	//       "description": "End time of the time window (inclusive).\nCurrent timestamp if not specified.",
 	//       "format": "google-datetime",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
 	//     "readTimeWindow.startTime": {
-	//       "description": "Start time of the time window (inclusive).",
+	//       "description": "Start time of the time window (exclusive).",
 	//       "format": "google-datetime",
 	//       "location": "query",
 	//       "type": "string"
@@ -1638,7 +1643,7 @@
 
 // ReadTimeWindowEndTime sets the optional parameter
 // "readTimeWindow.endTime": End time of the time window
-// (exclusive).
+// (inclusive).
 // Current timestamp if not specified.
 func (c *ProjectsBatchGetAssetsHistoryCall) ReadTimeWindowEndTime(readTimeWindowEndTime string) *ProjectsBatchGetAssetsHistoryCall {
 	c.urlParams_.Set("readTimeWindow.endTime", readTimeWindowEndTime)
@@ -1647,7 +1652,7 @@
 
 // ReadTimeWindowStartTime sets the optional parameter
 // "readTimeWindow.startTime": Start time of the time window
-// (inclusive).
+// (exclusive).
 func (c *ProjectsBatchGetAssetsHistoryCall) ReadTimeWindowStartTime(readTimeWindowStartTime string) *ProjectsBatchGetAssetsHistoryCall {
 	c.urlParams_.Set("readTimeWindow.startTime", readTimeWindowStartTime)
 	return c
@@ -1783,13 +1788,13 @@
 	//       "type": "string"
 	//     },
 	//     "readTimeWindow.endTime": {
-	//       "description": "End time of the time window (exclusive).\nCurrent timestamp if not specified.",
+	//       "description": "End time of the time window (inclusive).\nCurrent timestamp if not specified.",
 	//       "format": "google-datetime",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
 	//     "readTimeWindow.startTime": {
-	//       "description": "Start time of the time window (inclusive).",
+	//       "description": "Start time of the time window (exclusive).",
 	//       "format": "google-datetime",
 	//       "location": "query",
 	//       "type": "string"
diff --git a/clouddebugger/v2/clouddebugger-api.json b/clouddebugger/v2/clouddebugger-api.json
index e41150a..8d86079 100644
--- a/clouddebugger/v2/clouddebugger-api.json
+++ b/clouddebugger/v2/clouddebugger-api.json
@@ -422,7 +422,7 @@
       }
     }
   },
-  "revision": "20180712",
+  "revision": "20181114",
   "rootUrl": "https://clouddebugger.googleapis.com/",
   "schemas": {
     "AliasContext": {
@@ -665,7 +665,7 @@
           "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."
         },
         "uniquifier": {
-          "description": "Uniquifier to further distiguish the application.\nIt is possible that different applications might have identical values in\nthe debuggee message, thus, incorrectly identified as a single application\nby the Controller service. This field adds salt to further distiguish the\napplication. Agents should consider seeding this field with value that\nidentifies the code, binary, configuration and environment.",
+          "description": "Uniquifier to further distinguish the application.\nIt is possible that different applications might have identical values in\nthe debuggee message, thus, incorrectly identified as a single application\nby the Controller service. This field adds salt to further distinguish the\napplication. Agents should consider seeding this field with value that\nidentifies the code, binary, configuration and environment.",
           "type": "string"
         }
       },
@@ -852,7 +852,7 @@
       "properties": {
         "debuggee": {
           "$ref": "Debuggee",
-          "description": "Debuggee resource.\nThe field `id` is guranteed to be set (in addition to the echoed fields).\nIf the field `is_disabled` is set to `true`, the agent should disable\nitself by removing all breakpoints and detaching from the application.\nIt should however continue to poll `RegisterDebuggee` until reenabled."
+          "description": "Debuggee resource.\nThe field `id` is guaranteed to be set (in addition to the echoed fields).\nIf the field `is_disabled` is set to `true`, the agent should disable\nitself by removing all breakpoints and detaching from the application.\nIt should however continue to poll `RegisterDebuggee` until reenabled."
         }
       },
       "type": "object"
diff --git a/clouddebugger/v2/clouddebugger-gen.go b/clouddebugger/v2/clouddebugger-gen.go
index 6770bd8..73345bd 100644
--- a/clouddebugger/v2/clouddebugger-gen.go
+++ b/clouddebugger/v2/clouddebugger-gen.go
@@ -539,13 +539,13 @@
 	// informational or an error status.
 	Status *StatusMessage `json:"status,omitempty"`
 
-	// Uniquifier: Uniquifier to further distiguish the application.
+	// Uniquifier: Uniquifier to further distinguish the application.
 	// It is possible that different applications might have identical
 	// values in
 	// the debuggee message, thus, incorrectly identified as a single
 	// application
-	// by the Controller service. This field adds salt to further distiguish
-	// the
+	// by the Controller service. This field adds salt to further
+	// distinguish the
 	// application. Agents should consider seeding this field with value
 	// that
 	// identifies the code, binary, configuration and environment.
@@ -970,7 +970,7 @@
 // RegisterDebuggeeResponse: Response for registering a debuggee.
 type RegisterDebuggeeResponse struct {
 	// Debuggee: Debuggee resource.
-	// The field `id` is guranteed to be set (in addition to the echoed
+	// The field `id` is guaranteed to be set (in addition to the echoed
 	// fields).
 	// If the field `is_disabled` is set to `true`, the agent should
 	// disable
diff --git a/cloudfunctions/v1/cloudfunctions-api.json b/cloudfunctions/v1/cloudfunctions-api.json
index 095880c..71d9ea9 100644
--- a/cloudfunctions/v1/cloudfunctions-api.json
+++ b/cloudfunctions/v1/cloudfunctions-api.json
@@ -539,7 +539,7 @@
       }
     }
   },
-  "revision": "20181018",
+  "revision": "20181121",
   "rootUrl": "https://cloudfunctions.googleapis.com/",
   "schemas": {
     "AuditConfig": {
@@ -663,7 +663,7 @@
           "additionalProperties": {
             "type": "string"
           },
-          "description": "**Beta Feature**\n\nEnvironment variables that shall be available during function execution.",
+          "description": "Environment variables that shall be available during function execution.",
           "type": "object"
         },
         "eventTrigger": {
@@ -1025,7 +1025,7 @@
           "type": "string"
         },
         "versionId": {
-          "description": "Version id of the function created or updated by an API call.\nThis field is only pupulated for Create and Update operations.",
+          "description": "Version id of the function created or updated by an API call.\nThis field is only populated for Create and Update operations.",
           "format": "int64",
           "type": "string"
         }
@@ -1070,7 +1070,7 @@
           "type": "string"
         },
         "versionId": {
-          "description": "Version id of the function created or updated by an API call.\nThis field is only pupulated for Create and Update operations.",
+          "description": "Version id of the function created or updated by an API call.\nThis field is only populated for Create and Update operations.",
           "format": "int64",
           "type": "string"
         }
diff --git a/cloudfunctions/v1/cloudfunctions-gen.go b/cloudfunctions/v1/cloudfunctions-gen.go
index 58be6a4..c02b0aa 100644
--- a/cloudfunctions/v1/cloudfunctions-gen.go
+++ b/cloudfunctions/v1/cloudfunctions-gen.go
@@ -459,10 +459,8 @@
 	// in `source_location`.
 	EntryPoint string `json:"entryPoint,omitempty"`
 
-	// EnvironmentVariables: **Beta Feature**
-	//
-	// Environment variables that shall be available during function
-	// execution.
+	// EnvironmentVariables: Environment variables that shall be available
+	// during function execution.
 	EnvironmentVariables map[string]string `json:"environmentVariables,omitempty"`
 
 	// EventTrigger: A source that fires events in response to a condition
@@ -1190,7 +1188,7 @@
 
 	// VersionId: Version id of the function created or updated by an API
 	// call.
-	// This field is only pupulated for Create and Update operations.
+	// This field is only populated for Create and Update operations.
 	VersionId int64 `json:"versionId,omitempty,string"`
 
 	// ForceSendFields is a list of field names (e.g. "Request") to
@@ -1240,7 +1238,7 @@
 
 	// VersionId: Version id of the function created or updated by an API
 	// call.
-	// This field is only pupulated for Create and Update operations.
+	// This field is only populated for Create and Update operations.
 	VersionId int64 `json:"versionId,omitempty,string"`
 
 	// ForceSendFields is a list of field names (e.g. "Request") to
diff --git a/cloudfunctions/v1beta2/cloudfunctions-api.json b/cloudfunctions/v1beta2/cloudfunctions-api.json
index bfd6e9f..64c3e54 100644
--- a/cloudfunctions/v1beta2/cloudfunctions-api.json
+++ b/cloudfunctions/v1beta2/cloudfunctions-api.json
@@ -452,7 +452,7 @@
       }
     }
   },
-  "revision": "20181018",
+  "revision": "20181121",
   "rootUrl": "https://cloudfunctions.googleapis.com/",
   "schemas": {
     "CallFunctionRequest": {
@@ -502,7 +502,7 @@
           "additionalProperties": {
             "type": "string"
           },
-          "description": "**Beta Feature**\n\nEnvironment variables that shall be available during function execution.",
+          "description": "Environment variables that shall be available during function execution.",
           "type": "object"
         },
         "eventTrigger": {
@@ -847,7 +847,7 @@
           "type": "string"
         },
         "versionId": {
-          "description": "Version id of the function created or updated by an API call.\nThis field is only pupulated for Create and Update operations.",
+          "description": "Version id of the function created or updated by an API call.\nThis field is only populated for Create and Update operations.",
           "format": "int64",
           "type": "string"
         }
@@ -892,7 +892,7 @@
           "type": "string"
         },
         "versionId": {
-          "description": "Version id of the function created or updated by an API call.\nThis field is only pupulated for Create and Update operations.",
+          "description": "Version id of the function created or updated by an API call.\nThis field is only populated for Create and Update operations.",
           "format": "int64",
           "type": "string"
         }
diff --git a/cloudfunctions/v1beta2/cloudfunctions-gen.go b/cloudfunctions/v1beta2/cloudfunctions-gen.go
index 2e94bc5..bafb042 100644
--- a/cloudfunctions/v1beta2/cloudfunctions-gen.go
+++ b/cloudfunctions/v1beta2/cloudfunctions-gen.go
@@ -228,10 +228,8 @@
 	// in `source_location`.
 	EntryPoint string `json:"entryPoint,omitempty"`
 
-	// EnvironmentVariables: **Beta Feature**
-	//
-	// Environment variables that shall be available during function
-	// execution.
+	// EnvironmentVariables: Environment variables that shall be available
+	// during function execution.
 	EnvironmentVariables map[string]string `json:"environmentVariables,omitempty"`
 
 	// EventTrigger: A source that fires events in response to a condition
@@ -908,7 +906,7 @@
 
 	// VersionId: Version id of the function created or updated by an API
 	// call.
-	// This field is only pupulated for Create and Update operations.
+	// This field is only populated for Create and Update operations.
 	VersionId int64 `json:"versionId,omitempty,string"`
 
 	// ForceSendFields is a list of field names (e.g. "Request") to
@@ -958,7 +956,7 @@
 
 	// VersionId: Version id of the function created or updated by an API
 	// call.
-	// This field is only pupulated for Create and Update operations.
+	// This field is only populated for Create and Update operations.
 	VersionId int64 `json:"versionId,omitempty,string"`
 
 	// ForceSendFields is a list of field names (e.g. "Request") to
diff --git a/cloudiot/v1/cloudiot-api.json b/cloudiot/v1/cloudiot-api.json
index c8ff97c..0399858 100644
--- a/cloudiot/v1/cloudiot-api.json
+++ b/cloudiot/v1/cloudiot-api.json
@@ -113,6 +113,35 @@
           "resources": {
             "registries": {
               "methods": {
+                "bindDeviceToGateway": {
+                  "description": "Associates the device with the gateway.",
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}:bindDeviceToGateway",
+                  "httpMethod": "POST",
+                  "id": "cloudiot.projects.locations.registries.bindDeviceToGateway",
+                  "parameterOrder": [
+                    "parent"
+                  ],
+                  "parameters": {
+                    "parent": {
+                      "description": "The name of the registry. For example,\n`projects/example-project/locations/us-central1/registries/my-registry`.",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/{+parent}:bindDeviceToGateway",
+                  "request": {
+                    "$ref": "BindDeviceToGatewayRequest"
+                  },
+                  "response": {
+                    "$ref": "BindDeviceToGatewayResponse"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/cloudiot"
+                  ]
+                },
                 "create": {
                   "description": "Creates a device registry that contains devices.",
                   "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries",
@@ -352,6 +381,35 @@
                     "https://www.googleapis.com/auth/cloud-platform",
                     "https://www.googleapis.com/auth/cloudiot"
                   ]
+                },
+                "unbindDeviceFromGateway": {
+                  "description": "Deletes the association between the device and the gateway.",
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}:unbindDeviceFromGateway",
+                  "httpMethod": "POST",
+                  "id": "cloudiot.projects.locations.registries.unbindDeviceFromGateway",
+                  "parameterOrder": [
+                    "parent"
+                  ],
+                  "parameters": {
+                    "parent": {
+                      "description": "The name of the registry. For example,\n`projects/example-project/locations/us-central1/registries/my-registry`.",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/{+parent}:unbindDeviceFromGateway",
+                  "request": {
+                    "$ref": "UnbindDeviceFromGatewayRequest"
+                  },
+                  "response": {
+                    "$ref": "UnbindDeviceFromGatewayResponse"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/cloudiot"
+                  ]
                 }
               },
               "resources": {
@@ -472,6 +530,26 @@
                           "location": "query",
                           "type": "string"
                         },
+                        "gatewayListOptions.associationsDeviceId": {
+                          "description": "If set, returns only the gateways with which the specified device is\nassociated. The device ID can be numeric (`num_id`) or the user-defined\nstring (`id`). For example, if `456` is specified, returns only the\ngateways to which the device with `num_id` 456 is bound.",
+                          "location": "query",
+                          "type": "string"
+                        },
+                        "gatewayListOptions.associationsGatewayId": {
+                          "description": "If set, only devices associated with the specified gateway are returned.\nThe gateway ID can be numeric (`num_id`) or the user-defined string\n(`id`). For example, if `123` is specified, only devices bound to the\ngateway with `num_id` 123 are returned.",
+                          "location": "query",
+                          "type": "string"
+                        },
+                        "gatewayListOptions.gatewayType": {
+                          "description": "If `GATEWAY` is specified, only gateways are returned. If `NON_GATEWAY`\nis specified, only non-gateway devices are returned. If\n`GATEWAY_TYPE_UNSPECIFIED` is specified, all devices are returned.",
+                          "enum": [
+                            "GATEWAY_TYPE_UNSPECIFIED",
+                            "GATEWAY",
+                            "NON_GATEWAY"
+                          ],
+                          "location": "query",
+                          "type": "string"
+                        },
                         "pageSize": {
                           "description": "The maximum number of devices to return in the response. If this value\nis zero, the service will select a default size. A call may return fewer\nobjects than requested. A non-empty `next_page_token` in the response\nindicates that more data is available.",
                           "format": "int32",
@@ -671,6 +749,35 @@
                 },
                 "groups": {
                   "methods": {
+                    "bindDeviceToGateway": {
+                      "description": "Associates the device with the gateway.",
+                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/groups/{groupsId}:bindDeviceToGateway",
+                      "httpMethod": "POST",
+                      "id": "cloudiot.projects.locations.registries.groups.bindDeviceToGateway",
+                      "parameterOrder": [
+                        "parent"
+                      ],
+                      "parameters": {
+                        "parent": {
+                          "description": "The name of the registry. For example,\n`projects/example-project/locations/us-central1/registries/my-registry`.",
+                          "location": "path",
+                          "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+/groups/[^/]+$",
+                          "required": true,
+                          "type": "string"
+                        }
+                      },
+                      "path": "v1/{+parent}:bindDeviceToGateway",
+                      "request": {
+                        "$ref": "BindDeviceToGatewayRequest"
+                      },
+                      "response": {
+                        "$ref": "BindDeviceToGatewayResponse"
+                      },
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/cloudiot"
+                      ]
+                    },
                     "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.",
                       "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/groups/{groupsId}:getIamPolicy",
@@ -757,6 +864,35 @@
                         "https://www.googleapis.com/auth/cloud-platform",
                         "https://www.googleapis.com/auth/cloudiot"
                       ]
+                    },
+                    "unbindDeviceFromGateway": {
+                      "description": "Deletes the association between the device and the gateway.",
+                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/groups/{groupsId}:unbindDeviceFromGateway",
+                      "httpMethod": "POST",
+                      "id": "cloudiot.projects.locations.registries.groups.unbindDeviceFromGateway",
+                      "parameterOrder": [
+                        "parent"
+                      ],
+                      "parameters": {
+                        "parent": {
+                          "description": "The name of the registry. For example,\n`projects/example-project/locations/us-central1/registries/my-registry`.",
+                          "location": "path",
+                          "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+/groups/[^/]+$",
+                          "required": true,
+                          "type": "string"
+                        }
+                      },
+                      "path": "v1/{+parent}:unbindDeviceFromGateway",
+                      "request": {
+                        "$ref": "UnbindDeviceFromGatewayRequest"
+                      },
+                      "response": {
+                        "$ref": "UnbindDeviceFromGatewayResponse"
+                      },
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/cloudiot"
+                      ]
                     }
                   },
                   "resources": {
@@ -822,6 +958,26 @@
                               "location": "query",
                               "type": "string"
                             },
+                            "gatewayListOptions.associationsDeviceId": {
+                              "description": "If set, returns only the gateways with which the specified device is\nassociated. The device ID can be numeric (`num_id`) or the user-defined\nstring (`id`). For example, if `456` is specified, returns only the\ngateways to which the device with `num_id` 456 is bound.",
+                              "location": "query",
+                              "type": "string"
+                            },
+                            "gatewayListOptions.associationsGatewayId": {
+                              "description": "If set, only devices associated with the specified gateway are returned.\nThe gateway ID can be numeric (`num_id`) or the user-defined string\n(`id`). For example, if `123` is specified, only devices bound to the\ngateway with `num_id` 123 are returned.",
+                              "location": "query",
+                              "type": "string"
+                            },
+                            "gatewayListOptions.gatewayType": {
+                              "description": "If `GATEWAY` is specified, only gateways are returned. If `NON_GATEWAY`\nis specified, only non-gateway devices are returned. If\n`GATEWAY_TYPE_UNSPECIFIED` is specified, all devices are returned.",
+                              "enum": [
+                                "GATEWAY_TYPE_UNSPECIFIED",
+                                "GATEWAY",
+                                "NON_GATEWAY"
+                              ],
+                              "location": "query",
+                              "type": "string"
+                            },
                             "pageSize": {
                               "description": "The maximum number of devices to return in the response. If this value\nis zero, the service will select a default size. A call may return fewer\nobjects than requested. A non-empty `next_page_token` in the response\nindicates that more data is available.",
                               "format": "int32",
@@ -1028,9 +1184,30 @@
       }
     }
   },
-  "revision": "20180926",
+  "revision": "20181120",
   "rootUrl": "https://cloudiot.googleapis.com/",
   "schemas": {
+    "BindDeviceToGatewayRequest": {
+      "description": "Request for `BindDeviceToGateway`.",
+      "id": "BindDeviceToGatewayRequest",
+      "properties": {
+        "deviceId": {
+          "description": "The device to associate with the specified gateway. The value of\n`device_id` can be either the device numeric ID or the user-defined device\nidentifier.",
+          "type": "string"
+        },
+        "gatewayId": {
+          "description": "The value of `gateway_id` can be either the device numeric ID or the\nuser-defined device identifier.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "BindDeviceToGatewayResponse": {
+      "description": "Response for `BindDeviceToGateway`.",
+      "id": "BindDeviceToGatewayResponse",
+      "properties": {},
+      "type": "object"
+    },
     "Binding": {
       "description": "Associates `members` with a `role`.",
       "id": "Binding",
@@ -1072,6 +1249,10 @@
           },
           "type": "array"
         },
+        "gatewayConfig": {
+          "$ref": "GatewayConfig",
+          "description": "Gateway-related configuration and state."
+        },
         "id": {
           "description": "The user-defined device identifier. The device ID must be unique\nwithin a device registry.",
           "type": "string"
@@ -1314,6 +1495,52 @@
       },
       "type": "object"
     },
+    "GatewayConfig": {
+      "description": "Gateway-related configuration and state.",
+      "id": "GatewayConfig",
+      "properties": {
+        "gatewayAuthMethod": {
+          "description": "Indicates how to authorize and/or authenticate devices to access the\ngateway.",
+          "enum": [
+            "GATEWAY_AUTH_METHOD_UNSPECIFIED",
+            "ASSOCIATION_ONLY",
+            "DEVICE_AUTH_TOKEN_ONLY",
+            "ASSOCIATION_AND_DEVICE_AUTH_TOKEN"
+          ],
+          "enumDescriptions": [
+            "No authentication/authorization method specified. No devices are allowed to\naccess the gateway.",
+            "The device is authenticated through the gateway association only. Device\ncredentials are ignored even if provided.",
+            "The device is authenticated through its own credentials. Gateway\nassociation is not checked.",
+            "The device is authenticated through both device credentials and gateway\nassociation. The device must be bound to the gateway and must provide its\nown credentials."
+          ],
+          "type": "string"
+        },
+        "gatewayType": {
+          "description": "Indicates whether the device is a gateway.",
+          "enum": [
+            "GATEWAY_TYPE_UNSPECIFIED",
+            "GATEWAY",
+            "NON_GATEWAY"
+          ],
+          "enumDescriptions": [
+            "If unspecified, the device is considered a non-gateway device.",
+            "The device is a gateway.",
+            "The device is not a gateway."
+          ],
+          "type": "string"
+        },
+        "lastAccessedGatewayId": {
+          "description": "[Output only] The ID of the gateway the device accessed most recently.",
+          "type": "string"
+        },
+        "lastAccessedGatewayTime": {
+          "description": "[Output only] The most recent time at which the device accessed the gateway\nspecified in `last_accessed_gateway`.",
+          "format": "google-datetime",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "GetIamPolicyRequest": {
       "description": "Request message for `GetIamPolicy` method.",
       "id": "GetIamPolicyRequest",
@@ -1633,6 +1860,27 @@
       },
       "type": "object"
     },
+    "UnbindDeviceFromGatewayRequest": {
+      "description": "Request for `UnbindDeviceFromGateway`.",
+      "id": "UnbindDeviceFromGatewayRequest",
+      "properties": {
+        "deviceId": {
+          "description": "The device to disassociate from the specified gateway. The value of\n`device_id` can be either the device numeric ID or the user-defined device\nidentifier.",
+          "type": "string"
+        },
+        "gatewayId": {
+          "description": "The value of `gateway_id` can be either the device numeric ID or the\nuser-defined device identifier.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "UnbindDeviceFromGatewayResponse": {
+      "description": "Response for `UnbindDeviceFromGateway`.",
+      "id": "UnbindDeviceFromGatewayResponse",
+      "properties": {},
+      "type": "object"
+    },
     "X509CertificateDetails": {
       "description": "Details of an X.509 certificate. For informational purposes only.",
       "id": "X509CertificateDetails",
diff --git a/cloudiot/v1/cloudiot-gen.go b/cloudiot/v1/cloudiot-gen.go
index 115fdc0..67a05d8 100644
--- a/cloudiot/v1/cloudiot-gen.go
+++ b/cloudiot/v1/cloudiot-gen.go
@@ -210,6 +210,50 @@
 	s *Service
 }
 
+// BindDeviceToGatewayRequest: Request for `BindDeviceToGateway`.
+type BindDeviceToGatewayRequest struct {
+	// DeviceId: The device to associate with the specified gateway. The
+	// value of
+	// `device_id` can be either the device numeric ID or the user-defined
+	// device
+	// identifier.
+	DeviceId string `json:"deviceId,omitempty"`
+
+	// GatewayId: The value of `gateway_id` can be either the device numeric
+	// ID or the
+	// user-defined device identifier.
+	GatewayId string `json:"gatewayId,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "DeviceId") 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. "DeviceId") 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 *BindDeviceToGatewayRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod BindDeviceToGatewayRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// BindDeviceToGatewayResponse: Response for `BindDeviceToGateway`.
+type BindDeviceToGatewayResponse struct {
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+}
+
 // Binding: Associates `members` with a `role`.
 type Binding struct {
 	// Condition: Unimplemented. The condition that is associated with this
@@ -316,6 +360,9 @@
 	// `DeviceRegistry.credentials` field.
 	Credentials []*DeviceCredential `json:"credentials,omitempty"`
 
+	// GatewayConfig: Gateway-related configuration and state.
+	GatewayConfig *GatewayConfig `json:"gatewayConfig,omitempty"`
+
 	// Id: The user-defined device identifier. The device ID must be
 	// unique
 	// within a device registry.
@@ -844,6 +891,71 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// GatewayConfig: Gateway-related configuration and state.
+type GatewayConfig struct {
+	// GatewayAuthMethod: Indicates how to authorize and/or authenticate
+	// devices to access the
+	// gateway.
+	//
+	// Possible values:
+	//   "GATEWAY_AUTH_METHOD_UNSPECIFIED" - No authentication/authorization
+	// method specified. No devices are allowed to
+	// access the gateway.
+	//   "ASSOCIATION_ONLY" - The device is authenticated through the
+	// gateway association only. Device
+	// credentials are ignored even if provided.
+	//   "DEVICE_AUTH_TOKEN_ONLY" - The device is authenticated through its
+	// own credentials. Gateway
+	// association is not checked.
+	//   "ASSOCIATION_AND_DEVICE_AUTH_TOKEN" - The device is authenticated
+	// through both device credentials and gateway
+	// association. The device must be bound to the gateway and must provide
+	// its
+	// own credentials.
+	GatewayAuthMethod string `json:"gatewayAuthMethod,omitempty"`
+
+	// GatewayType: Indicates whether the device is a gateway.
+	//
+	// Possible values:
+	//   "GATEWAY_TYPE_UNSPECIFIED" - If unspecified, the device is
+	// considered a non-gateway device.
+	//   "GATEWAY" - The device is a gateway.
+	//   "NON_GATEWAY" - The device is not a gateway.
+	GatewayType string `json:"gatewayType,omitempty"`
+
+	// LastAccessedGatewayId: [Output only] The ID of the gateway the device
+	// accessed most recently.
+	LastAccessedGatewayId string `json:"lastAccessedGatewayId,omitempty"`
+
+	// LastAccessedGatewayTime: [Output only] The most recent time at which
+	// the device accessed the gateway
+	// specified in `last_accessed_gateway`.
+	LastAccessedGatewayTime string `json:"lastAccessedGatewayTime,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "GatewayAuthMethod")
+	// 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. "GatewayAuthMethod") 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 *GatewayConfig) MarshalJSON() ([]byte, error) {
+	type NoMethod GatewayConfig
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // GetIamPolicyRequest: Request message for `GetIamPolicy` method.
 type GetIamPolicyRequest struct {
 }
@@ -1658,6 +1770,52 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// UnbindDeviceFromGatewayRequest: Request for
+// `UnbindDeviceFromGateway`.
+type UnbindDeviceFromGatewayRequest struct {
+	// DeviceId: The device to disassociate from the specified gateway. The
+	// value of
+	// `device_id` can be either the device numeric ID or the user-defined
+	// device
+	// identifier.
+	DeviceId string `json:"deviceId,omitempty"`
+
+	// GatewayId: The value of `gateway_id` can be either the device numeric
+	// ID or the
+	// user-defined device identifier.
+	GatewayId string `json:"gatewayId,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "DeviceId") 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. "DeviceId") 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 *UnbindDeviceFromGatewayRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod UnbindDeviceFromGatewayRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// UnbindDeviceFromGatewayResponse: Response for
+// `UnbindDeviceFromGateway`.
+type UnbindDeviceFromGatewayResponse struct {
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+}
+
 // X509CertificateDetails: Details of an X.509 certificate. For
 // informational purposes only.
 type X509CertificateDetails struct {
@@ -1702,6 +1860,146 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// method id "cloudiot.projects.locations.registries.bindDeviceToGateway":
+
+type ProjectsLocationsRegistriesBindDeviceToGatewayCall struct {
+	s                          *Service
+	parent                     string
+	binddevicetogatewayrequest *BindDeviceToGatewayRequest
+	urlParams_                 gensupport.URLParams
+	ctx_                       context.Context
+	header_                    http.Header
+}
+
+// BindDeviceToGateway: Associates the device with the gateway.
+func (r *ProjectsLocationsRegistriesService) BindDeviceToGateway(parent string, binddevicetogatewayrequest *BindDeviceToGatewayRequest) *ProjectsLocationsRegistriesBindDeviceToGatewayCall {
+	c := &ProjectsLocationsRegistriesBindDeviceToGatewayCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.parent = parent
+	c.binddevicetogatewayrequest = binddevicetogatewayrequest
+	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 *ProjectsLocationsRegistriesBindDeviceToGatewayCall) Fields(s ...googleapi.Field) *ProjectsLocationsRegistriesBindDeviceToGatewayCall {
+	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 *ProjectsLocationsRegistriesBindDeviceToGatewayCall) Context(ctx context.Context) *ProjectsLocationsRegistriesBindDeviceToGatewayCall {
+	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 *ProjectsLocationsRegistriesBindDeviceToGatewayCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsRegistriesBindDeviceToGatewayCall) 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.binddevicetogatewayrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}:bindDeviceToGateway")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "cloudiot.projects.locations.registries.bindDeviceToGateway" call.
+// Exactly one of *BindDeviceToGatewayResponse or error will be non-nil.
+// Any non-2xx status code is an error. Response headers are in either
+// *BindDeviceToGatewayResponse.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 *ProjectsLocationsRegistriesBindDeviceToGatewayCall) Do(opts ...googleapi.CallOption) (*BindDeviceToGatewayResponse, 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 := &BindDeviceToGatewayResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Associates the device with the gateway.",
+	//   "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}:bindDeviceToGateway",
+	//   "httpMethod": "POST",
+	//   "id": "cloudiot.projects.locations.registries.bindDeviceToGateway",
+	//   "parameterOrder": [
+	//     "parent"
+	//   ],
+	//   "parameters": {
+	//     "parent": {
+	//       "description": "The name of the registry. For example,\n`projects/example-project/locations/us-central1/registries/my-registry`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+parent}:bindDeviceToGateway",
+	//   "request": {
+	//     "$ref": "BindDeviceToGatewayRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "BindDeviceToGatewayResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloudiot"
+	//   ]
+	// }
+
+}
+
 // method id "cloudiot.projects.locations.registries.create":
 
 type ProjectsLocationsRegistriesCreateCall struct {
@@ -2902,6 +3200,147 @@
 
 }
 
+// method id "cloudiot.projects.locations.registries.unbindDeviceFromGateway":
+
+type ProjectsLocationsRegistriesUnbindDeviceFromGatewayCall struct {
+	s                              *Service
+	parent                         string
+	unbinddevicefromgatewayrequest *UnbindDeviceFromGatewayRequest
+	urlParams_                     gensupport.URLParams
+	ctx_                           context.Context
+	header_                        http.Header
+}
+
+// UnbindDeviceFromGateway: Deletes the association between the device
+// and the gateway.
+func (r *ProjectsLocationsRegistriesService) UnbindDeviceFromGateway(parent string, unbinddevicefromgatewayrequest *UnbindDeviceFromGatewayRequest) *ProjectsLocationsRegistriesUnbindDeviceFromGatewayCall {
+	c := &ProjectsLocationsRegistriesUnbindDeviceFromGatewayCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.parent = parent
+	c.unbinddevicefromgatewayrequest = unbinddevicefromgatewayrequest
+	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 *ProjectsLocationsRegistriesUnbindDeviceFromGatewayCall) Fields(s ...googleapi.Field) *ProjectsLocationsRegistriesUnbindDeviceFromGatewayCall {
+	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 *ProjectsLocationsRegistriesUnbindDeviceFromGatewayCall) Context(ctx context.Context) *ProjectsLocationsRegistriesUnbindDeviceFromGatewayCall {
+	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 *ProjectsLocationsRegistriesUnbindDeviceFromGatewayCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsRegistriesUnbindDeviceFromGatewayCall) 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.unbinddevicefromgatewayrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}:unbindDeviceFromGateway")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "cloudiot.projects.locations.registries.unbindDeviceFromGateway" call.
+// Exactly one of *UnbindDeviceFromGatewayResponse or error will be
+// non-nil. Any non-2xx status code is an error. Response headers are in
+// either *UnbindDeviceFromGatewayResponse.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 *ProjectsLocationsRegistriesUnbindDeviceFromGatewayCall) Do(opts ...googleapi.CallOption) (*UnbindDeviceFromGatewayResponse, 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 := &UnbindDeviceFromGatewayResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Deletes the association between the device and the gateway.",
+	//   "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}:unbindDeviceFromGateway",
+	//   "httpMethod": "POST",
+	//   "id": "cloudiot.projects.locations.registries.unbindDeviceFromGateway",
+	//   "parameterOrder": [
+	//     "parent"
+	//   ],
+	//   "parameters": {
+	//     "parent": {
+	//       "description": "The name of the registry. For example,\n`projects/example-project/locations/us-central1/registries/my-registry`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+parent}:unbindDeviceFromGateway",
+	//   "request": {
+	//     "$ref": "UnbindDeviceFromGatewayRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "UnbindDeviceFromGatewayResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloudiot"
+	//   ]
+	// }
+
+}
+
 // method id "cloudiot.projects.locations.registries.devices.create":
 
 type ProjectsLocationsRegistriesDevicesCreateCall struct {
@@ -3377,6 +3816,48 @@
 	return c
 }
 
+// GatewayListOptionsAssociationsDeviceId sets the optional parameter
+// "gatewayListOptions.associationsDeviceId": If set, returns only the
+// gateways with which the specified device is
+// associated. The device ID can be numeric (`num_id`) or the
+// user-defined
+// string (`id`). For example, if `456` is specified, returns only
+// the
+// gateways to which the device with `num_id` 456 is bound.
+func (c *ProjectsLocationsRegistriesDevicesListCall) GatewayListOptionsAssociationsDeviceId(gatewayListOptionsAssociationsDeviceId string) *ProjectsLocationsRegistriesDevicesListCall {
+	c.urlParams_.Set("gatewayListOptions.associationsDeviceId", gatewayListOptionsAssociationsDeviceId)
+	return c
+}
+
+// GatewayListOptionsAssociationsGatewayId sets the optional parameter
+// "gatewayListOptions.associationsGatewayId": If set, only devices
+// associated with the specified gateway are returned.
+// The gateway ID can be numeric (`num_id`) or the user-defined
+// string
+// (`id`). For example, if `123` is specified, only devices bound to
+// the
+// gateway with `num_id` 123 are returned.
+func (c *ProjectsLocationsRegistriesDevicesListCall) GatewayListOptionsAssociationsGatewayId(gatewayListOptionsAssociationsGatewayId string) *ProjectsLocationsRegistriesDevicesListCall {
+	c.urlParams_.Set("gatewayListOptions.associationsGatewayId", gatewayListOptionsAssociationsGatewayId)
+	return c
+}
+
+// GatewayListOptionsGatewayType sets the optional parameter
+// "gatewayListOptions.gatewayType": If `GATEWAY` is specified, only
+// gateways are returned. If `NON_GATEWAY`
+// is specified, only non-gateway devices are returned.
+// If
+// `GATEWAY_TYPE_UNSPECIFIED` is specified, all devices are returned.
+//
+// Possible values:
+//   "GATEWAY_TYPE_UNSPECIFIED"
+//   "GATEWAY"
+//   "NON_GATEWAY"
+func (c *ProjectsLocationsRegistriesDevicesListCall) GatewayListOptionsGatewayType(gatewayListOptionsGatewayType string) *ProjectsLocationsRegistriesDevicesListCall {
+	c.urlParams_.Set("gatewayListOptions.gatewayType", gatewayListOptionsGatewayType)
+	return c
+}
+
 // PageSize sets the optional parameter "pageSize": The maximum number
 // of devices to return in the response. If this value
 // is zero, the service will select a default size. A call may return
@@ -3523,6 +4004,26 @@
 	//       "location": "query",
 	//       "type": "string"
 	//     },
+	//     "gatewayListOptions.associationsDeviceId": {
+	//       "description": "If set, returns only the gateways with which the specified device is\nassociated. The device ID can be numeric (`num_id`) or the user-defined\nstring (`id`). For example, if `456` is specified, returns only the\ngateways to which the device with `num_id` 456 is bound.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "gatewayListOptions.associationsGatewayId": {
+	//       "description": "If set, only devices associated with the specified gateway are returned.\nThe gateway ID can be numeric (`num_id`) or the user-defined string\n(`id`). For example, if `123` is specified, only devices bound to the\ngateway with `num_id` 123 are returned.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "gatewayListOptions.gatewayType": {
+	//       "description": "If `GATEWAY` is specified, only gateways are returned. If `NON_GATEWAY`\nis specified, only non-gateway devices are returned. If\n`GATEWAY_TYPE_UNSPECIFIED` is specified, all devices are returned.",
+	//       "enum": [
+	//         "GATEWAY_TYPE_UNSPECIFIED",
+	//         "GATEWAY",
+	//         "NON_GATEWAY"
+	//       ],
+	//       "location": "query",
+	//       "type": "string"
+	//     },
 	//     "pageSize": {
 	//       "description": "The maximum number of devices to return in the response. If this value\nis zero, the service will select a default size. A call may return fewer\nobjects than requested. A non-empty `next_page_token` in the response\nindicates that more data is available.",
 	//       "format": "int32",
@@ -4360,6 +4861,146 @@
 
 }
 
+// method id "cloudiot.projects.locations.registries.groups.bindDeviceToGateway":
+
+type ProjectsLocationsRegistriesGroupsBindDeviceToGatewayCall struct {
+	s                          *Service
+	parent                     string
+	binddevicetogatewayrequest *BindDeviceToGatewayRequest
+	urlParams_                 gensupport.URLParams
+	ctx_                       context.Context
+	header_                    http.Header
+}
+
+// BindDeviceToGateway: Associates the device with the gateway.
+func (r *ProjectsLocationsRegistriesGroupsService) BindDeviceToGateway(parent string, binddevicetogatewayrequest *BindDeviceToGatewayRequest) *ProjectsLocationsRegistriesGroupsBindDeviceToGatewayCall {
+	c := &ProjectsLocationsRegistriesGroupsBindDeviceToGatewayCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.parent = parent
+	c.binddevicetogatewayrequest = binddevicetogatewayrequest
+	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 *ProjectsLocationsRegistriesGroupsBindDeviceToGatewayCall) Fields(s ...googleapi.Field) *ProjectsLocationsRegistriesGroupsBindDeviceToGatewayCall {
+	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 *ProjectsLocationsRegistriesGroupsBindDeviceToGatewayCall) Context(ctx context.Context) *ProjectsLocationsRegistriesGroupsBindDeviceToGatewayCall {
+	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 *ProjectsLocationsRegistriesGroupsBindDeviceToGatewayCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsRegistriesGroupsBindDeviceToGatewayCall) 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.binddevicetogatewayrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}:bindDeviceToGateway")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "cloudiot.projects.locations.registries.groups.bindDeviceToGateway" call.
+// Exactly one of *BindDeviceToGatewayResponse or error will be non-nil.
+// Any non-2xx status code is an error. Response headers are in either
+// *BindDeviceToGatewayResponse.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 *ProjectsLocationsRegistriesGroupsBindDeviceToGatewayCall) Do(opts ...googleapi.CallOption) (*BindDeviceToGatewayResponse, 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 := &BindDeviceToGatewayResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Associates the device with the gateway.",
+	//   "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/groups/{groupsId}:bindDeviceToGateway",
+	//   "httpMethod": "POST",
+	//   "id": "cloudiot.projects.locations.registries.groups.bindDeviceToGateway",
+	//   "parameterOrder": [
+	//     "parent"
+	//   ],
+	//   "parameters": {
+	//     "parent": {
+	//       "description": "The name of the registry. For example,\n`projects/example-project/locations/us-central1/registries/my-registry`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+/groups/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+parent}:bindDeviceToGateway",
+	//   "request": {
+	//     "$ref": "BindDeviceToGatewayRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "BindDeviceToGatewayResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloudiot"
+	//   ]
+	// }
+
+}
+
 // method id "cloudiot.projects.locations.registries.groups.getIamPolicy":
 
 type ProjectsLocationsRegistriesGroupsGetIamPolicyCall struct {
@@ -4789,6 +5430,147 @@
 
 }
 
+// method id "cloudiot.projects.locations.registries.groups.unbindDeviceFromGateway":
+
+type ProjectsLocationsRegistriesGroupsUnbindDeviceFromGatewayCall struct {
+	s                              *Service
+	parent                         string
+	unbinddevicefromgatewayrequest *UnbindDeviceFromGatewayRequest
+	urlParams_                     gensupport.URLParams
+	ctx_                           context.Context
+	header_                        http.Header
+}
+
+// UnbindDeviceFromGateway: Deletes the association between the device
+// and the gateway.
+func (r *ProjectsLocationsRegistriesGroupsService) UnbindDeviceFromGateway(parent string, unbinddevicefromgatewayrequest *UnbindDeviceFromGatewayRequest) *ProjectsLocationsRegistriesGroupsUnbindDeviceFromGatewayCall {
+	c := &ProjectsLocationsRegistriesGroupsUnbindDeviceFromGatewayCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.parent = parent
+	c.unbinddevicefromgatewayrequest = unbinddevicefromgatewayrequest
+	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 *ProjectsLocationsRegistriesGroupsUnbindDeviceFromGatewayCall) Fields(s ...googleapi.Field) *ProjectsLocationsRegistriesGroupsUnbindDeviceFromGatewayCall {
+	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 *ProjectsLocationsRegistriesGroupsUnbindDeviceFromGatewayCall) Context(ctx context.Context) *ProjectsLocationsRegistriesGroupsUnbindDeviceFromGatewayCall {
+	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 *ProjectsLocationsRegistriesGroupsUnbindDeviceFromGatewayCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsRegistriesGroupsUnbindDeviceFromGatewayCall) 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.unbinddevicefromgatewayrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}:unbindDeviceFromGateway")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "cloudiot.projects.locations.registries.groups.unbindDeviceFromGateway" call.
+// Exactly one of *UnbindDeviceFromGatewayResponse or error will be
+// non-nil. Any non-2xx status code is an error. Response headers are in
+// either *UnbindDeviceFromGatewayResponse.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 *ProjectsLocationsRegistriesGroupsUnbindDeviceFromGatewayCall) Do(opts ...googleapi.CallOption) (*UnbindDeviceFromGatewayResponse, 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 := &UnbindDeviceFromGatewayResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Deletes the association between the device and the gateway.",
+	//   "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/groups/{groupsId}:unbindDeviceFromGateway",
+	//   "httpMethod": "POST",
+	//   "id": "cloudiot.projects.locations.registries.groups.unbindDeviceFromGateway",
+	//   "parameterOrder": [
+	//     "parent"
+	//   ],
+	//   "parameters": {
+	//     "parent": {
+	//       "description": "The name of the registry. For example,\n`projects/example-project/locations/us-central1/registries/my-registry`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+/groups/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+parent}:unbindDeviceFromGateway",
+	//   "request": {
+	//     "$ref": "UnbindDeviceFromGatewayRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "UnbindDeviceFromGatewayResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloudiot"
+	//   ]
+	// }
+
+}
+
 // method id "cloudiot.projects.locations.registries.groups.devices.get":
 
 type ProjectsLocationsRegistriesGroupsDevicesGetCall struct {
@@ -4994,6 +5776,48 @@
 	return c
 }
 
+// GatewayListOptionsAssociationsDeviceId sets the optional parameter
+// "gatewayListOptions.associationsDeviceId": If set, returns only the
+// gateways with which the specified device is
+// associated. The device ID can be numeric (`num_id`) or the
+// user-defined
+// string (`id`). For example, if `456` is specified, returns only
+// the
+// gateways to which the device with `num_id` 456 is bound.
+func (c *ProjectsLocationsRegistriesGroupsDevicesListCall) GatewayListOptionsAssociationsDeviceId(gatewayListOptionsAssociationsDeviceId string) *ProjectsLocationsRegistriesGroupsDevicesListCall {
+	c.urlParams_.Set("gatewayListOptions.associationsDeviceId", gatewayListOptionsAssociationsDeviceId)
+	return c
+}
+
+// GatewayListOptionsAssociationsGatewayId sets the optional parameter
+// "gatewayListOptions.associationsGatewayId": If set, only devices
+// associated with the specified gateway are returned.
+// The gateway ID can be numeric (`num_id`) or the user-defined
+// string
+// (`id`). For example, if `123` is specified, only devices bound to
+// the
+// gateway with `num_id` 123 are returned.
+func (c *ProjectsLocationsRegistriesGroupsDevicesListCall) GatewayListOptionsAssociationsGatewayId(gatewayListOptionsAssociationsGatewayId string) *ProjectsLocationsRegistriesGroupsDevicesListCall {
+	c.urlParams_.Set("gatewayListOptions.associationsGatewayId", gatewayListOptionsAssociationsGatewayId)
+	return c
+}
+
+// GatewayListOptionsGatewayType sets the optional parameter
+// "gatewayListOptions.gatewayType": If `GATEWAY` is specified, only
+// gateways are returned. If `NON_GATEWAY`
+// is specified, only non-gateway devices are returned.
+// If
+// `GATEWAY_TYPE_UNSPECIFIED` is specified, all devices are returned.
+//
+// Possible values:
+//   "GATEWAY_TYPE_UNSPECIFIED"
+//   "GATEWAY"
+//   "NON_GATEWAY"
+func (c *ProjectsLocationsRegistriesGroupsDevicesListCall) GatewayListOptionsGatewayType(gatewayListOptionsGatewayType string) *ProjectsLocationsRegistriesGroupsDevicesListCall {
+	c.urlParams_.Set("gatewayListOptions.gatewayType", gatewayListOptionsGatewayType)
+	return c
+}
+
 // PageSize sets the optional parameter "pageSize": The maximum number
 // of devices to return in the response. If this value
 // is zero, the service will select a default size. A call may return
@@ -5140,6 +5964,26 @@
 	//       "location": "query",
 	//       "type": "string"
 	//     },
+	//     "gatewayListOptions.associationsDeviceId": {
+	//       "description": "If set, returns only the gateways with which the specified device is\nassociated. The device ID can be numeric (`num_id`) or the user-defined\nstring (`id`). For example, if `456` is specified, returns only the\ngateways to which the device with `num_id` 456 is bound.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "gatewayListOptions.associationsGatewayId": {
+	//       "description": "If set, only devices associated with the specified gateway are returned.\nThe gateway ID can be numeric (`num_id`) or the user-defined string\n(`id`). For example, if `123` is specified, only devices bound to the\ngateway with `num_id` 123 are returned.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "gatewayListOptions.gatewayType": {
+	//       "description": "If `GATEWAY` is specified, only gateways are returned. If `NON_GATEWAY`\nis specified, only non-gateway devices are returned. If\n`GATEWAY_TYPE_UNSPECIFIED` is specified, all devices are returned.",
+	//       "enum": [
+	//         "GATEWAY_TYPE_UNSPECIFIED",
+	//         "GATEWAY",
+	//         "NON_GATEWAY"
+	//       ],
+	//       "location": "query",
+	//       "type": "string"
+	//     },
 	//     "pageSize": {
 	//       "description": "The maximum number of devices to return in the response. If this value\nis zero, the service will select a default size. A call may return fewer\nobjects than requested. A non-empty `next_page_token` in the response\nindicates that more data is available.",
 	//       "format": "int32",
diff --git a/cloudkms/v1/cloudkms-api.json b/cloudkms/v1/cloudkms-api.json
index 33c2eec..a43fedd 100644
--- a/cloudkms/v1/cloudkms-api.json
+++ b/cloudkms/v1/cloudkms-api.json
@@ -943,7 +943,7 @@
       }
     }
   },
-  "revision": "20181005",
+  "revision": "20181113",
   "rootUrl": "https://cloudkms.googleapis.com/",
   "schemas": {
     "AsymmetricDecryptRequest": {
@@ -1419,7 +1419,7 @@
             "CAVIUM_V1_COMPRESSED"
           ],
           "enumDescriptions": [
-            "",
+            "Not specified.",
             "Cavium HSM attestation compressed with gzip. Note that this format is\ndefined by Cavium and subject to change at any time."
           ],
           "type": "string"
diff --git a/cloudkms/v1/cloudkms-gen.go b/cloudkms/v1/cloudkms-gen.go
index a313d06..5c09247 100644
--- a/cloudkms/v1/cloudkms-gen.go
+++ b/cloudkms/v1/cloudkms-gen.go
@@ -1113,7 +1113,7 @@
 	// Format: Output only. The format of the attestation data.
 	//
 	// Possible values:
-	//   "ATTESTATION_FORMAT_UNSPECIFIED"
+	//   "ATTESTATION_FORMAT_UNSPECIFIED" - Not specified.
 	//   "CAVIUM_V1_COMPRESSED" - Cavium HSM attestation compressed with
 	// gzip. Note that this format is
 	// defined by Cavium and subject to change at any time.
diff --git a/cloudscheduler/v1beta1/cloudscheduler-api.json b/cloudscheduler/v1beta1/cloudscheduler-api.json
new file mode 100644
index 0000000..d8a01b3
--- /dev/null
+++ b/cloudscheduler/v1beta1/cloudscheduler-api.json
@@ -0,0 +1,829 @@
+{
+  "auth": {
+    "oauth2": {
+      "scopes": {
+        "https://www.googleapis.com/auth/cloud-platform": {
+          "description": "View and manage your data across Google Cloud Platform services"
+        }
+      }
+    }
+  },
+  "basePath": "",
+  "baseUrl": "https://cloudscheduler.googleapis.com/",
+  "batchPath": "batch",
+  "canonicalName": "Cloud Scheduler",
+  "description": "Creates and manages jobs run on a regular recurring schedule.",
+  "discoveryVersion": "v1",
+  "documentationLink": "https://cloud.google.com/scheduler/",
+  "fullyEncodeReservedExpansion": true,
+  "icons": {
+    "x16": "http://www.google.com/images/icons/product/search-16.gif",
+    "x32": "http://www.google.com/images/icons/product/search-32.gif"
+  },
+  "id": "cloudscheduler:v1beta1",
+  "kind": "discovery#restDescription",
+  "name": "cloudscheduler",
+  "ownerDomain": "google.com",
+  "ownerName": "Google",
+  "parameters": {
+    "$.xgafv": {
+      "description": "V1 error format.",
+      "enum": [
+        "1",
+        "2"
+      ],
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
+      "location": "query",
+      "type": "string"
+    },
+    "access_token": {
+      "description": "OAuth access token.",
+      "location": "query",
+      "type": "string"
+    },
+    "alt": {
+      "default": "json",
+      "description": "Data format for response.",
+      "enum": [
+        "json",
+        "media",
+        "proto"
+      ],
+      "enumDescriptions": [
+        "Responses with Content-Type of application/json",
+        "Media download with context-dependent Content-Type",
+        "Responses with Content-Type of application/x-protobuf"
+      ],
+      "location": "query",
+      "type": "string"
+    },
+    "callback": {
+      "description": "JSONP",
+      "location": "query",
+      "type": "string"
+    },
+    "fields": {
+      "description": "Selector specifying which fields to include in a partial response.",
+      "location": "query",
+      "type": "string"
+    },
+    "key": {
+      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+      "location": "query",
+      "type": "string"
+    },
+    "oauth_token": {
+      "description": "OAuth 2.0 token for the current user.",
+      "location": "query",
+      "type": "string"
+    },
+    "prettyPrint": {
+      "default": "true",
+      "description": "Returns response with indentations and line breaks.",
+      "location": "query",
+      "type": "boolean"
+    },
+    "quotaUser": {
+      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+      "location": "query",
+      "type": "string"
+    },
+    "uploadType": {
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+      "location": "query",
+      "type": "string"
+    },
+    "upload_protocol": {
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "location": "query",
+      "type": "string"
+    }
+  },
+  "protocol": "rest",
+  "resources": {
+    "projects": {
+      "resources": {
+        "locations": {
+          "methods": {
+            "get": {
+              "description": "Gets information about a location.",
+              "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}",
+              "httpMethod": "GET",
+              "id": "cloudscheduler.projects.locations.get",
+              "parameterOrder": [
+                "name"
+              ],
+              "parameters": {
+                "name": {
+                  "description": "Resource name for the location.",
+                  "location": "path",
+                  "pattern": "^projects/[^/]+/locations/[^/]+$",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "path": "v1beta1/{+name}",
+              "response": {
+                "$ref": "Location"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ]
+            },
+            "list": {
+              "description": "Lists information about the supported locations for this service.",
+              "flatPath": "v1beta1/projects/{projectsId}/locations",
+              "httpMethod": "GET",
+              "id": "cloudscheduler.projects.locations.list",
+              "parameterOrder": [
+                "name"
+              ],
+              "parameters": {
+                "filter": {
+                  "description": "The standard list filter.",
+                  "location": "query",
+                  "type": "string"
+                },
+                "name": {
+                  "description": "The resource that owns the locations collection, if applicable.",
+                  "location": "path",
+                  "pattern": "^projects/[^/]+$",
+                  "required": true,
+                  "type": "string"
+                },
+                "pageSize": {
+                  "description": "The standard list page size.",
+                  "format": "int32",
+                  "location": "query",
+                  "type": "integer"
+                },
+                "pageToken": {
+                  "description": "The standard list page token.",
+                  "location": "query",
+                  "type": "string"
+                }
+              },
+              "path": "v1beta1/{+name}/locations",
+              "response": {
+                "$ref": "ListLocationsResponse"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ]
+            }
+          },
+          "resources": {
+            "jobs": {
+              "methods": {
+                "create": {
+                  "description": "Creates a job.",
+                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/jobs",
+                  "httpMethod": "POST",
+                  "id": "cloudscheduler.projects.locations.jobs.create",
+                  "parameterOrder": [
+                    "parent"
+                  ],
+                  "parameters": {
+                    "parent": {
+                      "description": "Required.\n\nThe location name. For example:\n`projects/PROJECT_ID/locations/LOCATION_ID`.",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1beta1/{+parent}/jobs",
+                  "request": {
+                    "$ref": "Job"
+                  },
+                  "response": {
+                    "$ref": "Job"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ]
+                },
+                "delete": {
+                  "description": "Deletes a job.",
+                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/jobs/{jobsId}",
+                  "httpMethod": "DELETE",
+                  "id": "cloudscheduler.projects.locations.jobs.delete",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "description": "Required.\n\nThe job name. For example:\n`projects/PROJECT_ID/locations/LOCATION_ID/jobs/JOB_ID`.",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+/jobs/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1beta1/{+name}",
+                  "response": {
+                    "$ref": "Empty"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ]
+                },
+                "get": {
+                  "description": "Gets a job.",
+                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/jobs/{jobsId}",
+                  "httpMethod": "GET",
+                  "id": "cloudscheduler.projects.locations.jobs.get",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "description": "Required.\n\nThe job name. For example:\n`projects/PROJECT_ID/locations/LOCATION_ID/jobs/JOB_ID`.",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+/jobs/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1beta1/{+name}",
+                  "response": {
+                    "$ref": "Job"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ]
+                },
+                "list": {
+                  "description": "Lists jobs.",
+                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/jobs",
+                  "httpMethod": "GET",
+                  "id": "cloudscheduler.projects.locations.jobs.list",
+                  "parameterOrder": [
+                    "parent"
+                  ],
+                  "parameters": {
+                    "pageSize": {
+                      "description": "Requested page size.\n\nThe maximum page size is 500. If unspecified, the page size will\nbe the maximum. Fewer jobs than requested might be returned,\neven if more jobs exist; use next_page_token to determine if more\njobs exist.",
+                      "format": "int32",
+                      "location": "query",
+                      "type": "integer"
+                    },
+                    "pageToken": {
+                      "description": "A token identifying a page of results the server will return. To\nrequest the first page results, page_token must be empty. To\nrequest the next page of results, page_token must be the value of\nnext_page_token returned from\nthe previous call to ListJobs. It is an error to\nswitch the value of filter or\norder_by while iterating through pages.",
+                      "location": "query",
+                      "type": "string"
+                    },
+                    "parent": {
+                      "description": "Required.\n\nThe location name. For example:\n`projects/PROJECT_ID/locations/LOCATION_ID`.",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1beta1/{+parent}/jobs",
+                  "response": {
+                    "$ref": "ListJobsResponse"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ]
+                },
+                "patch": {
+                  "description": "Updates a job.\n\nIf successful, the updated Job is returned. If the job does\nnot exist, `NOT_FOUND` is returned.\n\nIf UpdateJob does not successfully return, it is possible for the\njob to be in an Job.State.UPDATE_FAILED state. A job in this state may\nnot be executed. If this happens, retry the UpdateJob request\nuntil a successful response is received.",
+                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/jobs/{jobsId}",
+                  "httpMethod": "PATCH",
+                  "id": "cloudscheduler.projects.locations.jobs.patch",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "description": "The job name. For example:\n`projects/PROJECT_ID/locations/LOCATION_ID/jobs/JOB_ID`.\n\n* `PROJECT_ID` can contain letters ([A-Za-z]), numbers ([0-9]),\n   hyphens (-), colons (:), or periods (.).\n   For more information, see\n   [Identifying projects](https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects)\n* `LOCATION_ID` is the canonical ID for the job's location.\n   The list of available locations can be obtained by calling\n   ListLocations.\n   For more information, see https://cloud.google.com/about/locations/.\n* `JOB_ID` can contain only letters ([A-Za-z]), numbers ([0-9]),\n   hyphens (-), or underscores (_). The maximum length is 500 characters.",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+/jobs/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    },
+                    "updateMask": {
+                      "description": "A  mask used to specify which fields of the job are being updated.",
+                      "format": "google-fieldmask",
+                      "location": "query",
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1beta1/{+name}",
+                  "request": {
+                    "$ref": "Job"
+                  },
+                  "response": {
+                    "$ref": "Job"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ]
+                },
+                "pause": {
+                  "description": "Pauses a job.\n\nIf a job is paused then the system will stop executing the job\nuntil it is re-enabled via ResumeJob. The\nstate of the job is stored in state; if paused it\nwill be set to Job.State.PAUSED. A job must be in Job.State.ENABLED\nto be paused.",
+                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/jobs/{jobsId}:pause",
+                  "httpMethod": "POST",
+                  "id": "cloudscheduler.projects.locations.jobs.pause",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "description": "Required.\n\nThe job name. For example:\n`projects/PROJECT_ID/locations/LOCATION_ID/jobs/JOB_ID`.",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+/jobs/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1beta1/{+name}:pause",
+                  "request": {
+                    "$ref": "PauseJobRequest"
+                  },
+                  "response": {
+                    "$ref": "Job"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ]
+                },
+                "resume": {
+                  "description": "Resume a job.\n\nThis method reenables a job after it has been Job.State.PAUSED. The\nstate of a job is stored in Job.state; after calling this method it\nwill be set to Job.State.ENABLED. A job must be in\nJob.State.PAUSED to be resumed.",
+                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/jobs/{jobsId}:resume",
+                  "httpMethod": "POST",
+                  "id": "cloudscheduler.projects.locations.jobs.resume",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "description": "Required.\n\nThe job name. For example:\n`projects/PROJECT_ID/locations/LOCATION_ID/jobs/JOB_ID`.",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+/jobs/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1beta1/{+name}:resume",
+                  "request": {
+                    "$ref": "ResumeJobRequest"
+                  },
+                  "response": {
+                    "$ref": "Job"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ]
+                },
+                "run": {
+                  "description": "Forces a job to run now.\n\nWhen this method is called, Cloud Scheduler will dispatch the job, even\nif the job is already running.",
+                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/jobs/{jobsId}:run",
+                  "httpMethod": "POST",
+                  "id": "cloudscheduler.projects.locations.jobs.run",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "description": "Required.\n\nThe job name. For example:\n`projects/PROJECT_ID/locations/LOCATION_ID/jobs/JOB_ID`.",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+/jobs/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1beta1/{+name}:run",
+                  "request": {
+                    "$ref": "RunJobRequest"
+                  },
+                  "response": {
+                    "$ref": "Job"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ]
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  },
+  "revision": "20181120",
+  "rootUrl": "https://cloudscheduler.googleapis.com/",
+  "schemas": {
+    "AppEngineHttpTarget": {
+      "description": "App Engine target. The job will be pushed to a job handler by means\nof an HTTP request via an http_method such\nas HTTP POST, HTTP GET, etc. The job is acknowledged by means of an\nHTTP response code in the range [200 - 299]. Error 503 is\nconsidered an App Engine system error instead of an application\nerror. Requests returning error 503 will be retried regardless of\nretry configuration and not counted against retry counts. Any other\nresponse code, or a failure to receive a response before the\ndeadline, constitutes a failed attempt.",
+      "id": "AppEngineHttpTarget",
+      "properties": {
+        "appEngineRouting": {
+          "$ref": "AppEngineRouting",
+          "description": "App Engine Routing setting for the job."
+        },
+        "body": {
+          "description": "Body.\n\nHTTP request body. A request body is allowed only if the HTTP method is\nPOST or PUT. It will result in invalid argument error to set a body on a\njob with an incompatible HttpMethod.",
+          "format": "byte",
+          "type": "string"
+        },
+        "headers": {
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "HTTP request headers.\n\nThis map contains the header field names and values. Headers can be set\nwhen the job is created.\n\nCloud Scheduler sets some headers to default values:\n\n* `User-Agent`: By default, this header is\n  `\"AppEngine-Google; (+http://code.google.com/appengine)\"`.\n  This header can be modified, but Cloud Scheduler will append\n  `\"AppEngine-Google; (+http://code.google.com/appengine)\"` to the\n  modified `User-Agent`.\n\nIf the job has an body, Cloud Scheduler sets the\nfollowing headers:\n\n* `Content-Type`: By default, the `Content-Type` header is set to\n  `\"application/octet-stream\"`. The default can be overridden by explictly\n  setting `Content-Type` to a particular media type when the job is\n  created.\n  For example, `Content-Type` can be set to `\"application/json\"`.\n* `Content-Length`: This is computed by Cloud Scheduler. This value is\n  output only. It cannot be changed.\n\nThe headers below are output only. They cannot be set or overridden:\n\n* `X-Google-*`: For Google internal use only.\n* `X-AppEngine-*`: For Google internal use only. See\n  [Reading request headers](https://cloud.google.com/appengine/docs/python/taskqueue/push/creating-handlers#reading_request_headers).\n\nIn addition, some App Engine headers, which contain\njob-specific information, are also be sent to the job handler; see\n[request headers](https://cloud.google.comappengine/docs/standard/python/config/cron#securing_urls_for_cron).",
+          "type": "object"
+        },
+        "httpMethod": {
+          "description": "The HTTP method to use for the request. PATCH and OPTIONS are not\npermitted.",
+          "enum": [
+            "HTTP_METHOD_UNSPECIFIED",
+            "POST",
+            "GET",
+            "HEAD",
+            "PUT",
+            "DELETE",
+            "PATCH",
+            "OPTIONS"
+          ],
+          "enumDescriptions": [
+            "HTTP method unspecified. Defaults to POST.",
+            "HTTP POST",
+            "HTTP GET",
+            "HTTP HEAD",
+            "HTTP PUT",
+            "HTTP DELETE",
+            "HTTP PATCH",
+            "HTTP OPTIONS"
+          ],
+          "type": "string"
+        },
+        "relativeUri": {
+          "description": "The relative URI.\n\nThe relative URL must begin with \"/\" and must be a valid HTTP relative URL.\nIt can contain a path, query string arguments, and `#` fragments.\nIf the relative URL is empty, then the root path \"/\" will be used.\nNo spaces are allowed, and the maximum length allowed is 2083 characters.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "AppEngineRouting": {
+      "description": "App Engine Routing.\n\nFor more information about services, versions, and instances see\n[An Overview of App Engine](https://cloud.google.com/appengine/docs/python/an-overview-of-app-engine),\n[Microservices Architecture on Google App Engine](https://cloud.google.com/appengine/docs/python/microservices-on-app-engine),\n[App Engine Standard request routing](https://cloud.google.com/appengine/docs/standard/python/how-requests-are-routed), and\n[App Engine Flex request routing](https://cloud.google.com/appengine/docs/flexible/python/how-requests-are-routed).",
+      "id": "AppEngineRouting",
+      "properties": {
+        "host": {
+          "description": "Output only. The host that the job is sent to.\n\nFor more information about how App Engine requests are routed, see\n[here](https://cloud.google.com/appengine/docs/standard/python/how-requests-are-routed).\n\nThe host is constructed as:\n\n\n* `host = [application_domain_name]`\u003c/br\u003e\n  `| [service] + '.' + [application_domain_name]`\u003c/br\u003e\n  `| [version] + '.' + [application_domain_name]`\u003c/br\u003e\n  `| [version_dot_service]+ '.' + [application_domain_name]`\u003c/br\u003e\n  `| [instance] + '.' + [application_domain_name]`\u003c/br\u003e\n  `| [instance_dot_service] + '.' + [application_domain_name]`\u003c/br\u003e\n  `| [instance_dot_version] + '.' + [application_domain_name]`\u003c/br\u003e\n  `| [instance_dot_version_dot_service] + '.' + [application_domain_name]`\n\n* `application_domain_name` = The domain name of the app, for\n  example \u003capp-id\u003e.appspot.com, which is associated with the\n  job's project ID.\n\n* `service =` service\n\n* `version =` version\n\n* `version_dot_service =`\n  version `+ '.' +`\n  service\n\n* `instance =` instance\n\n* `instance_dot_service =`\n  instance `+ '.' +`\n  service\n\n* `instance_dot_version =`\n  instance `+ '.' +`\n  version\n\n* `instance_dot_version_dot_service =`\n  instance `+ '.' +`\n  version `+ '.' +`\n  service\n\n\nIf service is empty, then the job will be sent\nto the service which is the default service when the job is attempted.\n\nIf version is empty, then the job will be sent\nto the version which is the default version when the job is attempted.\n\nIf instance is empty, then the job will be\nsent to an instance which is available when the job is attempted.\n\nIf service,\nversion, or\ninstance is invalid, then the job will be sent\nto the default version of the default service when the job is attempted.",
+          "type": "string"
+        },
+        "instance": {
+          "description": "App instance.\n\nBy default, the job is sent to an instance which is available when\nthe job is attempted.\n\nRequests can only be sent to a specific instance if\n[manual scaling is used in App Engine Standard](https://cloud.google.com/appengine/docs/python/an-overview-of-app-engine?hl=en_US#scaling_types_and_instance_classes).\nApp Engine Flex does not support instances. For more information, see\n[App Engine Standard request routing](https://cloud.google.com/appengine/docs/standard/python/how-requests-are-routed) and\n[App Engine Flex request routing](https://cloud.google.com/appengine/docs/flexible/python/how-requests-are-routed).",
+          "type": "string"
+        },
+        "service": {
+          "description": "App service.\n\nBy default, the job is sent to the service which is the default\nservice when the job is attempted.",
+          "type": "string"
+        },
+        "version": {
+          "description": "App version.\n\nBy default, the job is sent to the version which is the default\nversion when the job is attempted.",
+          "type": "string"
+        }
+      },
+      "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 `{}`.",
+      "id": "Empty",
+      "properties": {},
+      "type": "object"
+    },
+    "HttpTarget": {
+      "description": "Http target. The job will be pushed to the job handler by means of\nan HTTP request via an http_method such as HTTP\nPOST, HTTP GET, etc. The job is acknowledged by means of an HTTP\nresponse code in the range [200 - 299]. A failure to receive a response\nconstitutes a failed execution. For a redirected request, the response\nreturned by the redirected request is considered.",
+      "id": "HttpTarget",
+      "properties": {
+        "body": {
+          "description": "HTTP request body. A request body is allowed only if the HTTP\nmethod is POST, PUT, or PATCH. It is an error to set body on a job with an\nincompatible HttpMethod.",
+          "format": "byte",
+          "type": "string"
+        },
+        "headers": {
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "The user can specify HTTP request headers to send with the job's\nHTTP request. This map contains the header field names and\nvalues. Repeated headers are not supported, but a header value can\ncontain commas. These headers represent a subset of the headers\nthat will accompany the job's HTTP request. Some HTTP request\nheaders will be ignored or replaced. A partial list of headers that\nwill be ignored or replaced is below:\n- Host: This will be computed by Cloud Scheduler and derived from\nuri.\n* `Content-Length`: This will be computed by Cloud Scheduler.\n* `User-Agent`: This will be set to `\"Google-Cloud-Scheduler\"`.\n* `X-Google-*`: Google internal use only.\n* `X-AppEngine-*`: Google internal use only.\n\nThe total size of headers must be less than 80KB.",
+          "type": "object"
+        },
+        "httpMethod": {
+          "description": "Which HTTP method to use for the request.",
+          "enum": [
+            "HTTP_METHOD_UNSPECIFIED",
+            "POST",
+            "GET",
+            "HEAD",
+            "PUT",
+            "DELETE",
+            "PATCH",
+            "OPTIONS"
+          ],
+          "enumDescriptions": [
+            "HTTP method unspecified. Defaults to POST.",
+            "HTTP POST",
+            "HTTP GET",
+            "HTTP HEAD",
+            "HTTP PUT",
+            "HTTP DELETE",
+            "HTTP PATCH",
+            "HTTP OPTIONS"
+          ],
+          "type": "string"
+        },
+        "uri": {
+          "description": "Required.\n\nThe full URI path that the request will be sent to. This string\nmust begin with either \"http://\" or \"https://\". Some examples of\nvalid values for uri are:\n`http://acme.com` and `https://acme.com/sales:8080`. Cloud Scheduler will\nencode some characters for safety and compatibility. The maximum allowed\nURL length is 2083 characters after encoding.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "Job": {
+      "description": "Configuration for a job.\nThe maximum allowed size for a job is 100KB.",
+      "id": "Job",
+      "properties": {
+        "appEngineHttpTarget": {
+          "$ref": "AppEngineHttpTarget",
+          "description": "App Engine HTTP target."
+        },
+        "description": {
+          "description": "A human-readable description for the job. This string must not contain\nmore than 500 characters.",
+          "type": "string"
+        },
+        "httpTarget": {
+          "$ref": "HttpTarget",
+          "description": "HTTP target."
+        },
+        "lastAttemptTime": {
+          "description": "Output only. The time the last job attempt started.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "name": {
+          "description": "The job name. For example:\n`projects/PROJECT_ID/locations/LOCATION_ID/jobs/JOB_ID`.\n\n* `PROJECT_ID` can contain letters ([A-Za-z]), numbers ([0-9]),\n   hyphens (-), colons (:), or periods (.).\n   For more information, see\n   [Identifying projects](https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects)\n* `LOCATION_ID` is the canonical ID for the job's location.\n   The list of available locations can be obtained by calling\n   ListLocations.\n   For more information, see https://cloud.google.com/about/locations/.\n* `JOB_ID` can contain only letters ([A-Za-z]), numbers ([0-9]),\n   hyphens (-), or underscores (_). The maximum length is 500 characters.",
+          "type": "string"
+        },
+        "pubsubTarget": {
+          "$ref": "PubsubTarget",
+          "description": "Pub/Sub target."
+        },
+        "retryConfig": {
+          "$ref": "RetryConfig",
+          "description": "Settings that determine the retry behavior."
+        },
+        "schedule": {
+          "description": "Required.\n\nDescribes the schedule on which the job will be executed.\n\nAs a general rule, execution `n + 1` of a job will not begin\nuntil execution `n` has finished. Cloud Scheduler will never\nallow two simultaneously outstanding executions. For example,\nthis implies that if the `n+1`th execution is scheduled to run at\n16:00 but the `n`th execution takes until 16:15, the `n+1`th\nexecution will not start until `16:15`.\nA scheduled start time will be delayed if the previous\nexecution has not ended when its scheduled time occurs.\n\nIf retry_count \u003e 0 and a job attempt fails,\nthe job will be tried a total of retry_count\ntimes, with exponential backoff, until the next scheduled start\ntime.\n\nThe schedule can be either of the following types:\n\n* [Crontab](http://en.wikipedia.org/wiki/Cron#Overview)\n* English-like [schedule](https://cloud.google.com/scheduler/docs/configuring/cron-job-schedules)",
+          "type": "string"
+        },
+        "scheduleTime": {
+          "description": "Output only. The next time the job is scheduled. Note that this may be a\nretry of a previously failed attempt or the next execution time\naccording to the schedule.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "state": {
+          "description": "Output only. State of the job.",
+          "enum": [
+            "STATE_UNSPECIFIED",
+            "ENABLED",
+            "PAUSED",
+            "DISABLED",
+            "UPDATE_FAILED"
+          ],
+          "enumDescriptions": [
+            "Unspecified state.",
+            "The job is executing normally.",
+            "The job is paused by the user. It will not execute. A user can\nintentionally pause the job using\nPauseJobRequest.",
+            "The job is disabled by the system due to error. The user\ncannot directly set a job to be disabled.",
+            "The job state resulting from a failed CloudScheduler.UpdateJob\noperation. To recover a job from this state, retry\nCloudScheduler.UpdateJob until a successful response is received."
+          ],
+          "type": "string"
+        },
+        "status": {
+          "$ref": "Status",
+          "description": "Output only. The response from the target for the last attempted execution."
+        },
+        "timeZone": {
+          "description": "Specifies the time zone to be used in interpreting\nschedule. The value of this field must be a time\nzone name from the [tz database](http://en.wikipedia.org/wiki/Tz_database).\n\nNote that some time zones include a provision for\ndaylight savings time. The rules for daylight saving time are\ndetermined by the chosen tz. For UTC use the string \"utc\". If a\ntime zone is not specified, the default will be in UTC (also known\nas GMT).",
+          "type": "string"
+        },
+        "userUpdateTime": {
+          "description": "Output only. The creation time of the job.",
+          "format": "google-datetime",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "ListJobsResponse": {
+      "description": "Response message for listing jobs using ListJobs.",
+      "id": "ListJobsResponse",
+      "properties": {
+        "jobs": {
+          "description": "The list of jobs.",
+          "items": {
+            "$ref": "Job"
+          },
+          "type": "array"
+        },
+        "nextPageToken": {
+          "description": "A token to retrieve next page of results. Pass this value in the\npage_token field in the subsequent call to\nListJobs to retrieve the next page of results.\nIf this is empty it indicates that there are no more results\nthrough which to paginate.\n\nThe page token is valid for only 2 hours.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "ListLocationsResponse": {
+      "description": "The response message for Locations.ListLocations.",
+      "id": "ListLocationsResponse",
+      "properties": {
+        "locations": {
+          "description": "A list of locations that matches the specified filter in the request.",
+          "items": {
+            "$ref": "Location"
+          },
+          "type": "array"
+        },
+        "nextPageToken": {
+          "description": "The standard List next-page token.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "Location": {
+      "description": "A resource that represents Google Cloud Platform location.",
+      "id": "Location",
+      "properties": {
+        "displayName": {
+          "description": "The friendly name for this location, typically a nearby city name.\nFor example, \"Tokyo\".",
+          "type": "string"
+        },
+        "labels": {
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "Cross-service attributes for the location. For example\n\n    {\"cloud.googleapis.com/region\": \"us-east1\"}",
+          "type": "object"
+        },
+        "locationId": {
+          "description": "The canonical id for this location. For example: `\"us-east1\"`.",
+          "type": "string"
+        },
+        "metadata": {
+          "additionalProperties": {
+            "description": "Properties of the object. Contains field @type with type URL.",
+            "type": "any"
+          },
+          "description": "Service-specific metadata. For example the available capacity at the given\nlocation.",
+          "type": "object"
+        },
+        "name": {
+          "description": "Resource name for the location, which may vary between implementations.\nFor example: `\"projects/example-project/locations/us-east1\"`",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "PauseJobRequest": {
+      "description": "Request message for PauseJob.",
+      "id": "PauseJobRequest",
+      "properties": {},
+      "type": "object"
+    },
+    "PubsubMessage": {
+      "description": "A message that is published by publishers and consumed by subscribers. The\nmessage must contain either a non-empty data field or at least one attribute.\nNote that client libraries represent this object differently\ndepending on the language. See the corresponding\n\u003ca href=\"https://cloud.google.com/pubsub/docs/reference/libraries\"\u003eclient\nlibrary documentation\u003c/a\u003e for more information. See\n\u003ca href=\"https://cloud.google.com/pubsub/quotas\"\u003eQuotas and limits\u003c/a\u003e\nfor more information about message limits.",
+      "id": "PubsubMessage",
+      "properties": {
+        "attributes": {
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "Optional attributes for this message.",
+          "type": "object"
+        },
+        "data": {
+          "description": "The message data field. If this field is empty, the message must contain\nat least one attribute.",
+          "format": "byte",
+          "type": "string"
+        },
+        "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"
+        }
+      },
+      "type": "object"
+    },
+    "PubsubTarget": {
+      "description": "Pub/Sub target. The job will be delivered by publishing a message to\nthe given Pub/Sub topic.",
+      "id": "PubsubTarget",
+      "properties": {
+        "attributes": {
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "Attributes for PubsubMessage.\n\nPubsub message must contain either non-empty data, or at least one\nattribute.",
+          "type": "object"
+        },
+        "data": {
+          "description": "The message payload for PubsubMessage.\n\nPubsub message must contain either non-empty data, or at least one\nattribute.",
+          "format": "byte",
+          "type": "string"
+        },
+        "topicName": {
+          "description": "Required.\n\nThe name of the Cloud Pub/Sub topic to which messages will\nbe published when a job is delivered. The topic name must be in the\nsame format as required by PubSub's\n[PublishRequest.name](https://cloud.google.com/pubsub/docs/reference/rpc/google.pubsub.v1#publishrequest),\nfor example `projects/PROJECT_ID/topics/TOPIC_ID`.\n\nThe topic must be in the same project as the Cloud Scheduler job.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "ResumeJobRequest": {
+      "description": "Request message for ResumeJob.",
+      "id": "ResumeJobRequest",
+      "properties": {},
+      "type": "object"
+    },
+    "RetryConfig": {
+      "description": "Settings that determine the retry behavior.\n\nBy default, if a job does not complete successfully (meaning that\nan acknowledgement is not received from the handler, then it will be retried\nwith exponential backoff according to the settings in RetryConfig.",
+      "id": "RetryConfig",
+      "properties": {
+        "maxBackoffDuration": {
+          "description": "The maximum amount of time to wait before retrying a job after\nit fails.\n\nThe default value of this field is 1 hour.",
+          "format": "google-duration",
+          "type": "string"
+        },
+        "maxDoublings": {
+          "description": "The time between retries will double `max_doublings` times.\n\nA job's retry interval starts at\nmin_backoff_duration, then doubles\n`max_doublings` times, then increases linearly, and finally\nretries retries at intervals of\nmax_backoff_duration up to\nretry_count times.\n\nFor example, if min_backoff_duration is\n10s, max_backoff_duration is 300s, and\n`max_doublings` is 3, then the a job will first be retried in 10s. The\nretry interval will double three times, and then increase linearly by\n2^3 * 10s.  Finally, the job will retry at intervals of\nmax_backoff_duration until the job has\nbeen attempted retry_count times. Thus, the\nrequests will retry at 10s, 20s, 40s, 80s, 160s, 240s, 300s, 300s, ....\n\nThe default value of this field is 5.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "maxRetryDuration": {
+          "description": "The time limit for retrying a failed job, measured from time when an\nexecution was first attempted. If specified with\nretry_count, the job will be retried until both limits are\nreached.\n\nThe default value for max_retry_duration is zero, which means retry\nduration is unlimited.",
+          "format": "google-duration",
+          "type": "string"
+        },
+        "minBackoffDuration": {
+          "description": "The minimum amount of time to wait before retrying a job after\nit fails.\n\nThe default value of this field is 5 seconds.",
+          "format": "google-duration",
+          "type": "string"
+        },
+        "retryCount": {
+          "description": "The number of attempts that the system will make to run a job using the\nexponential backoff procedure described by\nmax_doublings.\n\nThe default value of retry_count is zero.\n\nIf retry_count is zero, a job attempt will *not* be retried if\nit fails. Instead the Cloud Scheduler system will wait for the\nnext scheduled execution time.\n\nIf retry_count is set to a non-zero number then Cloud Scheduler\nwill retry failed attempts, using exponential backoff,\nretry_count times, or until the next scheduled execution time,\nwhichever comes first.\n\nValues greater than 5 and negative values are not allowed.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "type": "object"
+    },
+    "RunJobRequest": {
+      "description": "Request message for forcing a job to run now using\nRunJob.",
+      "id": "RunJobRequest",
+      "properties": {},
+      "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` that 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.\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",
+      "properties": {
+        "code": {
+          "description": "The status code, which should be an enum value of google.rpc.Code.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "details": {
+          "description": "A list of messages that carry the error details.  There is a common set of\nmessage types for APIs to use.",
+          "items": {
+            "additionalProperties": {
+              "description": "Properties of the object. Contains field @type with type URL.",
+              "type": "any"
+            },
+            "type": "object"
+          },
+          "type": "array"
+        },
+        "message": {
+          "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\ngoogle.rpc.Status.details field, or localized by the client.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    }
+  },
+  "servicePath": "",
+  "title": "Cloud Scheduler API",
+  "version": "v1beta1",
+  "version_module": true
+}
\ No newline at end of file
diff --git a/cloudscheduler/v1beta1/cloudscheduler-gen.go b/cloudscheduler/v1beta1/cloudscheduler-gen.go
new file mode 100644
index 0000000..06e9de1
--- /dev/null
+++ b/cloudscheduler/v1beta1/cloudscheduler-gen.go
@@ -0,0 +1,2679 @@
+// Copyright 2018 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// AUTO-GENERATED CODE. DO NOT EDIT.
+
+// Package cloudscheduler provides access to the Cloud Scheduler API.
+//
+// See https://cloud.google.com/scheduler/
+//
+// Usage example:
+//
+//   import "google.golang.org/api/cloudscheduler/v1beta1"
+//   ...
+//   cloudschedulerService, err := cloudscheduler.New(oauthHttpClient)
+package cloudscheduler // import "google.golang.org/api/cloudscheduler/v1beta1"
+
+import (
+	"bytes"
+	"context"
+	"encoding/json"
+	"errors"
+	"fmt"
+	"io"
+	"net/http"
+	"net/url"
+	"strconv"
+	"strings"
+
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
+)
+
+// 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
+
+const apiId = "cloudscheduler:v1beta1"
+const apiName = "cloudscheduler"
+const apiVersion = "v1beta1"
+const basePath = "https://cloudscheduler.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
+
+	Projects *ProjectsService
+}
+
+func (s *Service) userAgent() string {
+	if s.UserAgent == "" {
+		return googleapi.UserAgent
+	}
+	return googleapi.UserAgent + " " + s.UserAgent
+}
+
+func NewProjectsService(s *Service) *ProjectsService {
+	rs := &ProjectsService{s: s}
+	rs.Locations = NewProjectsLocationsService(s)
+	return rs
+}
+
+type ProjectsService struct {
+	s *Service
+
+	Locations *ProjectsLocationsService
+}
+
+func NewProjectsLocationsService(s *Service) *ProjectsLocationsService {
+	rs := &ProjectsLocationsService{s: s}
+	rs.Jobs = NewProjectsLocationsJobsService(s)
+	return rs
+}
+
+type ProjectsLocationsService struct {
+	s *Service
+
+	Jobs *ProjectsLocationsJobsService
+}
+
+func NewProjectsLocationsJobsService(s *Service) *ProjectsLocationsJobsService {
+	rs := &ProjectsLocationsJobsService{s: s}
+	return rs
+}
+
+type ProjectsLocationsJobsService struct {
+	s *Service
+}
+
+// AppEngineHttpTarget: App Engine target. The job will be pushed to a
+// job handler by means
+// of an HTTP request via an http_method such
+// as HTTP POST, HTTP GET, etc. The job is acknowledged by means of
+// an
+// HTTP response code in the range [200 - 299]. Error 503 is
+// considered an App Engine system error instead of an
+// application
+// error. Requests returning error 503 will be retried regardless
+// of
+// retry configuration and not counted against retry counts. Any
+// other
+// response code, or a failure to receive a response before
+// the
+// deadline, constitutes a failed attempt.
+type AppEngineHttpTarget struct {
+	// AppEngineRouting: App Engine Routing setting for the job.
+	AppEngineRouting *AppEngineRouting `json:"appEngineRouting,omitempty"`
+
+	// Body: Body.
+	//
+	// HTTP request body. A request body is allowed only if the HTTP method
+	// is
+	// POST or PUT. It will result in invalid argument error to set a body
+	// on a
+	// job with an incompatible HttpMethod.
+	Body string `json:"body,omitempty"`
+
+	// Headers: HTTP request headers.
+	//
+	// This map contains the header field names and values. Headers can be
+	// set
+	// when the job is created.
+	//
+	// Cloud Scheduler sets some headers to default values:
+	//
+	// * `User-Agent`: By default, this header is
+	//   "AppEngine-Google; (+http://code.google.com/appengine)".
+	//   This header can be modified, but Cloud Scheduler will append
+	//   "AppEngine-Google; (+http://code.google.com/appengine)" to the
+	//   modified `User-Agent`.
+	//
+	// If the job has an body, Cloud Scheduler sets the
+	// following headers:
+	//
+	// * `Content-Type`: By default, the `Content-Type` header is set to
+	//   "application/octet-stream". The default can be overridden by
+	// explictly
+	//   setting `Content-Type` to a particular media type when the job is
+	//   created.
+	//   For example, `Content-Type` can be set to "application/json".
+	// * `Content-Length`: This is computed by Cloud Scheduler. This value
+	// is
+	//   output only. It cannot be changed.
+	//
+	// The headers below are output only. They cannot be set or
+	// overridden:
+	//
+	// * `X-Google-*`: For Google internal use only.
+	// * `X-AppEngine-*`: For Google internal use only. See
+	//   [Reading request
+	// headers](https://cloud.google.com/appengine/docs/python/taskqueue/push
+	// /creating-handlers#reading_request_headers).
+	//
+	// In addition, some App Engine headers, which contain
+	// job-specific information, are also be sent to the job handler;
+	// see
+	// [request
+	// headers](https://cloud.google.comappengine/docs/standard/python/config
+	// /cron#securing_urls_for_cron).
+	Headers map[string]string `json:"headers,omitempty"`
+
+	// HttpMethod: The HTTP method to use for the request. PATCH and OPTIONS
+	// are not
+	// permitted.
+	//
+	// Possible values:
+	//   "HTTP_METHOD_UNSPECIFIED" - HTTP method unspecified. Defaults to
+	// POST.
+	//   "POST" - HTTP POST
+	//   "GET" - HTTP GET
+	//   "HEAD" - HTTP HEAD
+	//   "PUT" - HTTP PUT
+	//   "DELETE" - HTTP DELETE
+	//   "PATCH" - HTTP PATCH
+	//   "OPTIONS" - HTTP OPTIONS
+	HttpMethod string `json:"httpMethod,omitempty"`
+
+	// RelativeUri: The relative URI.
+	//
+	// The relative URL must begin with "/" and must be a valid HTTP
+	// relative URL.
+	// It can contain a path, query string arguments, and `#` fragments.
+	// If the relative URL is empty, then the root path "/" will be used.
+	// No spaces are allowed, and the maximum length allowed is 2083
+	// characters.
+	RelativeUri string `json:"relativeUri,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "AppEngineRouting") 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. "AppEngineRouting") 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 *AppEngineHttpTarget) MarshalJSON() ([]byte, error) {
+	type NoMethod AppEngineHttpTarget
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// AppEngineRouting: App Engine Routing.
+//
+// For more information about services, versions, and instances see
+// [An Overview of App
+// Engine](https://cloud.google.com/appengine/docs/python/an-overview-of-
+// app-engine),
+// [Microservices Architecture on Google App
+// Engine](https://cloud.google.com/appengine/docs/python/microservices-o
+// n-app-engine),
+// [App Engine Standard request
+// routing](https://cloud.google.com/appengine/docs/standard/python/how-r
+// equests-are-routed), and
+// [App Engine Flex request
+// routing](https://cloud.google.com/appengine/docs/flexible/python/how-r
+// equests-are-routed).
+type AppEngineRouting struct {
+	// Host: Output only. The host that the job is sent to.
+	//
+	// For more information about how App Engine requests are routed,
+	// see
+	// [here](https://cloud.google.com/appengine/docs/standard/python/how
+	// -requests-are-routed).
+	//
+	// The host is constructed as:
+	//
+	//
+	// * `host = [application_domain_name]`</br>
+	//   `| [service] + '.' + [application_domain_name]`</br>
+	//   `| [version] + '.' + [application_domain_name]`</br>
+	//   `| [version_dot_service]+ '.' + [application_domain_name]`</br>
+	//   `| [instance] + '.' + [application_domain_name]`</br>
+	//   `| [instance_dot_service] + '.' + [application_domain_name]`</br>
+	//   `| [instance_dot_version] + '.' + [application_domain_name]`</br>
+	//   `| [instance_dot_version_dot_service] + '.' +
+	// [application_domain_name]`
+	//
+	// * `application_domain_name` = The domain name of the app, for
+	//   example <app-id>.appspot.com, which is associated with the
+	//   job's project ID.
+	//
+	// * `service =` service
+	//
+	// * `version =` version
+	//
+	// * `version_dot_service =`
+	//   version `+ '.' +`
+	//   service
+	//
+	// * `instance =` instance
+	//
+	// * `instance_dot_service =`
+	//   instance `+ '.' +`
+	//   service
+	//
+	// * `instance_dot_version =`
+	//   instance `+ '.' +`
+	//   version
+	//
+	// * `instance_dot_version_dot_service =`
+	//   instance `+ '.' +`
+	//   version `+ '.' +`
+	//   service
+	//
+	//
+	// If service is empty, then the job will be sent
+	// to the service which is the default service when the job is
+	// attempted.
+	//
+	// If version is empty, then the job will be sent
+	// to the version which is the default version when the job is
+	// attempted.
+	//
+	// If instance is empty, then the job will be
+	// sent to an instance which is available when the job is attempted.
+	//
+	// If service,
+	// version, or
+	// instance is invalid, then the job will be sent
+	// to the default version of the default service when the job is
+	// attempted.
+	Host string `json:"host,omitempty"`
+
+	// Instance: App instance.
+	//
+	// By default, the job is sent to an instance which is available
+	// when
+	// the job is attempted.
+	//
+	// Requests can only be sent to a specific instance if
+	// [manual scaling is used in App Engine
+	// Standard](https://cloud.google.com/appengine/docs/python/an-overview-o
+	// f-app-engine?hl=en_US#scaling_types_and_instance_classes).
+	// App Engine Flex does not support instances. For more information,
+	// see
+	// [App Engine Standard request
+	// routing](https://cloud.google.com/appengine/docs/standard/python/how-r
+	// equests-are-routed) and
+	// [App Engine Flex request
+	// routing](https://cloud.google.com/appengine/docs/flexible/python/how-r
+	// equests-are-routed).
+	Instance string `json:"instance,omitempty"`
+
+	// Service: App service.
+	//
+	// By default, the job is sent to the service which is the
+	// default
+	// service when the job is attempted.
+	Service string `json:"service,omitempty"`
+
+	// Version: App version.
+	//
+	// By default, the job is sent to the version which is the
+	// default
+	// version when the job is attempted.
+	Version string `json:"version,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Host") 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. "Host") 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 *AppEngineRouting) MarshalJSON() ([]byte, error) {
+	type NoMethod AppEngineRouting
+	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:"-"`
+}
+
+// HttpTarget: Http target. The job will be pushed to the job handler by
+// means of
+// an HTTP request via an http_method such as HTTP
+// POST, HTTP GET, etc. The job is acknowledged by means of an
+// HTTP
+// response code in the range [200 - 299]. A failure to receive a
+// response
+// constitutes a failed execution. For a redirected request, the
+// response
+// returned by the redirected request is considered.
+type HttpTarget struct {
+	// Body: HTTP request body. A request body is allowed only if the
+	// HTTP
+	// method is POST, PUT, or PATCH. It is an error to set body on a job
+	// with an
+	// incompatible HttpMethod.
+	Body string `json:"body,omitempty"`
+
+	// Headers: The user can specify HTTP request headers to send with the
+	// job's
+	// HTTP request. This map contains the header field names and
+	// values. Repeated headers are not supported, but a header value
+	// can
+	// contain commas. These headers represent a subset of the headers
+	// that will accompany the job's HTTP request. Some HTTP request
+	// headers will be ignored or replaced. A partial list of headers
+	// that
+	// will be ignored or replaced is below:
+	// - Host: This will be computed by Cloud Scheduler and derived
+	// from
+	// uri.
+	// * `Content-Length`: This will be computed by Cloud Scheduler.
+	// * `User-Agent`: This will be set to "Google-Cloud-Scheduler".
+	// * `X-Google-*`: Google internal use only.
+	// * `X-AppEngine-*`: Google internal use only.
+	//
+	// The total size of headers must be less than 80KB.
+	Headers map[string]string `json:"headers,omitempty"`
+
+	// HttpMethod: Which HTTP method to use for the request.
+	//
+	// Possible values:
+	//   "HTTP_METHOD_UNSPECIFIED" - HTTP method unspecified. Defaults to
+	// POST.
+	//   "POST" - HTTP POST
+	//   "GET" - HTTP GET
+	//   "HEAD" - HTTP HEAD
+	//   "PUT" - HTTP PUT
+	//   "DELETE" - HTTP DELETE
+	//   "PATCH" - HTTP PATCH
+	//   "OPTIONS" - HTTP OPTIONS
+	HttpMethod string `json:"httpMethod,omitempty"`
+
+	// Uri: Required.
+	//
+	// The full URI path that the request will be sent to. This string
+	// must begin with either "http://" or "https://". Some examples
+	// of
+	// valid values for uri are:
+	// `http://acme.com` and `https://acme.com/sales:8080`. Cloud Scheduler
+	// will
+	// encode some characters for safety and compatibility. The maximum
+	// allowed
+	// URL length is 2083 characters after encoding.
+	Uri string `json:"uri,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Body") 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. "Body") 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 *HttpTarget) MarshalJSON() ([]byte, error) {
+	type NoMethod HttpTarget
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Job: Configuration for a job.
+// The maximum allowed size for a job is 100KB.
+type Job struct {
+	// AppEngineHttpTarget: App Engine HTTP target.
+	AppEngineHttpTarget *AppEngineHttpTarget `json:"appEngineHttpTarget,omitempty"`
+
+	// Description: A human-readable description for the job. This string
+	// must not contain
+	// more than 500 characters.
+	Description string `json:"description,omitempty"`
+
+	// HttpTarget: HTTP target.
+	HttpTarget *HttpTarget `json:"httpTarget,omitempty"`
+
+	// LastAttemptTime: Output only. The time the last job attempt started.
+	LastAttemptTime string `json:"lastAttemptTime,omitempty"`
+
+	// Name: The job name. For
+	// example:
+	// `projects/PROJECT_ID/locations/LOCATION_ID/jobs/JOB_ID`.
+	//
+	// * `PROJECT_ID` can contain letters ([A-Za-z]), numbers ([0-9]),
+	//    hyphens (-), colons (:), or periods (.).
+	//    For more information, see
+	//    [Identifying
+	// projects](https://cloud.google.com/resource-manager/docs/creating-mana
+	// ging-projects#identifying_projects)
+	// * `LOCATION_ID` is the canonical ID for the job's location.
+	//    The list of available locations can be obtained by calling
+	//    ListLocations.
+	//    For more information, see
+	// https://cloud.google.com/about/locations/.
+	// * `JOB_ID` can contain only letters ([A-Za-z]), numbers ([0-9]),
+	//    hyphens (-), or underscores (_). The maximum length is 500
+	// characters.
+	Name string `json:"name,omitempty"`
+
+	// PubsubTarget: Pub/Sub target.
+	PubsubTarget *PubsubTarget `json:"pubsubTarget,omitempty"`
+
+	// RetryConfig: Settings that determine the retry behavior.
+	RetryConfig *RetryConfig `json:"retryConfig,omitempty"`
+
+	// Schedule: Required.
+	//
+	// Describes the schedule on which the job will be executed.
+	//
+	// As a general rule, execution `n + 1` of a job will not begin
+	// until execution `n` has finished. Cloud Scheduler will never
+	// allow two simultaneously outstanding executions. For example,
+	// this implies that if the `n+1`th execution is scheduled to run
+	// at
+	// 16:00 but the `n`th execution takes until 16:15, the
+	// `n+1`th
+	// execution will not start until `16:15`.
+	// A scheduled start time will be delayed if the previous
+	// execution has not ended when its scheduled time occurs.
+	//
+	// If retry_count > 0 and a job attempt fails,
+	// the job will be tried a total of retry_count
+	// times, with exponential backoff, until the next scheduled
+	// start
+	// time.
+	//
+	// The schedule can be either of the following types:
+	//
+	// * [Crontab](http://en.wikipedia.org/wiki/Cron#Overview)
+	// * English-like
+	// [schedule](https://cloud.google.com/scheduler/docs/configuring/cron-jo
+	// b-schedules)
+	Schedule string `json:"schedule,omitempty"`
+
+	// ScheduleTime: Output only. The next time the job is scheduled. Note
+	// that this may be a
+	// retry of a previously failed attempt or the next execution
+	// time
+	// according to the schedule.
+	ScheduleTime string `json:"scheduleTime,omitempty"`
+
+	// State: Output only. State of the job.
+	//
+	// Possible values:
+	//   "STATE_UNSPECIFIED" - Unspecified state.
+	//   "ENABLED" - The job is executing normally.
+	//   "PAUSED" - The job is paused by the user. It will not execute. A
+	// user can
+	// intentionally pause the job using
+	// PauseJobRequest.
+	//   "DISABLED" - The job is disabled by the system due to error. The
+	// user
+	// cannot directly set a job to be disabled.
+	//   "UPDATE_FAILED" - The job state resulting from a failed
+	// CloudScheduler.UpdateJob
+	// operation. To recover a job from this state,
+	// retry
+	// CloudScheduler.UpdateJob until a successful response is received.
+	State string `json:"state,omitempty"`
+
+	// Status: Output only. The response from the target for the last
+	// attempted execution.
+	Status *Status `json:"status,omitempty"`
+
+	// TimeZone: Specifies the time zone to be used in
+	// interpreting
+	// schedule. The value of this field must be a time
+	// zone name from the [tz
+	// database](http://en.wikipedia.org/wiki/Tz_database).
+	//
+	// Note that some time zones include a provision for
+	// daylight savings time. The rules for daylight saving time
+	// are
+	// determined by the chosen tz. For UTC use the string "utc". If a
+	// time zone is not specified, the default will be in UTC (also known
+	// as GMT).
+	TimeZone string `json:"timeZone,omitempty"`
+
+	// UserUpdateTime: Output only. The creation time of the job.
+	UserUpdateTime string `json:"userUpdateTime,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "AppEngineHttpTarget")
+	// 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. "AppEngineHttpTarget") 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 *Job) MarshalJSON() ([]byte, error) {
+	type NoMethod Job
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ListJobsResponse: Response message for listing jobs using ListJobs.
+type ListJobsResponse struct {
+	// Jobs: The list of jobs.
+	Jobs []*Job `json:"jobs,omitempty"`
+
+	// NextPageToken: A token to retrieve next page of results. Pass this
+	// value in the
+	// page_token field in the subsequent call to
+	// ListJobs to retrieve the next page of results.
+	// If this is empty it indicates that there are no more results
+	// through which to paginate.
+	//
+	// The page token is valid for only 2 hours.
+	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. "Jobs") 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. "Jobs") 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 *ListJobsResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod ListJobsResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ListLocationsResponse: The response message for
+// Locations.ListLocations.
+type ListLocationsResponse struct {
+	// Locations: A list of locations that matches the specified filter in
+	// the request.
+	Locations []*Location `json:"locations,omitempty"`
+
+	// NextPageToken: The standard List next-page token.
+	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. "Locations") 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. "Locations") 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 *ListLocationsResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod ListLocationsResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Location: A resource that represents Google Cloud Platform location.
+type Location struct {
+	// DisplayName: The friendly name for this location, typically a nearby
+	// city name.
+	// For example, "Tokyo".
+	DisplayName string `json:"displayName,omitempty"`
+
+	// 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:
+	// "us-east1".
+	LocationId string `json:"locationId,omitempty"`
+
+	// Metadata: Service-specific metadata. For example the available
+	// capacity at the given
+	// location.
+	Metadata googleapi.RawMessage `json:"metadata,omitempty"`
+
+	// Name: Resource name for the location, which may vary between
+	// implementations.
+	// For example: "projects/example-project/locations/us-east1"
+	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 *Location) MarshalJSON() ([]byte, error) {
+	type NoMethod Location
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// PauseJobRequest: Request message for PauseJob.
+type PauseJobRequest struct {
+}
+
+// PubsubMessage: A message that is published by publishers and consumed
+// by subscribers. The
+// message must contain either a non-empty data field or at least one
+// attribute.
+// Note that client libraries represent this object
+// differently
+// depending on the language. See the corresponding
+// <a
+// href="https://cloud.google.com/pubsub/docs/reference/libraries">client
+//
+// library documentation</a> for more information. See
+// <a href="https://cloud.google.com/pubsub/quotas">Quotas and
+// limits</a>
+// for more information about message limits.
+type PubsubMessage struct {
+	// Attributes: Optional attributes for this message.
+	Attributes map[string]string `json:"attributes,omitempty"`
+
+	// Data: The message data field. If this field is empty, the message
+	// must contain
+	// at least one attribute.
+	Data string `json:"data,omitempty"`
+
+	// MessageId: ID of this message, assigned by the server when the
+	// message is published.
+	// Guaranteed to be unique within the topic. This value may be read by
+	// a
+	// subscriber that receives a `PubsubMessage` via a `Pull` call or a
+	// push
+	// delivery. It must not be populated by the publisher in a `Publish`
+	// call.
+	MessageId string `json:"messageId,omitempty"`
+
+	// PublishTime: The time at which the message was published, populated
+	// by the server when
+	// it receives the `Publish` call. It must not be populated by
+	// the
+	// publisher in a `Publish` call.
+	PublishTime string `json:"publishTime,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Attributes") 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. "Attributes") 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 *PubsubMessage) MarshalJSON() ([]byte, error) {
+	type NoMethod PubsubMessage
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// PubsubTarget: Pub/Sub target. The job will be delivered by publishing
+// a message to
+// the given Pub/Sub topic.
+type PubsubTarget struct {
+	// Attributes: Attributes for PubsubMessage.
+	//
+	// Pubsub message must contain either non-empty data, or at least
+	// one
+	// attribute.
+	Attributes map[string]string `json:"attributes,omitempty"`
+
+	// Data: The message payload for PubsubMessage.
+	//
+	// Pubsub message must contain either non-empty data, or at least
+	// one
+	// attribute.
+	Data string `json:"data,omitempty"`
+
+	// TopicName: Required.
+	//
+	// The name of the Cloud Pub/Sub topic to which messages will
+	// be published when a job is delivered. The topic name must be in
+	// the
+	// same format as required by
+	// PubSub's
+	// [PublishRequest.name](https://cloud.google.com/pubsub/docs/re
+	// ference/rpc/google.pubsub.v1#publishrequest),
+	// for example `projects/PROJECT_ID/topics/TOPIC_ID`.
+	//
+	// The topic must be in the same project as the Cloud Scheduler job.
+	TopicName string `json:"topicName,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Attributes") 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. "Attributes") 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 *PubsubTarget) MarshalJSON() ([]byte, error) {
+	type NoMethod PubsubTarget
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ResumeJobRequest: Request message for ResumeJob.
+type ResumeJobRequest struct {
+}
+
+// RetryConfig: Settings that determine the retry behavior.
+//
+// By default, if a job does not complete successfully (meaning that
+// an acknowledgement is not received from the handler, then it will be
+// retried
+// with exponential backoff according to the settings in RetryConfig.
+type RetryConfig struct {
+	// MaxBackoffDuration: The maximum amount of time to wait before
+	// retrying a job after
+	// it fails.
+	//
+	// The default value of this field is 1 hour.
+	MaxBackoffDuration string `json:"maxBackoffDuration,omitempty"`
+
+	// MaxDoublings: The time between retries will double `max_doublings`
+	// times.
+	//
+	// A job's retry interval starts at
+	// min_backoff_duration, then doubles
+	// `max_doublings` times, then increases linearly, and finally
+	// retries retries at intervals of
+	// max_backoff_duration up to
+	// retry_count times.
+	//
+	// For example, if min_backoff_duration is
+	// 10s, max_backoff_duration is 300s, and
+	// `max_doublings` is 3, then the a job will first be retried in 10s.
+	// The
+	// retry interval will double three times, and then increase linearly
+	// by
+	// 2^3 * 10s.  Finally, the job will retry at intervals
+	// of
+	// max_backoff_duration until the job has
+	// been attempted retry_count times. Thus, the
+	// requests will retry at 10s, 20s, 40s, 80s, 160s, 240s, 300s, 300s,
+	// ....
+	//
+	// The default value of this field is 5.
+	MaxDoublings int64 `json:"maxDoublings,omitempty"`
+
+	// MaxRetryDuration: The time limit for retrying a failed job, measured
+	// from time when an
+	// execution was first attempted. If specified with
+	// retry_count, the job will be retried until both limits
+	// are
+	// reached.
+	//
+	// The default value for max_retry_duration is zero, which means
+	// retry
+	// duration is unlimited.
+	MaxRetryDuration string `json:"maxRetryDuration,omitempty"`
+
+	// MinBackoffDuration: The minimum amount of time to wait before
+	// retrying a job after
+	// it fails.
+	//
+	// The default value of this field is 5 seconds.
+	MinBackoffDuration string `json:"minBackoffDuration,omitempty"`
+
+	// RetryCount: The number of attempts that the system will make to run a
+	// job using the
+	// exponential backoff procedure described by
+	// max_doublings.
+	//
+	// The default value of retry_count is zero.
+	//
+	// If retry_count is zero, a job attempt will *not* be retried if
+	// it fails. Instead the Cloud Scheduler system will wait for the
+	// next scheduled execution time.
+	//
+	// If retry_count is set to a non-zero number then Cloud Scheduler
+	// will retry failed attempts, using exponential backoff,
+	// retry_count times, or until the next scheduled execution
+	// time,
+	// whichever comes first.
+	//
+	// Values greater than 5 and negative values are not allowed.
+	RetryCount int64 `json:"retryCount,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "MaxBackoffDuration")
+	// 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. "MaxBackoffDuration") 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 *RetryConfig) MarshalJSON() ([]byte, error) {
+	type NoMethod RetryConfig
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// RunJobRequest: Request message for forcing a job to run now
+// using
+// RunJob.
+type RunJobRequest struct {
+}
+
+// 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` that 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.
+//
+// - 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 is 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)
+}
+
+// method id "cloudscheduler.projects.locations.get":
+
+type ProjectsLocationsGetCall struct {
+	s            *Service
+	name         string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// Get: Gets information about a location.
+func (r *ProjectsLocationsService) Get(name string) *ProjectsLocationsGetCall {
+	c := &ProjectsLocationsGetCall{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 *ProjectsLocationsGetCall) Fields(s ...googleapi.Field) *ProjectsLocationsGetCall {
+	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 *ProjectsLocationsGetCall) IfNoneMatch(entityTag string) *ProjectsLocationsGetCall {
+	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 *ProjectsLocationsGetCall) Context(ctx context.Context) *ProjectsLocationsGetCall {
+	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 *ProjectsLocationsGetCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsGetCall) 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)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "cloudscheduler.projects.locations.get" call.
+// Exactly one of *Location or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Location.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 *ProjectsLocationsGetCall) Do(opts ...googleapi.CallOption) (*Location, 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 := &Location{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets information about a location.",
+	//   "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}",
+	//   "httpMethod": "GET",
+	//   "id": "cloudscheduler.projects.locations.get",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Resource name for the location.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta1/{+name}",
+	//   "response": {
+	//     "$ref": "Location"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "cloudscheduler.projects.locations.list":
+
+type ProjectsLocationsListCall struct {
+	s            *Service
+	name         string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// List: Lists information about the supported locations for this
+// service.
+func (r *ProjectsLocationsService) List(name string) *ProjectsLocationsListCall {
+	c := &ProjectsLocationsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// Filter sets the optional parameter "filter": The standard list
+// filter.
+func (c *ProjectsLocationsListCall) Filter(filter string) *ProjectsLocationsListCall {
+	c.urlParams_.Set("filter", filter)
+	return c
+}
+
+// PageSize sets the optional parameter "pageSize": The standard list
+// page size.
+func (c *ProjectsLocationsListCall) PageSize(pageSize int64) *ProjectsLocationsListCall {
+	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": The standard list
+// page token.
+func (c *ProjectsLocationsListCall) PageToken(pageToken string) *ProjectsLocationsListCall {
+	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 *ProjectsLocationsListCall) Fields(s ...googleapi.Field) *ProjectsLocationsListCall {
+	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 *ProjectsLocationsListCall) IfNoneMatch(entityTag string) *ProjectsLocationsListCall {
+	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 *ProjectsLocationsListCall) Context(ctx context.Context) *ProjectsLocationsListCall {
+	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 *ProjectsLocationsListCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsListCall) 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)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+name}/locations")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "cloudscheduler.projects.locations.list" call.
+// Exactly one of *ListLocationsResponse or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *ListLocationsResponse.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 *ProjectsLocationsListCall) Do(opts ...googleapi.CallOption) (*ListLocationsResponse, 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 := &ListLocationsResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists information about the supported locations for this service.",
+	//   "flatPath": "v1beta1/projects/{projectsId}/locations",
+	//   "httpMethod": "GET",
+	//   "id": "cloudscheduler.projects.locations.list",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "The standard list filter.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "name": {
+	//       "description": "The resource that owns the locations collection, if applicable.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "pageSize": {
+	//       "description": "The standard list page size.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "The standard list page token.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta1/{+name}/locations",
+	//   "response": {
+	//     "$ref": "ListLocationsResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// 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 *ProjectsLocationsListCall) Pages(ctx context.Context, f func(*ListLocationsResponse) 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 "cloudscheduler.projects.locations.jobs.create":
+
+type ProjectsLocationsJobsCreateCall struct {
+	s          *Service
+	parent     string
+	job        *Job
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// Create: Creates a job.
+func (r *ProjectsLocationsJobsService) Create(parent string, job *Job) *ProjectsLocationsJobsCreateCall {
+	c := &ProjectsLocationsJobsCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.parent = parent
+	c.job = job
+	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 *ProjectsLocationsJobsCreateCall) Fields(s ...googleapi.Field) *ProjectsLocationsJobsCreateCall {
+	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 *ProjectsLocationsJobsCreateCall) Context(ctx context.Context) *ProjectsLocationsJobsCreateCall {
+	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 *ProjectsLocationsJobsCreateCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsJobsCreateCall) 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.job)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+parent}/jobs")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "cloudscheduler.projects.locations.jobs.create" call.
+// Exactly one of *Job or error will be non-nil. Any non-2xx status code
+// is an error. Response headers are in either
+// *Job.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 *ProjectsLocationsJobsCreateCall) Do(opts ...googleapi.CallOption) (*Job, 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 := &Job{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Creates a job.",
+	//   "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/jobs",
+	//   "httpMethod": "POST",
+	//   "id": "cloudscheduler.projects.locations.jobs.create",
+	//   "parameterOrder": [
+	//     "parent"
+	//   ],
+	//   "parameters": {
+	//     "parent": {
+	//       "description": "Required.\n\nThe location name. For example:\n`projects/PROJECT_ID/locations/LOCATION_ID`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta1/{+parent}/jobs",
+	//   "request": {
+	//     "$ref": "Job"
+	//   },
+	//   "response": {
+	//     "$ref": "Job"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "cloudscheduler.projects.locations.jobs.delete":
+
+type ProjectsLocationsJobsDeleteCall struct {
+	s          *Service
+	name       string
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// Delete: Deletes a job.
+func (r *ProjectsLocationsJobsService) Delete(name string) *ProjectsLocationsJobsDeleteCall {
+	c := &ProjectsLocationsJobsDeleteCall{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 *ProjectsLocationsJobsDeleteCall) Fields(s ...googleapi.Field) *ProjectsLocationsJobsDeleteCall {
+	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 *ProjectsLocationsJobsDeleteCall) Context(ctx context.Context) *ProjectsLocationsJobsDeleteCall {
+	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 *ProjectsLocationsJobsDeleteCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsJobsDeleteCall) 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)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("DELETE", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "cloudscheduler.projects.locations.jobs.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 *ProjectsLocationsJobsDeleteCall) 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 := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Deletes a job.",
+	//   "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/jobs/{jobsId}",
+	//   "httpMethod": "DELETE",
+	//   "id": "cloudscheduler.projects.locations.jobs.delete",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Required.\n\nThe job name. For example:\n`projects/PROJECT_ID/locations/LOCATION_ID/jobs/JOB_ID`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+/jobs/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta1/{+name}",
+	//   "response": {
+	//     "$ref": "Empty"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "cloudscheduler.projects.locations.jobs.get":
+
+type ProjectsLocationsJobsGetCall struct {
+	s            *Service
+	name         string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// Get: Gets a job.
+func (r *ProjectsLocationsJobsService) Get(name string) *ProjectsLocationsJobsGetCall {
+	c := &ProjectsLocationsJobsGetCall{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 *ProjectsLocationsJobsGetCall) Fields(s ...googleapi.Field) *ProjectsLocationsJobsGetCall {
+	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 *ProjectsLocationsJobsGetCall) IfNoneMatch(entityTag string) *ProjectsLocationsJobsGetCall {
+	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 *ProjectsLocationsJobsGetCall) Context(ctx context.Context) *ProjectsLocationsJobsGetCall {
+	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 *ProjectsLocationsJobsGetCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsJobsGetCall) 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)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "cloudscheduler.projects.locations.jobs.get" call.
+// Exactly one of *Job or error will be non-nil. Any non-2xx status code
+// is an error. Response headers are in either
+// *Job.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 *ProjectsLocationsJobsGetCall) Do(opts ...googleapi.CallOption) (*Job, 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 := &Job{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets a job.",
+	//   "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/jobs/{jobsId}",
+	//   "httpMethod": "GET",
+	//   "id": "cloudscheduler.projects.locations.jobs.get",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Required.\n\nThe job name. For example:\n`projects/PROJECT_ID/locations/LOCATION_ID/jobs/JOB_ID`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+/jobs/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta1/{+name}",
+	//   "response": {
+	//     "$ref": "Job"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "cloudscheduler.projects.locations.jobs.list":
+
+type ProjectsLocationsJobsListCall struct {
+	s            *Service
+	parent       string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// List: Lists jobs.
+func (r *ProjectsLocationsJobsService) List(parent string) *ProjectsLocationsJobsListCall {
+	c := &ProjectsLocationsJobsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.parent = parent
+	return c
+}
+
+// PageSize sets the optional parameter "pageSize": Requested page
+// size.
+//
+// The maximum page size is 500. If unspecified, the page size will
+// be the maximum. Fewer jobs than requested might be returned,
+// even if more jobs exist; use next_page_token to determine if
+// more
+// jobs exist.
+func (c *ProjectsLocationsJobsListCall) PageSize(pageSize int64) *ProjectsLocationsJobsListCall {
+	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": A token
+// identifying a page of results the server will return. To
+// request the first page results, page_token must be empty. To
+// request the next page of results, page_token must be the value
+// of
+// next_page_token returned from
+// the previous call to ListJobs. It is an error to
+// switch the value of filter or
+// order_by while iterating through pages.
+func (c *ProjectsLocationsJobsListCall) PageToken(pageToken string) *ProjectsLocationsJobsListCall {
+	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 *ProjectsLocationsJobsListCall) Fields(s ...googleapi.Field) *ProjectsLocationsJobsListCall {
+	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 *ProjectsLocationsJobsListCall) IfNoneMatch(entityTag string) *ProjectsLocationsJobsListCall {
+	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 *ProjectsLocationsJobsListCall) Context(ctx context.Context) *ProjectsLocationsJobsListCall {
+	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 *ProjectsLocationsJobsListCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsJobsListCall) 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)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+parent}/jobs")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "cloudscheduler.projects.locations.jobs.list" call.
+// Exactly one of *ListJobsResponse or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *ListJobsResponse.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 *ProjectsLocationsJobsListCall) Do(opts ...googleapi.CallOption) (*ListJobsResponse, 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 := &ListJobsResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists jobs.",
+	//   "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/jobs",
+	//   "httpMethod": "GET",
+	//   "id": "cloudscheduler.projects.locations.jobs.list",
+	//   "parameterOrder": [
+	//     "parent"
+	//   ],
+	//   "parameters": {
+	//     "pageSize": {
+	//       "description": "Requested page size.\n\nThe maximum page size is 500. If unspecified, the page size will\nbe the maximum. Fewer jobs than requested might be returned,\neven if more jobs exist; use next_page_token to determine if more\njobs exist.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "A token identifying a page of results the server will return. To\nrequest the first page results, page_token must be empty. To\nrequest the next page of results, page_token must be the value of\nnext_page_token returned from\nthe previous call to ListJobs. It is an error to\nswitch the value of filter or\norder_by while iterating through pages.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "parent": {
+	//       "description": "Required.\n\nThe location name. For example:\n`projects/PROJECT_ID/locations/LOCATION_ID`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta1/{+parent}/jobs",
+	//   "response": {
+	//     "$ref": "ListJobsResponse"
+	//   },
+	//   "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 *ProjectsLocationsJobsListCall) Pages(ctx context.Context, f func(*ListJobsResponse) 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 "cloudscheduler.projects.locations.jobs.patch":
+
+type ProjectsLocationsJobsPatchCall struct {
+	s          *Service
+	name       string
+	job        *Job
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// Patch: Updates a job.
+//
+// If successful, the updated Job is returned. If the job does
+// not exist, `NOT_FOUND` is returned.
+//
+// If UpdateJob does not successfully return, it is possible for the
+// job to be in an Job.State.UPDATE_FAILED state. A job in this state
+// may
+// not be executed. If this happens, retry the UpdateJob request
+// until a successful response is received.
+func (r *ProjectsLocationsJobsService) Patch(name string, job *Job) *ProjectsLocationsJobsPatchCall {
+	c := &ProjectsLocationsJobsPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	c.job = job
+	return c
+}
+
+// UpdateMask sets the optional parameter "updateMask": A  mask used to
+// specify which fields of the job are being updated.
+func (c *ProjectsLocationsJobsPatchCall) UpdateMask(updateMask string) *ProjectsLocationsJobsPatchCall {
+	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 *ProjectsLocationsJobsPatchCall) Fields(s ...googleapi.Field) *ProjectsLocationsJobsPatchCall {
+	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 *ProjectsLocationsJobsPatchCall) Context(ctx context.Context) *ProjectsLocationsJobsPatchCall {
+	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 *ProjectsLocationsJobsPatchCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsJobsPatchCall) 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.job)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("PATCH", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "cloudscheduler.projects.locations.jobs.patch" call.
+// Exactly one of *Job or error will be non-nil. Any non-2xx status code
+// is an error. Response headers are in either
+// *Job.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 *ProjectsLocationsJobsPatchCall) Do(opts ...googleapi.CallOption) (*Job, 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 := &Job{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates a job.\n\nIf successful, the updated Job is returned. If the job does\nnot exist, `NOT_FOUND` is returned.\n\nIf UpdateJob does not successfully return, it is possible for the\njob to be in an Job.State.UPDATE_FAILED state. A job in this state may\nnot be executed. If this happens, retry the UpdateJob request\nuntil a successful response is received.",
+	//   "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/jobs/{jobsId}",
+	//   "httpMethod": "PATCH",
+	//   "id": "cloudscheduler.projects.locations.jobs.patch",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "The job name. For example:\n`projects/PROJECT_ID/locations/LOCATION_ID/jobs/JOB_ID`.\n\n* `PROJECT_ID` can contain letters ([A-Za-z]), numbers ([0-9]),\n   hyphens (-), colons (:), or periods (.).\n   For more information, see\n   [Identifying projects](https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects)\n* `LOCATION_ID` is the canonical ID for the job's location.\n   The list of available locations can be obtained by calling\n   ListLocations.\n   For more information, see https://cloud.google.com/about/locations/.\n* `JOB_ID` can contain only letters ([A-Za-z]), numbers ([0-9]),\n   hyphens (-), or underscores (_). The maximum length is 500 characters.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+/jobs/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "updateMask": {
+	//       "description": "A  mask used to specify which fields of the job are being updated.",
+	//       "format": "google-fieldmask",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta1/{+name}",
+	//   "request": {
+	//     "$ref": "Job"
+	//   },
+	//   "response": {
+	//     "$ref": "Job"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "cloudscheduler.projects.locations.jobs.pause":
+
+type ProjectsLocationsJobsPauseCall struct {
+	s               *Service
+	name            string
+	pausejobrequest *PauseJobRequest
+	urlParams_      gensupport.URLParams
+	ctx_            context.Context
+	header_         http.Header
+}
+
+// Pause: Pauses a job.
+//
+// If a job is paused then the system will stop executing the job
+// until it is re-enabled via ResumeJob. The
+// state of the job is stored in state; if paused it
+// will be set to Job.State.PAUSED. A job must be in
+// Job.State.ENABLED
+// to be paused.
+func (r *ProjectsLocationsJobsService) Pause(name string, pausejobrequest *PauseJobRequest) *ProjectsLocationsJobsPauseCall {
+	c := &ProjectsLocationsJobsPauseCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	c.pausejobrequest = pausejobrequest
+	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 *ProjectsLocationsJobsPauseCall) Fields(s ...googleapi.Field) *ProjectsLocationsJobsPauseCall {
+	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 *ProjectsLocationsJobsPauseCall) Context(ctx context.Context) *ProjectsLocationsJobsPauseCall {
+	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 *ProjectsLocationsJobsPauseCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsJobsPauseCall) 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.pausejobrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+name}:pause")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "cloudscheduler.projects.locations.jobs.pause" call.
+// Exactly one of *Job or error will be non-nil. Any non-2xx status code
+// is an error. Response headers are in either
+// *Job.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 *ProjectsLocationsJobsPauseCall) Do(opts ...googleapi.CallOption) (*Job, 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 := &Job{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Pauses a job.\n\nIf a job is paused then the system will stop executing the job\nuntil it is re-enabled via ResumeJob. The\nstate of the job is stored in state; if paused it\nwill be set to Job.State.PAUSED. A job must be in Job.State.ENABLED\nto be paused.",
+	//   "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/jobs/{jobsId}:pause",
+	//   "httpMethod": "POST",
+	//   "id": "cloudscheduler.projects.locations.jobs.pause",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Required.\n\nThe job name. For example:\n`projects/PROJECT_ID/locations/LOCATION_ID/jobs/JOB_ID`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+/jobs/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta1/{+name}:pause",
+	//   "request": {
+	//     "$ref": "PauseJobRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Job"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "cloudscheduler.projects.locations.jobs.resume":
+
+type ProjectsLocationsJobsResumeCall struct {
+	s                *Service
+	name             string
+	resumejobrequest *ResumeJobRequest
+	urlParams_       gensupport.URLParams
+	ctx_             context.Context
+	header_          http.Header
+}
+
+// Resume: Resume a job.
+//
+// This method reenables a job after it has been Job.State.PAUSED.
+// The
+// state of a job is stored in Job.state; after calling this method
+// it
+// will be set to Job.State.ENABLED. A job must be in
+// Job.State.PAUSED to be resumed.
+func (r *ProjectsLocationsJobsService) Resume(name string, resumejobrequest *ResumeJobRequest) *ProjectsLocationsJobsResumeCall {
+	c := &ProjectsLocationsJobsResumeCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	c.resumejobrequest = resumejobrequest
+	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 *ProjectsLocationsJobsResumeCall) Fields(s ...googleapi.Field) *ProjectsLocationsJobsResumeCall {
+	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 *ProjectsLocationsJobsResumeCall) Context(ctx context.Context) *ProjectsLocationsJobsResumeCall {
+	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 *ProjectsLocationsJobsResumeCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsJobsResumeCall) 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.resumejobrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+name}:resume")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "cloudscheduler.projects.locations.jobs.resume" call.
+// Exactly one of *Job or error will be non-nil. Any non-2xx status code
+// is an error. Response headers are in either
+// *Job.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 *ProjectsLocationsJobsResumeCall) Do(opts ...googleapi.CallOption) (*Job, 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 := &Job{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Resume a job.\n\nThis method reenables a job after it has been Job.State.PAUSED. The\nstate of a job is stored in Job.state; after calling this method it\nwill be set to Job.State.ENABLED. A job must be in\nJob.State.PAUSED to be resumed.",
+	//   "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/jobs/{jobsId}:resume",
+	//   "httpMethod": "POST",
+	//   "id": "cloudscheduler.projects.locations.jobs.resume",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Required.\n\nThe job name. For example:\n`projects/PROJECT_ID/locations/LOCATION_ID/jobs/JOB_ID`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+/jobs/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta1/{+name}:resume",
+	//   "request": {
+	//     "$ref": "ResumeJobRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Job"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "cloudscheduler.projects.locations.jobs.run":
+
+type ProjectsLocationsJobsRunCall struct {
+	s             *Service
+	name          string
+	runjobrequest *RunJobRequest
+	urlParams_    gensupport.URLParams
+	ctx_          context.Context
+	header_       http.Header
+}
+
+// Run: Forces a job to run now.
+//
+// When this method is called, Cloud Scheduler will dispatch the job,
+// even
+// if the job is already running.
+func (r *ProjectsLocationsJobsService) Run(name string, runjobrequest *RunJobRequest) *ProjectsLocationsJobsRunCall {
+	c := &ProjectsLocationsJobsRunCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	c.runjobrequest = runjobrequest
+	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 *ProjectsLocationsJobsRunCall) Fields(s ...googleapi.Field) *ProjectsLocationsJobsRunCall {
+	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 *ProjectsLocationsJobsRunCall) Context(ctx context.Context) *ProjectsLocationsJobsRunCall {
+	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 *ProjectsLocationsJobsRunCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsJobsRunCall) 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.runjobrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+name}:run")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "cloudscheduler.projects.locations.jobs.run" call.
+// Exactly one of *Job or error will be non-nil. Any non-2xx status code
+// is an error. Response headers are in either
+// *Job.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 *ProjectsLocationsJobsRunCall) Do(opts ...googleapi.CallOption) (*Job, 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 := &Job{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Forces a job to run now.\n\nWhen this method is called, Cloud Scheduler will dispatch the job, even\nif the job is already running.",
+	//   "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/jobs/{jobsId}:run",
+	//   "httpMethod": "POST",
+	//   "id": "cloudscheduler.projects.locations.jobs.run",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Required.\n\nThe job name. For example:\n`projects/PROJECT_ID/locations/LOCATION_ID/jobs/JOB_ID`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+/jobs/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta1/{+name}:run",
+	//   "request": {
+	//     "$ref": "RunJobRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Job"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
diff --git a/cloudsearch/v1/cloudsearch-api.json b/cloudsearch/v1/cloudsearch-api.json
index 70cfe37..03873c4 100644
--- a/cloudsearch/v1/cloudsearch-api.json
+++ b/cloudsearch/v1/cloudsearch-api.json
@@ -133,6 +133,71 @@
         "datasources": {
           "resources": {
             "items": {
+              "methods": {
+                "checkAccess": {
+                  "description": "Checks whether an item is accessible by specified principal.",
+                  "flatPath": "v1/debug/datasources/{datasourcesId}/items/{itemsId}:checkAccess",
+                  "httpMethod": "POST",
+                  "id": "cloudsearch.debug.datasources.items.checkAccess",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "parameters": {
+                    "debugOptions.enableDebugging": {
+                      "description": "If set, the request will enable debugging features of Cloud Search.\nOnly turn on this field, if asked by Google to help with debugging.",
+                      "location": "query",
+                      "type": "boolean"
+                    },
+                    "name": {
+                      "description": "Item name, format:\ndatasources/{source_id}/items/{item_id}",
+                      "location": "path",
+                      "pattern": "^datasources/[^/]+/items/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/debug/{+name}:checkAccess",
+                  "request": {
+                    "$ref": "Principal"
+                  },
+                  "response": {
+                    "$ref": "CheckAccessResponse"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud_search",
+                    "https://www.googleapis.com/auth/cloud_search.debug"
+                  ]
+                },
+                "searchByViewUrl": {
+                  "description": "Fetches the item whose viewUrl exactly matches that of the URL provided\nin the request.",
+                  "flatPath": "v1/debug/datasources/{datasourcesId}/items:searchByViewUrl",
+                  "httpMethod": "POST",
+                  "id": "cloudsearch.debug.datasources.items.searchByViewUrl",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "description": "Source name, format:\ndatasources/{source_id}",
+                      "location": "path",
+                      "pattern": "^datasources/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/debug/{+name}/items:searchByViewUrl",
+                  "request": {
+                    "$ref": "SearchItemsByViewUrlRequest"
+                  },
+                  "response": {
+                    "$ref": "SearchItemsByViewUrlResponse"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud_search",
+                    "https://www.googleapis.com/auth/cloud_search.debug"
+                  ]
+                }
+              },
               "resources": {
                 "unmappedids": {
                   "methods": {
@@ -145,6 +210,11 @@
                         "parent"
                       ],
                       "parameters": {
+                        "debugOptions.enableDebugging": {
+                          "description": "If set, the request will enable debugging features of Cloud Search.\nOnly turn on this field, if asked by Google to help with debugging.",
+                          "location": "query",
+                          "type": "boolean"
+                        },
                         "pageSize": {
                           "description": "Maximum number of items to fetch in a request.\nDefaults to 100.",
                           "format": "int32",
@@ -192,6 +262,11 @@
                     "parent"
                   ],
                   "parameters": {
+                    "debugOptions.enableDebugging": {
+                      "description": "If set, the request will enable debugging features of Cloud Search.\nOnly turn on this field, if asked by Google to help with debugging.",
+                      "location": "query",
+                      "type": "boolean"
+                    },
                     "groupResourceName": {
                       "location": "query",
                       "type": "string"
@@ -241,6 +316,11 @@
                     "parent"
                   ],
                   "parameters": {
+                    "debugOptions.enableDebugging": {
+                      "description": "If set, the request will enable debugging features of Cloud Search.\nOnly turn on this field, if asked by Google to help with debugging.",
+                      "location": "query",
+                      "type": "boolean"
+                    },
                     "pageSize": {
                       "description": "Maximum number of items to fetch in a request.\nDefaults to 100.",
                       "format": "int32",
@@ -1349,7 +1429,7 @@
       }
     }
   },
-  "revision": "20181029",
+  "revision": "20181120",
   "rootUrl": "https://cloudsearch.googleapis.com/",
   "schemas": {
     "BooleanOperatorOptions": {
@@ -1374,6 +1454,16 @@
       },
       "type": "object"
     },
+    "CheckAccessResponse": {
+      "id": "CheckAccessResponse",
+      "properties": {
+        "hasAccess": {
+          "description": "Returns true if principal has access.  Returns false otherwise.",
+          "type": "boolean"
+        }
+      },
+      "type": "object"
+    },
     "CompositeFilter": {
       "id": "CompositeFilter",
       "properties": {
@@ -3595,6 +3685,40 @@
       },
       "type": "object"
     },
+    "SearchItemsByViewUrlRequest": {
+      "id": "SearchItemsByViewUrlRequest",
+      "properties": {
+        "debugOptions": {
+          "$ref": "DebugOptions",
+          "description": "Common debug options."
+        },
+        "pageToken": {
+          "description": "The next_page_token value returned from a previous request, if any.",
+          "type": "string"
+        },
+        "viewUrl": {
+          "description": "Specify the full view URL to find the corresponding item.\nThe maximum length is 2048 characters.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "SearchItemsByViewUrlResponse": {
+      "id": "SearchItemsByViewUrlResponse",
+      "properties": {
+        "items": {
+          "items": {
+            "$ref": "Item"
+          },
+          "type": "array"
+        },
+        "nextPageToken": {
+          "description": "Token to retrieve the next page of results, or empty if there are no\nmore results in the list.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "SearchQualityMetadata": {
       "description": "Additional search quality metadata of the item.",
       "id": "SearchQualityMetadata",
diff --git a/cloudsearch/v1/cloudsearch-gen.go b/cloudsearch/v1/cloudsearch-gen.go
index fcf5770..ac409a2 100644
--- a/cloudsearch/v1/cloudsearch-gen.go
+++ b/cloudsearch/v1/cloudsearch-gen.go
@@ -431,6 +431,38 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+type CheckAccessResponse struct {
+	// HasAccess: Returns true if principal has access.  Returns false
+	// otherwise.
+	HasAccess bool `json:"hasAccess,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "HasAccess") 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. "HasAccess") 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 *CheckAccessResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod CheckAccessResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 type CompositeFilter struct {
 	// LogicOperator: The logic operator of the sub filter.
 	//
@@ -4839,6 +4871,77 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+type SearchItemsByViewUrlRequest struct {
+	// DebugOptions: Common debug options.
+	DebugOptions *DebugOptions `json:"debugOptions,omitempty"`
+
+	// PageToken: The next_page_token value returned from a previous
+	// request, if any.
+	PageToken string `json:"pageToken,omitempty"`
+
+	// ViewUrl: Specify the full view URL to find the corresponding
+	// item.
+	// The maximum length is 2048 characters.
+	ViewUrl string `json:"viewUrl,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "DebugOptions") 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. "DebugOptions") 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 *SearchItemsByViewUrlRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod SearchItemsByViewUrlRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type SearchItemsByViewUrlResponse struct {
+	Items []*Item `json:"items,omitempty"`
+
+	// NextPageToken: Token to retrieve the next page of results, or empty
+	// if there are no
+	// more results in the list.
+	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. "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 *SearchItemsByViewUrlResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod SearchItemsByViewUrlResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // SearchQualityMetadata: Additional search quality metadata of the
 // item.
 type SearchQualityMetadata struct {
@@ -6249,6 +6352,324 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// method id "cloudsearch.debug.datasources.items.checkAccess":
+
+type DebugDatasourcesItemsCheckAccessCall struct {
+	s          *Service
+	name       string
+	principal  *Principal
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// CheckAccess: Checks whether an item is accessible by specified
+// principal.
+func (r *DebugDatasourcesItemsService) CheckAccess(name string, principal *Principal) *DebugDatasourcesItemsCheckAccessCall {
+	c := &DebugDatasourcesItemsCheckAccessCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	c.principal = principal
+	return c
+}
+
+// DebugOptionsEnableDebugging sets the optional parameter
+// "debugOptions.enableDebugging": If set, the request will enable
+// debugging features of Cloud Search.
+// Only turn on this field, if asked by Google to help with debugging.
+func (c *DebugDatasourcesItemsCheckAccessCall) DebugOptionsEnableDebugging(debugOptionsEnableDebugging bool) *DebugDatasourcesItemsCheckAccessCall {
+	c.urlParams_.Set("debugOptions.enableDebugging", fmt.Sprint(debugOptionsEnableDebugging))
+	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 *DebugDatasourcesItemsCheckAccessCall) Fields(s ...googleapi.Field) *DebugDatasourcesItemsCheckAccessCall {
+	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 *DebugDatasourcesItemsCheckAccessCall) Context(ctx context.Context) *DebugDatasourcesItemsCheckAccessCall {
+	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 *DebugDatasourcesItemsCheckAccessCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *DebugDatasourcesItemsCheckAccessCall) 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.principal)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/debug/{+name}:checkAccess")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "cloudsearch.debug.datasources.items.checkAccess" call.
+// Exactly one of *CheckAccessResponse or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *CheckAccessResponse.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 *DebugDatasourcesItemsCheckAccessCall) Do(opts ...googleapi.CallOption) (*CheckAccessResponse, 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 := &CheckAccessResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Checks whether an item is accessible by specified principal.",
+	//   "flatPath": "v1/debug/datasources/{datasourcesId}/items/{itemsId}:checkAccess",
+	//   "httpMethod": "POST",
+	//   "id": "cloudsearch.debug.datasources.items.checkAccess",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "debugOptions.enableDebugging": {
+	//       "description": "If set, the request will enable debugging features of Cloud Search.\nOnly turn on this field, if asked by Google to help with debugging.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     },
+	//     "name": {
+	//       "description": "Item name, format:\ndatasources/{source_id}/items/{item_id}",
+	//       "location": "path",
+	//       "pattern": "^datasources/[^/]+/items/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/debug/{+name}:checkAccess",
+	//   "request": {
+	//     "$ref": "Principal"
+	//   },
+	//   "response": {
+	//     "$ref": "CheckAccessResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud_search",
+	//     "https://www.googleapis.com/auth/cloud_search.debug"
+	//   ]
+	// }
+
+}
+
+// method id "cloudsearch.debug.datasources.items.searchByViewUrl":
+
+type DebugDatasourcesItemsSearchByViewUrlCall struct {
+	s                           *Service
+	name                        string
+	searchitemsbyviewurlrequest *SearchItemsByViewUrlRequest
+	urlParams_                  gensupport.URLParams
+	ctx_                        context.Context
+	header_                     http.Header
+}
+
+// SearchByViewUrl: Fetches the item whose viewUrl exactly matches that
+// of the URL provided
+// in the request.
+func (r *DebugDatasourcesItemsService) SearchByViewUrl(name string, searchitemsbyviewurlrequest *SearchItemsByViewUrlRequest) *DebugDatasourcesItemsSearchByViewUrlCall {
+	c := &DebugDatasourcesItemsSearchByViewUrlCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	c.searchitemsbyviewurlrequest = searchitemsbyviewurlrequest
+	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 *DebugDatasourcesItemsSearchByViewUrlCall) Fields(s ...googleapi.Field) *DebugDatasourcesItemsSearchByViewUrlCall {
+	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 *DebugDatasourcesItemsSearchByViewUrlCall) Context(ctx context.Context) *DebugDatasourcesItemsSearchByViewUrlCall {
+	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 *DebugDatasourcesItemsSearchByViewUrlCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *DebugDatasourcesItemsSearchByViewUrlCall) 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.searchitemsbyviewurlrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/debug/{+name}/items:searchByViewUrl")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "cloudsearch.debug.datasources.items.searchByViewUrl" call.
+// Exactly one of *SearchItemsByViewUrlResponse or error will be
+// non-nil. Any non-2xx status code is an error. Response headers are in
+// either *SearchItemsByViewUrlResponse.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 *DebugDatasourcesItemsSearchByViewUrlCall) Do(opts ...googleapi.CallOption) (*SearchItemsByViewUrlResponse, 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 := &SearchItemsByViewUrlResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Fetches the item whose viewUrl exactly matches that of the URL provided\nin the request.",
+	//   "flatPath": "v1/debug/datasources/{datasourcesId}/items:searchByViewUrl",
+	//   "httpMethod": "POST",
+	//   "id": "cloudsearch.debug.datasources.items.searchByViewUrl",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Source name, format:\ndatasources/{source_id}",
+	//       "location": "path",
+	//       "pattern": "^datasources/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/debug/{+name}/items:searchByViewUrl",
+	//   "request": {
+	//     "$ref": "SearchItemsByViewUrlRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "SearchItemsByViewUrlResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud_search",
+	//     "https://www.googleapis.com/auth/cloud_search.debug"
+	//   ]
+	// }
+
+}
+
+// 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 *DebugDatasourcesItemsSearchByViewUrlCall) Pages(ctx context.Context, f func(*SearchItemsByViewUrlResponse) error) error {
+	c.ctx_ = ctx
+	defer func(pt string) { c.searchitemsbyviewurlrequest.PageToken = pt }(c.searchitemsbyviewurlrequest.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.searchitemsbyviewurlrequest.PageToken = x.NextPageToken
+	}
+}
+
 // method id "cloudsearch.debug.datasources.items.unmappedids.list":
 
 type DebugDatasourcesItemsUnmappedidsListCall struct {
@@ -6267,6 +6688,15 @@
 	return c
 }
 
+// DebugOptionsEnableDebugging sets the optional parameter
+// "debugOptions.enableDebugging": If set, the request will enable
+// debugging features of Cloud Search.
+// Only turn on this field, if asked by Google to help with debugging.
+func (c *DebugDatasourcesItemsUnmappedidsListCall) DebugOptionsEnableDebugging(debugOptionsEnableDebugging bool) *DebugDatasourcesItemsUnmappedidsListCall {
+	c.urlParams_.Set("debugOptions.enableDebugging", fmt.Sprint(debugOptionsEnableDebugging))
+	return c
+}
+
 // PageSize sets the optional parameter "pageSize": Maximum number of
 // items to fetch in a request.
 // Defaults to 100.
@@ -6388,6 +6818,11 @@
 	//     "parent"
 	//   ],
 	//   "parameters": {
+	//     "debugOptions.enableDebugging": {
+	//       "description": "If set, the request will enable debugging features of Cloud Search.\nOnly turn on this field, if asked by Google to help with debugging.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     },
 	//     "pageSize": {
 	//       "description": "Maximum number of items to fetch in a request.\nDefaults to 100.",
 	//       "format": "int32",
@@ -6459,6 +6894,15 @@
 	return c
 }
 
+// DebugOptionsEnableDebugging sets the optional parameter
+// "debugOptions.enableDebugging": If set, the request will enable
+// debugging features of Cloud Search.
+// Only turn on this field, if asked by Google to help with debugging.
+func (c *DebugIdentitysourcesItemsListForunmappedidentityCall) DebugOptionsEnableDebugging(debugOptionsEnableDebugging bool) *DebugIdentitysourcesItemsListForunmappedidentityCall {
+	c.urlParams_.Set("debugOptions.enableDebugging", fmt.Sprint(debugOptionsEnableDebugging))
+	return c
+}
+
 // GroupResourceName sets the optional parameter "groupResourceName":
 func (c *DebugIdentitysourcesItemsListForunmappedidentityCall) GroupResourceName(groupResourceName string) *DebugIdentitysourcesItemsListForunmappedidentityCall {
 	c.urlParams_.Set("groupResourceName", groupResourceName)
@@ -6594,6 +7038,11 @@
 	//     "parent"
 	//   ],
 	//   "parameters": {
+	//     "debugOptions.enableDebugging": {
+	//       "description": "If set, the request will enable debugging features of Cloud Search.\nOnly turn on this field, if asked by Google to help with debugging.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     },
 	//     "groupResourceName": {
 	//       "location": "query",
 	//       "type": "string"
@@ -6672,6 +7121,15 @@
 	return c
 }
 
+// DebugOptionsEnableDebugging sets the optional parameter
+// "debugOptions.enableDebugging": If set, the request will enable
+// debugging features of Cloud Search.
+// Only turn on this field, if asked by Google to help with debugging.
+func (c *DebugIdentitysourcesUnmappedidsListCall) DebugOptionsEnableDebugging(debugOptionsEnableDebugging bool) *DebugIdentitysourcesUnmappedidsListCall {
+	c.urlParams_.Set("debugOptions.enableDebugging", fmt.Sprint(debugOptionsEnableDebugging))
+	return c
+}
+
 // PageSize sets the optional parameter "pageSize": Maximum number of
 // items to fetch in a request.
 // Defaults to 100.
@@ -6808,6 +7266,11 @@
 	//     "parent"
 	//   ],
 	//   "parameters": {
+	//     "debugOptions.enableDebugging": {
+	//       "description": "If set, the request will enable debugging features of Cloud Search.\nOnly turn on this field, if asked by Google to help with debugging.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     },
 	//     "pageSize": {
 	//       "description": "Maximum number of items to fetch in a request.\nDefaults to 100.",
 	//       "format": "int32",
diff --git a/composer/v1/composer-api.json b/composer/v1/composer-api.json
index 96e45c5..8080470 100644
--- a/composer/v1/composer-api.json
+++ b/composer/v1/composer-api.json
@@ -360,7 +360,7 @@
       }
     }
   },
-  "revision": "20181001",
+  "revision": "20181120",
   "rootUrl": "https://composer.googleapis.com/",
   "schemas": {
     "Empty": {
@@ -663,6 +663,10 @@
           },
           "description": "Optional. Custom Python Package Index (PyPI) packages to be installed in\nthe environment.\n\nKeys refer to the lowercase package name such as \"numpy\"\nand values are the lowercase extras and version specifier such as\n\"==1.12.0\", \"[devel,gcp_api]\", or \"[devel]\u003e=1.8.2, \u003c1.9.2\". To specify a\npackage without pinning it to a version specifier, use the empty string as\nthe value.",
           "type": "object"
+        },
+        "pythonVersion": {
+          "description": "Optional. The major version of Python used to run the Apache Airflow\nscheduler, worker, and webserver processes.\n\nCan be set to '2' or '3'. If not specified, the default is '2'. Cannot be\nupdated.",
+          "type": "string"
         }
       },
       "type": "object"
diff --git a/composer/v1/composer-gen.go b/composer/v1/composer-gen.go
index 273d5fe..7a034a9 100644
--- a/composer/v1/composer-gen.go
+++ b/composer/v1/composer-gen.go
@@ -748,6 +748,15 @@
 	// the value.
 	PypiPackages map[string]string `json:"pypiPackages,omitempty"`
 
+	// PythonVersion: Optional. The major version of Python used to run the
+	// Apache Airflow
+	// scheduler, worker, and webserver processes.
+	//
+	// Can be set to '2' or '3'. If not specified, the default is '2'.
+	// Cannot be
+	// updated.
+	PythonVersion string `json:"pythonVersion,omitempty"`
+
 	// ForceSendFields is a list of field names (e.g.
 	// "AirflowConfigOverrides") to unconditionally include in API requests.
 	// By default, fields with empty values are omitted from API requests.
diff --git a/container/v1/container-api.json b/container/v1/container-api.json
index 7e0adba..e8718f8 100644
--- a/container/v1/container-api.json
+++ b/container/v1/container-api.json
@@ -12,7 +12,7 @@
   "baseUrl": "https://container.googleapis.com/",
   "batchPath": "batch",
   "canonicalName": "Container",
-  "description": "The Google Kubernetes Engine API is used for building and managing container based applications, powered by the open source Kubernetes technology.",
+  "description": "Builds and manages container-based applications, powered by the open source Kubernetes technology.",
   "discoveryVersion": "v1",
   "documentationLink": "https://cloud.google.com/container-engine/",
   "fullyEncodeReservedExpansion": true,
@@ -2361,7 +2361,7 @@
       }
     }
   },
-  "revision": "20180917",
+  "revision": "20181109",
   "rootUrl": "https://container.googleapis.com/",
   "schemas": {
     "AcceleratorConfig": {
@@ -2479,6 +2479,13 @@
           "description": "The IP address range of the container pods in this cluster, in\n[CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing)\nnotation (e.g. `10.96.0.0/14`). Leave blank to have\none automatically chosen or specify a `/14` block in `10.0.0.0/8`.",
           "type": "string"
         },
+        "conditions": {
+          "description": "Which conditions caused the current cluster state.",
+          "items": {
+            "$ref": "StatusCondition"
+          },
+          "type": "array"
+        },
         "createTime": {
           "description": "[Output only] The time the cluster was created, in\n[RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.",
           "type": "string"
@@ -2488,7 +2495,7 @@
           "type": "string"
         },
         "currentNodeCount": {
-          "description": "[Output only] The number of nodes currently in the cluster.",
+          "description": "[Output only]  The number of nodes currently in the cluster. Deprecated.\nCall Kubernetes API directly to retrieve node information.",
           "format": "int32",
           "type": "integer"
         },
@@ -2545,7 +2552,7 @@
           "type": "string"
         },
         "locations": {
-          "description": "The list of Google Compute Engine\n[locations](/compute/docs/zones#available) in which the cluster's nodes\nshould be located.",
+          "description": "The list of Google Compute Engine\n[zones](/compute/docs/zones#available) in which the cluster's nodes\nshould be located.",
           "items": {
             "type": "string"
           },
@@ -2561,7 +2568,7 @@
         },
         "masterAuth": {
           "$ref": "MasterAuth",
-          "description": "The authentication information for accessing the master endpoint."
+          "description": "The authentication information for accessing the master endpoint.\nIf unspecified, the defaults are used:\nFor clusters before v1.12, if master_auth is unspecified, `username` will\nbe set to \"admin\", a random password will be generated, and a client\ncertificate will be issued."
         },
         "masterAuthorizedNetworksConfig": {
           "$ref": "MasterAuthorizedNetworksConfig",
@@ -2672,7 +2679,7 @@
           "type": "string"
         },
         "desiredLocations": {
-          "description": "The desired list of Google Compute Engine\n[locations](/compute/docs/zones#available) in which the cluster's nodes\nshould be located. Changing the locations a cluster is in will result\nin nodes being either created or removed from the cluster, depending on\nwhether locations are being added or removed.\n\nThis list must always include the cluster's primary zone.",
+          "description": "The desired list of Google Compute Engine\n[zones](/compute/docs/zones#available) in which the cluster's nodes\nshould be located. Changing the locations a cluster is in will result\nin nodes being either created or removed from the cluster, depending on\nwhether locations are being added or removed.\n\nThis list must always include the cluster's primary zone.",
           "items": {
             "type": "string"
           },
@@ -2997,7 +3004,7 @@
           "type": "string"
         },
         "username": {
-          "description": "The username to use for HTTP basic authentication to the master endpoint.\nFor clusters v1.6.0 and later, you can disable basic authentication by\nproviding an empty username.",
+          "description": "The username to use for HTTP basic authentication to the master endpoint.\nFor clusters v1.6.0 and later, basic authentication can be disabled by\nleaving username unspecified (or setting it to the empty string).",
           "type": "string"
         }
       },
@@ -3142,6 +3149,13 @@
             "type": "string"
           },
           "type": "array"
+        },
+        "taints": {
+          "description": "List of kubernetes taints to be applied to each node.\n\nFor more information, including usage and the valid values, see:\nhttps://kubernetes.io/docs/concepts/configuration/taint-and-toleration/",
+          "items": {
+            "$ref": "NodeTaint"
+          },
+          "type": "array"
         }
       },
       "type": "object"
@@ -3173,6 +3187,13 @@
           "$ref": "NodePoolAutoscaling",
           "description": "Autoscaler configuration for this NodePool. Autoscaler is enabled\nonly if a valid configuration is present."
         },
+        "conditions": {
+          "description": "Which conditions caused the current node pool state.",
+          "items": {
+            "$ref": "StatusCondition"
+          },
+          "type": "array"
+        },
         "config": {
           "$ref": "NodeConfig",
           "description": "The node configuration of the pool."
@@ -3255,10 +3276,48 @@
       },
       "type": "object"
     },
+    "NodeTaint": {
+      "description": "Kubernetes taint is comprised of three fields: key, value, and effect. Effect\ncan only be one of three types:  NoSchedule, PreferNoSchedule or NoExecute.\n\nFor more information, including usage and the valid values, see:\nhttps://kubernetes.io/docs/concepts/configuration/taint-and-toleration/",
+      "id": "NodeTaint",
+      "properties": {
+        "effect": {
+          "description": "Effect for taint.",
+          "enum": [
+            "EFFECT_UNSPECIFIED",
+            "NO_SCHEDULE",
+            "PREFER_NO_SCHEDULE",
+            "NO_EXECUTE"
+          ],
+          "enumDescriptions": [
+            "Not set",
+            "NoSchedule",
+            "PreferNoSchedule",
+            "NoExecute"
+          ],
+          "type": "string"
+        },
+        "key": {
+          "description": "Key for taint.",
+          "type": "string"
+        },
+        "value": {
+          "description": "Value for taint.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "Operation": {
       "description": "This operation resource represents operations that may have happened or are\nhappening on the cluster. All fields are output only.",
       "id": "Operation",
       "properties": {
+        "clusterConditions": {
+          "description": "Which conditions caused the current cluster state.",
+          "items": {
+            "$ref": "StatusCondition"
+          },
+          "type": "array"
+        },
         "detail": {
           "description": "Detailed operation progress, if available.",
           "type": "string"
@@ -3275,6 +3334,13 @@
           "description": "The server-assigned ID for the operation.",
           "type": "string"
         },
+        "nodepoolConditions": {
+          "description": "Which conditions caused the current node pool state.",
+          "items": {
+            "$ref": "StatusCondition"
+          },
+          "type": "array"
+        },
         "operationType": {
           "description": "The operation type.",
           "enum": [
@@ -3545,7 +3611,7 @@
           "type": "string"
         },
         "locations": {
-          "description": "The desired list of Google Compute Engine\n[locations](/compute/docs/zones#available) in which the cluster's nodes\nshould be located. Changing the locations a cluster is in will result\nin nodes being either created or removed from the cluster, depending on\nwhether locations are being added or removed.\n\nThis list must always include the cluster's primary zone.",
+          "description": "The desired list of Google Compute Engine\n[zones](/compute/docs/zones#available) in which the cluster's nodes\nshould be located. Changing the locations a cluster is in will result\nin nodes being either created or removed from the cluster, depending on\nwhether locations are being added or removed.\n\nThis list must always include the cluster's primary zone.",
           "items": {
             "type": "string"
           },
@@ -3838,6 +3904,35 @@
       },
       "type": "object"
     },
+    "StatusCondition": {
+      "description": "StatusCondition describes why a cluster or a node pool has a certain status\n(e.g., ERROR or DEGRADED).",
+      "id": "StatusCondition",
+      "properties": {
+        "code": {
+          "description": "Machine-friendly representation of the condition",
+          "enum": [
+            "UNKNOWN",
+            "GCE_STOCKOUT",
+            "GKE_SERVICE_ACCOUNT_DELETED",
+            "GCE_QUOTA_EXCEEDED",
+            "SET_BY_OPERATOR"
+          ],
+          "enumDescriptions": [
+            "UNKNOWN indicates a generic condition.",
+            "GCE_STOCKOUT indicates a Google Compute Engine stockout.",
+            "GKE_SERVICE_ACCOUNT_DELETED indicates that the user deleted their robot\nservice account.",
+            "Google Compute Engine quota was exceeded.",
+            "Cluster state was manually changed by an SRE due to a system logic error.\nMore codes TBA"
+          ],
+          "type": "string"
+        },
+        "message": {
+          "description": "Human-friendly representation of the condition",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "UpdateClusterRequest": {
       "description": "UpdateClusterRequest updates the settings of a cluster.",
       "id": "UpdateClusterRequest",
diff --git a/container/v1/container-gen.go b/container/v1/container-gen.go
index 2094ef1..3c4446a 100644
--- a/container/v1/container-gen.go
+++ b/container/v1/container-gen.go
@@ -452,6 +452,9 @@
 	// one automatically chosen or specify a `/14` block in `10.0.0.0/8`.
 	ClusterIpv4Cidr string `json:"clusterIpv4Cidr,omitempty"`
 
+	// Conditions: Which conditions caused the current cluster state.
+	Conditions []*StatusCondition `json:"conditions,omitempty"`
+
 	// CreateTime: [Output only] The time the cluster was created,
 	// in
 	// [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
@@ -461,8 +464,9 @@
 	// the master endpoint.
 	CurrentMasterVersion string `json:"currentMasterVersion,omitempty"`
 
-	// CurrentNodeCount: [Output only] The number of nodes currently in the
-	// cluster.
+	// CurrentNodeCount: [Output only]  The number of nodes currently in the
+	// cluster. Deprecated.
+	// Call Kubernetes API directly to retrieve node information.
 	CurrentNodeCount int64 `json:"currentNodeCount,omitempty"`
 
 	// CurrentNodeVersion: [Output only] Deprecated,
@@ -568,7 +572,7 @@
 
 	// Locations: The list of Google Compute
 	// Engine
-	// [locations](/compute/docs/zones#available) in which the cluster's
+	// [zones](/compute/docs/zones#available) in which the cluster's
 	// nodes
 	// should be located.
 	Locations []string `json:"locations,omitempty"`
@@ -587,6 +591,12 @@
 
 	// MasterAuth: The authentication information for accessing the master
 	// endpoint.
+	// If unspecified, the defaults are used:
+	// For clusters before v1.12, if master_auth is unspecified, `username`
+	// will
+	// be set to "admin", a random password will be generated, and a
+	// client
+	// certificate will be issued.
 	MasterAuth *MasterAuth `json:"masterAuth,omitempty"`
 
 	// MasterAuthorizedNetworksConfig: The configuration options for master
@@ -765,7 +775,7 @@
 
 	// DesiredLocations: The desired list of Google Compute
 	// Engine
-	// [locations](/compute/docs/zones#available) in which the cluster's
+	// [zones](/compute/docs/zones#available) in which the cluster's
 	// nodes
 	// should be located. Changing the locations a cluster is in will
 	// result
@@ -1568,9 +1578,9 @@
 
 	// Username: The username to use for HTTP basic authentication to the
 	// master endpoint.
-	// For clusters v1.6.0 and later, you can disable basic authentication
+	// For clusters v1.6.0 and later, basic authentication can be disabled
 	// by
-	// providing an empty username.
+	// leaving username unspecified (or setting it to the empty string).
 	Username string `json:"username,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "ClientCertificate")
@@ -1901,6 +1911,14 @@
 	// must comply with RFC1035.
 	Tags []string `json:"tags,omitempty"`
 
+	// Taints: List of kubernetes taints to be applied to each node.
+	//
+	// For more information, including usage and the valid values,
+	// see:
+	// https://kubernetes.io/docs/concepts/configuration/taint-and-toler
+	// ation/
+	Taints []*NodeTaint `json:"taints,omitempty"`
+
 	// ForceSendFields is a list of field names (e.g. "Accelerators") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
@@ -1987,6 +2005,9 @@
 	// only if a valid configuration is present.
 	Autoscaling *NodePoolAutoscaling `json:"autoscaling,omitempty"`
 
+	// Conditions: Which conditions caused the current node pool state.
+	Conditions []*StatusCondition `json:"conditions,omitempty"`
+
 	// Config: The node configuration of the pool.
 	Config *NodeConfig `json:"config,omitempty"`
 
@@ -2117,10 +2138,61 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// NodeTaint: Kubernetes taint is comprised of three fields: key, value,
+// and effect. Effect
+// can only be one of three types:  NoSchedule, PreferNoSchedule or
+// NoExecute.
+//
+// For more information, including usage and the valid values,
+// see:
+// https://kubernetes.io/docs/concepts/configuration/taint-and-toler
+// ation/
+type NodeTaint struct {
+	// Effect: Effect for taint.
+	//
+	// Possible values:
+	//   "EFFECT_UNSPECIFIED" - Not set
+	//   "NO_SCHEDULE" - NoSchedule
+	//   "PREFER_NO_SCHEDULE" - PreferNoSchedule
+	//   "NO_EXECUTE" - NoExecute
+	Effect string `json:"effect,omitempty"`
+
+	// Key: Key for taint.
+	Key string `json:"key,omitempty"`
+
+	// Value: Value for taint.
+	Value string `json:"value,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Effect") 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. "Effect") 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 *NodeTaint) MarshalJSON() ([]byte, error) {
+	type NoMethod NodeTaint
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // Operation: This operation resource represents operations that may
 // have happened or are
 // happening on the cluster. All fields are output only.
 type Operation struct {
+	// ClusterConditions: Which conditions caused the current cluster state.
+	ClusterConditions []*StatusCondition `json:"clusterConditions,omitempty"`
+
 	// Detail: Detailed operation progress, if available.
 	Detail string `json:"detail,omitempty"`
 
@@ -2141,6 +2213,10 @@
 	// Name: The server-assigned ID for the operation.
 	Name string `json:"name,omitempty"`
 
+	// NodepoolConditions: Which conditions caused the current node pool
+	// state.
+	NodepoolConditions []*StatusCondition `json:"nodepoolConditions,omitempty"`
+
 	// OperationType: The operation type.
 	//
 	// Possible values:
@@ -2199,20 +2275,21 @@
 	// server.
 	googleapi.ServerResponse `json:"-"`
 
-	// ForceSendFields is a list of field names (e.g. "Detail") to
-	// unconditionally include in API requests. By default, fields with
+	// ForceSendFields is a list of field names (e.g. "ClusterConditions")
+	// 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. "Detail") 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 is a list of field names (e.g. "ClusterConditions") 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:"-"`
 }
 
@@ -2570,7 +2647,7 @@
 
 	// Locations: The desired list of Google Compute
 	// Engine
-	// [locations](/compute/docs/zones#available) in which the cluster's
+	// [zones](/compute/docs/zones#available) in which the cluster's
 	// nodes
 	// should be located. Changing the locations a cluster is in will
 	// result
@@ -3146,6 +3223,51 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// StatusCondition: StatusCondition describes why a cluster or a node
+// pool has a certain status
+// (e.g., ERROR or DEGRADED).
+type StatusCondition struct {
+	// Code: Machine-friendly representation of the condition
+	//
+	// Possible values:
+	//   "UNKNOWN" - UNKNOWN indicates a generic condition.
+	//   "GCE_STOCKOUT" - GCE_STOCKOUT indicates a Google Compute Engine
+	// stockout.
+	//   "GKE_SERVICE_ACCOUNT_DELETED" - GKE_SERVICE_ACCOUNT_DELETED
+	// indicates that the user deleted their robot
+	// service account.
+	//   "GCE_QUOTA_EXCEEDED" - Google Compute Engine quota was exceeded.
+	//   "SET_BY_OPERATOR" - Cluster state was manually changed by an SRE
+	// due to a system logic error.
+	// More codes TBA
+	Code string `json:"code,omitempty"`
+
+	// Message: Human-friendly representation of the condition
+	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 *StatusCondition) MarshalJSON() ([]byte, error) {
+	type NoMethod StatusCondition
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // UpdateClusterRequest: UpdateClusterRequest updates the settings of a
 // cluster.
 type UpdateClusterRequest struct {
diff --git a/container/v1beta1/container-api.json b/container/v1beta1/container-api.json
index 0beb667..35484f2 100644
--- a/container/v1beta1/container-api.json
+++ b/container/v1beta1/container-api.json
@@ -12,7 +12,7 @@
   "baseUrl": "https://container.googleapis.com/",
   "batchPath": "batch",
   "canonicalName": "Container",
-  "description": "The Google Kubernetes Engine API is used for building and managing container based applications, powered by the open source Kubernetes technology.",
+  "description": "Builds and manages container-based applications, powered by the open source Kubernetes technology.",
   "discoveryVersion": "v1",
   "documentationLink": "https://cloud.google.com/container-engine/",
   "fullyEncodeReservedExpansion": true,
@@ -2435,7 +2435,7 @@
       }
     }
   },
-  "revision": "20180917",
+  "revision": "20181109",
   "rootUrl": "https://container.googleapis.com/",
   "schemas": {
     "AcceleratorConfig": {
@@ -2588,7 +2588,7 @@
           "type": "string"
         },
         "currentNodeCount": {
-          "description": "[Output only] The number of nodes currently in the cluster.",
+          "description": "[Output only]  The number of nodes currently in the cluster. Deprecated.\nCall Kubernetes API directly to retrieve node information.",
           "format": "int32",
           "type": "integer"
         },
@@ -2653,7 +2653,7 @@
           "type": "string"
         },
         "locations": {
-          "description": "The list of Google Compute Engine\n[locations](/compute/docs/zones#available) in which the cluster's nodes\nshould be located.",
+          "description": "The list of Google Compute Engine\n[zones](/compute/docs/zones#available) in which the cluster's nodes\nshould be located.",
           "items": {
             "type": "string"
           },
@@ -2669,7 +2669,7 @@
         },
         "masterAuth": {
           "$ref": "MasterAuth",
-          "description": "The authentication information for accessing the master endpoint."
+          "description": "The authentication information for accessing the master endpoint.\nIf unspecified, the defaults are used:\nFor clusters before v1.12, if master_auth is unspecified, `username` will\nbe set to \"admin\", a random password will be generated, and a client\ncertificate will be issued."
         },
         "masterAuthorizedNetworksConfig": {
           "$ref": "MasterAuthorizedNetworksConfig",
@@ -2776,6 +2776,10 @@
           "description": "[Output only] The IP address range of the Cloud TPUs in this cluster, in\n[CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing)\nnotation (e.g. `1.2.3.4/29`).",
           "type": "string"
         },
+        "verticalPodAutoscaling": {
+          "$ref": "VerticalPodAutoscaling",
+          "description": "Cluster-level Vertical Pod Autoscaling configuration."
+        },
         "zone": {
           "description": "[Output only] The name of the Google Compute Engine\n[zone](/compute/docs/zones#available) in which the cluster\nresides.\nThis field is deprecated, use location instead.",
           "type": "string"
@@ -2822,7 +2826,7 @@
           "type": "string"
         },
         "desiredLocations": {
-          "description": "The desired list of Google Compute Engine\n[locations](/compute/docs/zones#available) in which the cluster's nodes\nshould be located. Changing the locations a cluster is in will result\nin nodes being either created or removed from the cluster, depending on\nwhether locations are being added or removed.\n\nThis list must always include the cluster's primary zone.",
+          "description": "The desired list of Google Compute Engine\n[zones](/compute/docs/zones#available) in which the cluster's nodes\nshould be located. Changing the locations a cluster is in will result\nin nodes being either created or removed from the cluster, depending on\nwhether locations are being added or removed.\n\nThis list must always include the cluster's primary zone.",
           "items": {
             "type": "string"
           },
@@ -2859,6 +2863,10 @@
         "desiredPodSecurityPolicyConfig": {
           "$ref": "PodSecurityPolicyConfig",
           "description": "The desired configuration options for the PodSecurityPolicy feature."
+        },
+        "desiredVerticalPodAutoscaling": {
+          "$ref": "VerticalPodAutoscaling",
+          "description": "Cluster-level Vertical Pod Autoscaling configuration."
         }
       },
       "type": "object"
@@ -3228,7 +3236,7 @@
           "type": "string"
         },
         "username": {
-          "description": "The username to use for HTTP basic authentication to the master endpoint.\nFor clusters v1.6.0 and later, you can disable basic authentication by\nproviding an empty username.",
+          "description": "The username to use for HTTP basic authentication to the master endpoint.\nFor clusters v1.6.0 and later, basic authentication can be disabled by\nleaving username unspecified (or setting it to the empty string).",
           "type": "string"
         }
       },
@@ -3963,7 +3971,7 @@
           "type": "string"
         },
         "locations": {
-          "description": "The desired list of Google Compute Engine\n[locations](/compute/docs/zones#available) in which the cluster's nodes\nshould be located. Changing the locations a cluster is in will result\nin nodes being either created or removed from the cluster, depending on\nwhether locations are being added or removed.\n\nThis list must always include the cluster's primary zone.",
+          "description": "The desired list of Google Compute Engine\n[zones](/compute/docs/zones#available) in which the cluster's nodes\nshould be located. Changing the locations a cluster is in will result\nin nodes being either created or removed from the cluster, depending on\nwhether locations are being added or removed.\n\nThis list must always include the cluster's primary zone.",
           "items": {
             "type": "string"
           },
@@ -4266,13 +4274,15 @@
             "UNKNOWN",
             "GCE_STOCKOUT",
             "GKE_SERVICE_ACCOUNT_DELETED",
-            "GCE_QUOTA_EXCEEDED"
+            "GCE_QUOTA_EXCEEDED",
+            "SET_BY_OPERATOR"
           ],
           "enumDescriptions": [
             "UNKNOWN indicates a generic condition.",
-            "GCE_STOCKOUT indicates a GCE stockout.",
+            "GCE_STOCKOUT indicates a Google Compute Engine stockout.",
             "GKE_SERVICE_ACCOUNT_DELETED indicates that the user deleted their robot\nservice account.",
-            "GCE quota was exceeded.\nMore codes TBA"
+            "Google Compute Engine quota was exceeded.",
+            "Cluster state was manually changed by an SRE due to a system logic error.\nMore codes TBA"
           ],
           "type": "string"
         },
@@ -4435,6 +4445,17 @@
       },
       "type": "object"
     },
+    "VerticalPodAutoscaling": {
+      "description": "VerticalPodAutoscaling contains global, per-cluster information\nrequired by Vertical Pod Autoscaler to automatically adjust\nthe resources of pods controlled by it.",
+      "id": "VerticalPodAutoscaling",
+      "properties": {
+        "enabled": {
+          "description": "Enables vertical pod autoscaling.",
+          "type": "boolean"
+        }
+      },
+      "type": "object"
+    },
     "WorkloadMetadataConfig": {
       "description": "WorkloadMetadataConfig defines the metadata configuration to expose to\nworkloads on the node pool.",
       "id": "WorkloadMetadataConfig",
diff --git a/container/v1beta1/container-gen.go b/container/v1beta1/container-gen.go
index 8255e89..005d2cd 100644
--- a/container/v1beta1/container-gen.go
+++ b/container/v1beta1/container-gen.go
@@ -524,8 +524,9 @@
 	// the master endpoint.
 	CurrentMasterVersion string `json:"currentMasterVersion,omitempty"`
 
-	// CurrentNodeCount: [Output only] The number of nodes currently in the
-	// cluster.
+	// CurrentNodeCount: [Output only]  The number of nodes currently in the
+	// cluster. Deprecated.
+	// Call Kubernetes API directly to retrieve node information.
 	CurrentNodeCount int64 `json:"currentNodeCount,omitempty"`
 
 	// CurrentNodeVersion: [Output only] Deprecated,
@@ -640,7 +641,7 @@
 
 	// Locations: The list of Google Compute
 	// Engine
-	// [locations](/compute/docs/zones#available) in which the cluster's
+	// [zones](/compute/docs/zones#available) in which the cluster's
 	// nodes
 	// should be located.
 	Locations []string `json:"locations,omitempty"`
@@ -659,6 +660,12 @@
 
 	// MasterAuth: The authentication information for accessing the master
 	// endpoint.
+	// If unspecified, the defaults are used:
+	// For clusters before v1.12, if master_auth is unspecified, `username`
+	// will
+	// be set to "admin", a random password will be generated, and a
+	// client
+	// certificate will be issued.
 	MasterAuth *MasterAuth `json:"masterAuth,omitempty"`
 
 	// MasterAuthorizedNetworksConfig: The configuration options for master
@@ -821,6 +828,10 @@
 	// notation (e.g. `1.2.3.4/29`).
 	TpuIpv4CidrBlock string `json:"tpuIpv4CidrBlock,omitempty"`
 
+	// VerticalPodAutoscaling: Cluster-level Vertical Pod Autoscaling
+	// configuration.
+	VerticalPodAutoscaling *VerticalPodAutoscaling `json:"verticalPodAutoscaling,omitempty"`
+
 	// Zone: [Output only] The name of the Google Compute
 	// Engine
 	// [zone](/compute/docs/zones#available) in which the
@@ -919,7 +930,7 @@
 
 	// DesiredLocations: The desired list of Google Compute
 	// Engine
-	// [locations](/compute/docs/zones#available) in which the cluster's
+	// [zones](/compute/docs/zones#available) in which the cluster's
 	// nodes
 	// should be located. Changing the locations a cluster is in will
 	// result
@@ -1008,6 +1019,10 @@
 	// the PodSecurityPolicy feature.
 	DesiredPodSecurityPolicyConfig *PodSecurityPolicyConfig `json:"desiredPodSecurityPolicyConfig,omitempty"`
 
+	// DesiredVerticalPodAutoscaling: Cluster-level Vertical Pod Autoscaling
+	// configuration.
+	DesiredVerticalPodAutoscaling *VerticalPodAutoscaling `json:"desiredVerticalPodAutoscaling,omitempty"`
+
 	// ForceSendFields is a list of field names (e.g. "DesiredAddonsConfig")
 	// to unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
@@ -1917,9 +1932,9 @@
 
 	// Username: The username to use for HTTP basic authentication to the
 	// master endpoint.
-	// For clusters v1.6.0 and later, you can disable basic authentication
+	// For clusters v1.6.0 and later, basic authentication can be disabled
 	// by
-	// providing an empty username.
+	// leaving username unspecified (or setting it to the empty string).
 	Username string `json:"username,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "ClientCertificate")
@@ -3193,7 +3208,7 @@
 
 	// Locations: The desired list of Google Compute
 	// Engine
-	// [locations](/compute/docs/zones#available) in which the cluster's
+	// [zones](/compute/docs/zones#available) in which the cluster's
 	// nodes
 	// should be located. Changing the locations a cluster is in will
 	// result
@@ -3777,11 +3792,14 @@
 	//
 	// Possible values:
 	//   "UNKNOWN" - UNKNOWN indicates a generic condition.
-	//   "GCE_STOCKOUT" - GCE_STOCKOUT indicates a GCE stockout.
+	//   "GCE_STOCKOUT" - GCE_STOCKOUT indicates a Google Compute Engine
+	// stockout.
 	//   "GKE_SERVICE_ACCOUNT_DELETED" - GKE_SERVICE_ACCOUNT_DELETED
 	// indicates that the user deleted their robot
 	// service account.
-	//   "GCE_QUOTA_EXCEEDED" - GCE quota was exceeded.
+	//   "GCE_QUOTA_EXCEEDED" - Google Compute Engine quota was exceeded.
+	//   "SET_BY_OPERATOR" - Cluster state was manually changed by an SRE
+	// due to a system logic error.
 	// More codes TBA
 	Code string `json:"code,omitempty"`
 
@@ -4111,6 +4129,37 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// VerticalPodAutoscaling: VerticalPodAutoscaling contains global,
+// per-cluster information
+// required by Vertical Pod Autoscaler to automatically adjust
+// the resources of pods controlled by it.
+type VerticalPodAutoscaling struct {
+	// Enabled: Enables vertical pod autoscaling.
+	Enabled bool `json:"enabled,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 *VerticalPodAutoscaling) MarshalJSON() ([]byte, error) {
+	type NoMethod VerticalPodAutoscaling
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // WorkloadMetadataConfig: WorkloadMetadataConfig defines the metadata
 // configuration to expose to
 // workloads on the node pool.
diff --git a/content/v2/content-api.json b/content/v2/content-api.json
index e677057..1b5caa4 100644
--- a/content/v2/content-api.json
+++ b/content/v2/content-api.json
@@ -15,7 +15,7 @@
   "description": "Manages product items, inventory, and Merchant Center accounts for Google Shopping.",
   "discoveryVersion": "v1",
   "documentationLink": "https://developers.google.com/shopping-content",
-  "etag": "\"J3WqvAcMk4eQjJXvfSI4Yr8VouA/kqiK7ItRiK15mvY7aRI-n1_7sqk\"",
+  "etag": "\"J3WqvAcMk4eQjJXvfSI4Yr8VouA/PNLk-OC6JYKJ3ygPuumcyHEfVVQ\"",
   "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"
@@ -1294,7 +1294,8 @@
           "id": "content.liasettings.requestgmbaccess",
           "parameterOrder": [
             "merchantId",
-            "accountId"
+            "accountId",
+            "gmbEmail"
           ],
           "parameters": {
             "accountId": {
@@ -1307,6 +1308,7 @@
             "gmbEmail": {
               "description": "The email of the Google My Business account.",
               "location": "query",
+              "required": true,
               "type": "string"
             },
             "merchantId": {
@@ -1370,7 +1372,11 @@
           "id": "content.liasettings.setinventoryverificationcontact",
           "parameterOrder": [
             "merchantId",
-            "accountId"
+            "accountId",
+            "contactEmail",
+            "contactName",
+            "country",
+            "language"
           ],
           "parameters": {
             "accountId": {
@@ -1383,21 +1389,25 @@
             "contactEmail": {
               "description": "The email of the inventory verification contact.",
               "location": "query",
+              "required": true,
               "type": "string"
             },
             "contactName": {
               "description": "The name of the inventory verification contact.",
               "location": "query",
+              "required": true,
               "type": "string"
             },
             "country": {
               "description": "The country for which inventory verification is requested.",
               "location": "query",
+              "required": true,
               "type": "string"
             },
             "language": {
               "description": "The language for which inventory verification is requested.",
               "location": "query",
+              "required": true,
               "type": "string"
             },
             "merchantId": {
@@ -1422,7 +1432,8 @@
           "id": "content.liasettings.setposdataprovider",
           "parameterOrder": [
             "merchantId",
-            "accountId"
+            "accountId",
+            "country"
           ],
           "parameters": {
             "accountId": {
@@ -1435,6 +1446,7 @@
             "country": {
               "description": "The country for which the POS data provider is selected.",
               "location": "query",
+              "required": true,
               "type": "string"
             },
             "merchantId": {
@@ -3469,7 +3481,7 @@
       }
     }
   },
-  "revision": "20181029",
+  "revision": "20181129",
   "rootUrl": "https://www.googleapis.com/",
   "schemas": {
     "Account": {
@@ -6330,7 +6342,7 @@
         },
         "product": {
           "$ref": "OrderLineItemProduct",
-          "description": "Product data from the time of the order placement."
+          "description": "Product data as seen by customer from the time of the order placement. Note that certain attributes values (e.g. title or gtin) might be reformatted and no longer match values submitted via product feed."
         },
         "quantityCanceled": {
           "description": "Number of items canceled.",
@@ -6467,10 +6479,6 @@
           "$ref": "Price",
           "description": "Amount of the fee."
         },
-        "id": {
-          "description": "Case-insensitive fee ID.",
-          "type": "string"
-        },
         "name": {
           "description": "Name of the fee.",
           "type": "string"
@@ -6771,7 +6779,7 @@
       "id": "OrderShipment",
       "properties": {
         "carrier": {
-          "description": "The carrier handling the shipment.\n\nAcceptable values are:  \n- \"gsx\" \n- \"ups\" \n- \"usps\" \n- \"fedex\" \n- \"dhl\" \n- \"ecourier\" \n- \"cxt\" \n- \"google\" \n- \"ontrac\" \n- \"emsy\" \n- \"ont\" \n- \"deliv\" \n- \"dynamex\" \n- \"lasership\" \n- \"mpx\" \n- \"uds\"",
+          "description": "The carrier handling the shipment.\n\nAcceptable values for US are:  \n- \"gsx\" \n- \"ups\" \n- \"usps\" \n- \"fedex\" \n- \"dhl\" \n- \"ecourier\" \n- \"cxt\" \n- \"google\" \n- \"ontrac\" \n- \"emsy\" \n- \"ont\" \n- \"deliv\" \n- \"dynamex\" \n- \"lasership\" \n- \"mpx\" \n- \"uds\"  \n\nAcceptable values for FR are:  \n- \"colissimo\" \n- \"chronopost\"",
           "type": "string"
         },
         "creationDate": {
@@ -9493,7 +9501,7 @@
       "id": "ProductShippingDimension",
       "properties": {
         "unit": {
-          "description": "The unit of value.\n\nAcceptable values are:  \n- \"cm\" \n- \"in\"",
+          "description": "The unit of value.",
           "type": "string"
         },
         "value": {
diff --git a/content/v2/content-gen.go b/content/v2/content-gen.go
index 60d9897..7f7e50e 100644
--- a/content/v2/content-gen.go
+++ b/content/v2/content-gen.go
@@ -4821,7 +4821,10 @@
 	// $10 are purchased, the total price will be $20.
 	Price *Price `json:"price,omitempty"`
 
-	// Product: Product data from the time of the order placement.
+	// Product: Product data as seen by customer from the time of the order
+	// placement. Note that certain attributes values (e.g. title or gtin)
+	// might be reformatted and no longer match values submitted via product
+	// feed.
 	Product *OrderLineItemProduct `json:"product,omitempty"`
 
 	// QuantityCanceled: Number of items canceled.
@@ -4960,9 +4963,6 @@
 	// Amount: Amount of the fee.
 	Amount *Price `json:"amount,omitempty"`
 
-	// Id: Case-insensitive fee ID.
-	Id string `json:"id,omitempty"`
-
 	// Name: Name of the fee.
 	Name string `json:"name,omitempty"`
 
@@ -5385,7 +5385,7 @@
 type OrderShipment struct {
 	// Carrier: The carrier handling the shipment.
 	//
-	// Acceptable values are:
+	// Acceptable values for US are:
 	// - "gsx"
 	// - "ups"
 	// - "usps"
@@ -5402,6 +5402,10 @@
 	// - "lasership"
 	// - "mpx"
 	// - "uds"
+	//
+	// Acceptable values for FR are:
+	// - "colissimo"
+	// - "chronopost"
 	Carrier string `json:"carrier,omitempty"`
 
 	// CreationDate: Date on which the shipment has been created, in ISO
@@ -9375,10 +9379,6 @@
 
 type ProductShippingDimension struct {
 	// Unit: The unit of value.
-	//
-	// Acceptable values are:
-	// - "cm"
-	// - "in"
 	Unit string `json:"unit,omitempty"`
 
 	// Value: The dimension of the product used to calculate the shipping
@@ -17086,16 +17086,10 @@
 
 // Requestgmbaccess: Requests access to a specified Google My Business
 // account.
-func (r *LiasettingsService) Requestgmbaccess(merchantId uint64, accountId uint64) *LiasettingsRequestgmbaccessCall {
+func (r *LiasettingsService) Requestgmbaccess(merchantId uint64, accountId uint64, gmbEmail string) *LiasettingsRequestgmbaccessCall {
 	c := &LiasettingsRequestgmbaccessCall{s: r.s, urlParams_: make(gensupport.URLParams)}
 	c.merchantId = merchantId
 	c.accountId = accountId
-	return c
-}
-
-// GmbEmail sets the optional parameter "gmbEmail": The email of the
-// Google My Business account.
-func (c *LiasettingsRequestgmbaccessCall) GmbEmail(gmbEmail string) *LiasettingsRequestgmbaccessCall {
 	c.urlParams_.Set("gmbEmail", gmbEmail)
 	return c
 }
@@ -17192,7 +17186,8 @@
 	//   "id": "content.liasettings.requestgmbaccess",
 	//   "parameterOrder": [
 	//     "merchantId",
-	//     "accountId"
+	//     "accountId",
+	//     "gmbEmail"
 	//   ],
 	//   "parameters": {
 	//     "accountId": {
@@ -17205,6 +17200,7 @@
 	//     "gmbEmail": {
 	//       "description": "The email of the Google My Business account.",
 	//       "location": "query",
+	//       "required": true,
 	//       "type": "string"
 	//     },
 	//     "merchantId": {
@@ -17391,37 +17387,13 @@
 
 // Setinventoryverificationcontact: Sets the inventory verification
 // contract for the specified country.
-func (r *LiasettingsService) Setinventoryverificationcontact(merchantId uint64, accountId uint64) *LiasettingsSetinventoryverificationcontactCall {
+func (r *LiasettingsService) Setinventoryverificationcontact(merchantId uint64, accountId uint64, contactEmail string, contactName string, country string, language string) *LiasettingsSetinventoryverificationcontactCall {
 	c := &LiasettingsSetinventoryverificationcontactCall{s: r.s, urlParams_: make(gensupport.URLParams)}
 	c.merchantId = merchantId
 	c.accountId = accountId
-	return c
-}
-
-// ContactEmail sets the optional parameter "contactEmail": The email of
-// the inventory verification contact.
-func (c *LiasettingsSetinventoryverificationcontactCall) ContactEmail(contactEmail string) *LiasettingsSetinventoryverificationcontactCall {
 	c.urlParams_.Set("contactEmail", contactEmail)
-	return c
-}
-
-// ContactName sets the optional parameter "contactName": The name of
-// the inventory verification contact.
-func (c *LiasettingsSetinventoryverificationcontactCall) ContactName(contactName string) *LiasettingsSetinventoryverificationcontactCall {
 	c.urlParams_.Set("contactName", contactName)
-	return c
-}
-
-// Country sets the optional parameter "country": The country for which
-// inventory verification is requested.
-func (c *LiasettingsSetinventoryverificationcontactCall) Country(country string) *LiasettingsSetinventoryverificationcontactCall {
 	c.urlParams_.Set("country", country)
-	return c
-}
-
-// Language sets the optional parameter "language": The language for
-// which inventory verification is requested.
-func (c *LiasettingsSetinventoryverificationcontactCall) Language(language string) *LiasettingsSetinventoryverificationcontactCall {
 	c.urlParams_.Set("language", language)
 	return c
 }
@@ -17519,7 +17491,11 @@
 	//   "id": "content.liasettings.setinventoryverificationcontact",
 	//   "parameterOrder": [
 	//     "merchantId",
-	//     "accountId"
+	//     "accountId",
+	//     "contactEmail",
+	//     "contactName",
+	//     "country",
+	//     "language"
 	//   ],
 	//   "parameters": {
 	//     "accountId": {
@@ -17532,21 +17508,25 @@
 	//     "contactEmail": {
 	//       "description": "The email of the inventory verification contact.",
 	//       "location": "query",
+	//       "required": true,
 	//       "type": "string"
 	//     },
 	//     "contactName": {
 	//       "description": "The name of the inventory verification contact.",
 	//       "location": "query",
+	//       "required": true,
 	//       "type": "string"
 	//     },
 	//     "country": {
 	//       "description": "The country for which inventory verification is requested.",
 	//       "location": "query",
+	//       "required": true,
 	//       "type": "string"
 	//     },
 	//     "language": {
 	//       "description": "The language for which inventory verification is requested.",
 	//       "location": "query",
+	//       "required": true,
 	//       "type": "string"
 	//     },
 	//     "merchantId": {
@@ -17581,16 +17561,10 @@
 
 // Setposdataprovider: Sets the POS data provider for the specified
 // country.
-func (r *LiasettingsService) Setposdataprovider(merchantId uint64, accountId uint64) *LiasettingsSetposdataproviderCall {
+func (r *LiasettingsService) Setposdataprovider(merchantId uint64, accountId uint64, country string) *LiasettingsSetposdataproviderCall {
 	c := &LiasettingsSetposdataproviderCall{s: r.s, urlParams_: make(gensupport.URLParams)}
 	c.merchantId = merchantId
 	c.accountId = accountId
-	return c
-}
-
-// Country sets the optional parameter "country": The country for which
-// the POS data provider is selected.
-func (c *LiasettingsSetposdataproviderCall) Country(country string) *LiasettingsSetposdataproviderCall {
 	c.urlParams_.Set("country", country)
 	return c
 }
@@ -17702,7 +17676,8 @@
 	//   "id": "content.liasettings.setposdataprovider",
 	//   "parameterOrder": [
 	//     "merchantId",
-	//     "accountId"
+	//     "accountId",
+	//     "country"
 	//   ],
 	//   "parameters": {
 	//     "accountId": {
@@ -17715,6 +17690,7 @@
 	//     "country": {
 	//       "description": "The country for which the POS data provider is selected.",
 	//       "location": "query",
+	//       "required": true,
 	//       "type": "string"
 	//     },
 	//     "merchantId": {
diff --git a/dataflow/v1b3/dataflow-api.json b/dataflow/v1b3/dataflow-api.json
index c1dc491..5f49ecb 100644
--- a/dataflow/v1b3/dataflow-api.json
+++ b/dataflow/v1b3/dataflow-api.json
@@ -423,6 +423,43 @@
                 "https://www.googleapis.com/auth/userinfo.email"
               ]
             },
+            "snapshot": {
+              "description": "Snapshot the state of a streaming job.",
+              "flatPath": "v1b3/projects/{projectId}/jobs/{jobId}:snapshot",
+              "httpMethod": "POST",
+              "id": "dataflow.projects.jobs.snapshot",
+              "parameterOrder": [
+                "projectId",
+                "jobId"
+              ],
+              "parameters": {
+                "jobId": {
+                  "description": "The job to be snapshotted.",
+                  "location": "path",
+                  "required": true,
+                  "type": "string"
+                },
+                "projectId": {
+                  "description": "The project which owns the job to be snapshotted.",
+                  "location": "path",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "path": "v1b3/projects/{projectId}/jobs/{jobId}:snapshot",
+              "request": {
+                "$ref": "SnapshotJobRequest"
+              },
+              "response": {
+                "$ref": "Snapshot"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/compute",
+                "https://www.googleapis.com/auth/compute.readonly",
+                "https://www.googleapis.com/auth/userinfo.email"
+              ]
+            },
             "update": {
               "description": "Updates the state of an existing Cloud Dataflow job.",
               "flatPath": "v1b3/projects/{projectId}/jobs/{jobId}",
@@ -966,6 +1003,50 @@
                     "https://www.googleapis.com/auth/userinfo.email"
                   ]
                 },
+                "snapshot": {
+                  "description": "Snapshot the state of a streaming job.",
+                  "flatPath": "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}:snapshot",
+                  "httpMethod": "POST",
+                  "id": "dataflow.projects.locations.jobs.snapshot",
+                  "parameterOrder": [
+                    "projectId",
+                    "location",
+                    "jobId"
+                  ],
+                  "parameters": {
+                    "jobId": {
+                      "description": "The job to be snapshotted.",
+                      "location": "path",
+                      "required": true,
+                      "type": "string"
+                    },
+                    "location": {
+                      "description": "The location that contains this job.",
+                      "location": "path",
+                      "required": true,
+                      "type": "string"
+                    },
+                    "projectId": {
+                      "description": "The project which owns the job to be snapshotted.",
+                      "location": "path",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}:snapshot",
+                  "request": {
+                    "$ref": "SnapshotJobRequest"
+                  },
+                  "response": {
+                    "$ref": "Snapshot"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/compute",
+                    "https://www.googleapis.com/auth/compute.readonly",
+                    "https://www.googleapis.com/auth/userinfo.email"
+                  ]
+                },
                 "update": {
                   "description": "Updates the state of an existing Cloud Dataflow job.",
                   "flatPath": "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}",
@@ -1329,7 +1410,7 @@
                   ],
                   "parameters": {
                     "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://`.",
+                      "description": "Required. A Cloud Storage path to the template from which to\ncreate the job.\nMust be valid Cloud Storage URL, beginning with 'gs://'.",
                       "location": "query",
                       "type": "string"
                     },
@@ -1375,8 +1456,18 @@
                     "location"
                   ],
                   "parameters": {
+                    "dynamicTemplate.gcsPath": {
+                      "description": "Path to dynamic template spec file on GCS.\nThe file must be a Json serialized DynamicTemplateFieSpec object.",
+                      "location": "query",
+                      "type": "string"
+                    },
+                    "dynamicTemplate.stagingLocation": {
+                      "description": "Cloud Storage path for staging dependencies.\nMust be a valid Cloud Storage URL, beginning with `gs://`.",
+                      "location": "query",
+                      "type": "string"
+                    },
                     "gcsPath": {
-                      "description": "Required. A Cloud Storage path to the template from which to create\nthe job.\nMust be valid Cloud Storage URL, beginning with 'gs://'.",
+                      "description": "A Cloud Storage path to the template from which to create\nthe job.\nMust be valid Cloud Storage URL, beginning with 'gs://'.",
                       "location": "query",
                       "type": "string"
                     },
@@ -1458,7 +1549,7 @@
               ],
               "parameters": {
                 "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://`.",
+                  "description": "Required. A Cloud Storage path to the template from which to\ncreate the job.\nMust be valid Cloud Storage URL, beginning with 'gs://'.",
                   "location": "query",
                   "type": "string"
                 },
@@ -1502,8 +1593,18 @@
                 "projectId"
               ],
               "parameters": {
+                "dynamicTemplate.gcsPath": {
+                  "description": "Path to dynamic template spec file on GCS.\nThe file must be a Json serialized DynamicTemplateFieSpec object.",
+                  "location": "query",
+                  "type": "string"
+                },
+                "dynamicTemplate.stagingLocation": {
+                  "description": "Cloud Storage path for staging dependencies.\nMust be a valid Cloud Storage URL, beginning with `gs://`.",
+                  "location": "query",
+                  "type": "string"
+                },
                 "gcsPath": {
-                  "description": "Required. A Cloud Storage path to the template from which to create\nthe job.\nMust be valid Cloud Storage URL, beginning with 'gs://'.",
+                  "description": "A Cloud Storage path to the template from which to create\nthe job.\nMust be valid Cloud Storage URL, beginning with 'gs://'.",
                   "location": "query",
                   "type": "string"
                 },
@@ -1543,7 +1644,7 @@
       }
     }
   },
-  "revision": "20181016",
+  "revision": "20181116",
   "rootUrl": "https://dataflow.googleapis.com/",
   "schemas": {
     "ApproximateProgress": {
@@ -2714,6 +2815,10 @@
           "format": "google-datetime",
           "type": "string"
         },
+        "createdFromSnapshotId": {
+          "description": "If this is specified, the job's initial state is populated from the given\nsnapshot.",
+          "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.",
           "enum": [
@@ -2843,12 +2948,16 @@
           "type": "string"
         },
         "steps": {
-          "description": "The top-level steps that constitute the entire job.",
+          "description": "Exactly one of step or steps_location should be specified.\n\nThe top-level steps that constitute the entire job.",
           "items": {
             "$ref": "Step"
           },
           "type": "array"
         },
+        "stepsLocation": {
+          "description": "The GCS location where the steps are stored.",
+          "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}",
           "items": {
@@ -4027,6 +4136,51 @@
       },
       "type": "object"
     },
+    "Snapshot": {
+      "description": "Represents a snapshot of a job.",
+      "id": "Snapshot",
+      "properties": {
+        "creationTime": {
+          "description": "The time this snapshot was created.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "id": {
+          "description": "The unique ID of this snapshot.",
+          "type": "string"
+        },
+        "projectId": {
+          "description": "The project this snapshot belongs to.",
+          "type": "string"
+        },
+        "sourceJobId": {
+          "description": "The job this snapshot was created from.",
+          "type": "string"
+        },
+        "ttl": {
+          "description": "The time after which this snapshot will be automatically deleted.",
+          "format": "google-duration",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "SnapshotJobRequest": {
+      "description": "Request to create a snapshot of a job.",
+      "id": "SnapshotJobRequest",
+      "properties": {
+        "location": {
+          "description": "The location that contains this job.",
+          "type": "string"
+        },
+        "ttl": {
+          "description": "TTL for the snapshot.",
+          "format": "google-duration",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "Source": {
       "description": "A source that records can be read and decoded from.",
       "id": "Source",
diff --git a/dataflow/v1b3/dataflow-gen.go b/dataflow/v1b3/dataflow-gen.go
index c7d3f4a..789137e 100644
--- a/dataflow/v1b3/dataflow-gen.go
+++ b/dataflow/v1b3/dataflow-gen.go
@@ -2340,6 +2340,11 @@
 	// Cloud Dataflow service.
 	CreateTime string `json:"createTime,omitempty"`
 
+	// CreatedFromSnapshotId: If this is specified, the job's initial state
+	// is populated from the given
+	// snapshot.
+	CreatedFromSnapshotId string `json:"createdFromSnapshotId,omitempty"`
+
 	// CurrentState: The current state of the job.
 	//
 	// Jobs are created in the `JOB_STATE_STOPPED` state unless
@@ -2610,9 +2615,15 @@
 	// service.
 	StartTime string `json:"startTime,omitempty"`
 
-	// Steps: The top-level steps that constitute the entire job.
+	// Steps: Exactly one of step or steps_location should be
+	// specified.
+	//
+	// The top-level steps that constitute the entire job.
 	Steps []*Step `json:"steps,omitempty"`
 
+	// StepsLocation: The GCS location where the steps are stored.
+	StepsLocation string `json:"stepsLocation,omitempty"`
+
 	// TempFiles: A set of files the system should be aware of that are
 	// used
 	// for temporary storage. These temporary files will be
@@ -4661,6 +4672,82 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// Snapshot: Represents a snapshot of a job.
+type Snapshot struct {
+	// CreationTime: The time this snapshot was created.
+	CreationTime string `json:"creationTime,omitempty"`
+
+	// Id: The unique ID of this snapshot.
+	Id string `json:"id,omitempty"`
+
+	// ProjectId: The project this snapshot belongs to.
+	ProjectId string `json:"projectId,omitempty"`
+
+	// SourceJobId: The job this snapshot was created from.
+	SourceJobId string `json:"sourceJobId,omitempty"`
+
+	// Ttl: The time after which this snapshot will be automatically
+	// deleted.
+	Ttl string `json:"ttl,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "CreationTime") 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. "CreationTime") 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 *Snapshot) MarshalJSON() ([]byte, error) {
+	type NoMethod Snapshot
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// SnapshotJobRequest: Request to create a snapshot of a job.
+type SnapshotJobRequest struct {
+	// Location: The location that contains this job.
+	Location string `json:"location,omitempty"`
+
+	// Ttl: TTL for the snapshot.
+	Ttl string `json:"ttl,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Location") 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. "Location") 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 *SnapshotJobRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod SnapshotJobRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // Source: A source that records can be read and decoded from.
 type Source struct {
 	// BaseSpecs: While splitting, sources may specify the produced
@@ -8326,6 +8413,157 @@
 	}
 }
 
+// method id "dataflow.projects.jobs.snapshot":
+
+type ProjectsJobsSnapshotCall struct {
+	s                  *Service
+	projectId          string
+	jobId              string
+	snapshotjobrequest *SnapshotJobRequest
+	urlParams_         gensupport.URLParams
+	ctx_               context.Context
+	header_            http.Header
+}
+
+// Snapshot: Snapshot the state of a streaming job.
+func (r *ProjectsJobsService) Snapshot(projectId string, jobId string, snapshotjobrequest *SnapshotJobRequest) *ProjectsJobsSnapshotCall {
+	c := &ProjectsJobsSnapshotCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.projectId = projectId
+	c.jobId = jobId
+	c.snapshotjobrequest = snapshotjobrequest
+	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 *ProjectsJobsSnapshotCall) Fields(s ...googleapi.Field) *ProjectsJobsSnapshotCall {
+	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 *ProjectsJobsSnapshotCall) Context(ctx context.Context) *ProjectsJobsSnapshotCall {
+	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 *ProjectsJobsSnapshotCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsJobsSnapshotCall) 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.snapshotjobrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1b3/projects/{projectId}/jobs/{jobId}:snapshot")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"projectId": c.projectId,
+		"jobId":     c.jobId,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "dataflow.projects.jobs.snapshot" call.
+// Exactly one of *Snapshot or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Snapshot.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 *ProjectsJobsSnapshotCall) Do(opts ...googleapi.CallOption) (*Snapshot, 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 := &Snapshot{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Snapshot the state of a streaming job.",
+	//   "flatPath": "v1b3/projects/{projectId}/jobs/{jobId}:snapshot",
+	//   "httpMethod": "POST",
+	//   "id": "dataflow.projects.jobs.snapshot",
+	//   "parameterOrder": [
+	//     "projectId",
+	//     "jobId"
+	//   ],
+	//   "parameters": {
+	//     "jobId": {
+	//       "description": "The job to be snapshotted.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "projectId": {
+	//       "description": "The project which owns the job to be snapshotted.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1b3/projects/{projectId}/jobs/{jobId}:snapshot",
+	//   "request": {
+	//     "$ref": "SnapshotJobRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Snapshot"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly",
+	//     "https://www.googleapis.com/auth/userinfo.email"
+	//   ]
+	// }
+
+}
+
 // method id "dataflow.projects.jobs.update":
 
 type ProjectsJobsUpdateCall struct {
@@ -10328,6 +10566,167 @@
 	}
 }
 
+// method id "dataflow.projects.locations.jobs.snapshot":
+
+type ProjectsLocationsJobsSnapshotCall struct {
+	s                  *Service
+	projectId          string
+	location           string
+	jobId              string
+	snapshotjobrequest *SnapshotJobRequest
+	urlParams_         gensupport.URLParams
+	ctx_               context.Context
+	header_            http.Header
+}
+
+// Snapshot: Snapshot the state of a streaming job.
+func (r *ProjectsLocationsJobsService) Snapshot(projectId string, location string, jobId string, snapshotjobrequest *SnapshotJobRequest) *ProjectsLocationsJobsSnapshotCall {
+	c := &ProjectsLocationsJobsSnapshotCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.projectId = projectId
+	c.location = location
+	c.jobId = jobId
+	c.snapshotjobrequest = snapshotjobrequest
+	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 *ProjectsLocationsJobsSnapshotCall) Fields(s ...googleapi.Field) *ProjectsLocationsJobsSnapshotCall {
+	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 *ProjectsLocationsJobsSnapshotCall) Context(ctx context.Context) *ProjectsLocationsJobsSnapshotCall {
+	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 *ProjectsLocationsJobsSnapshotCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsJobsSnapshotCall) 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.snapshotjobrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}:snapshot")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"projectId": c.projectId,
+		"location":  c.location,
+		"jobId":     c.jobId,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "dataflow.projects.locations.jobs.snapshot" call.
+// Exactly one of *Snapshot or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Snapshot.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 *ProjectsLocationsJobsSnapshotCall) Do(opts ...googleapi.CallOption) (*Snapshot, 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 := &Snapshot{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Snapshot the state of a streaming job.",
+	//   "flatPath": "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}:snapshot",
+	//   "httpMethod": "POST",
+	//   "id": "dataflow.projects.locations.jobs.snapshot",
+	//   "parameterOrder": [
+	//     "projectId",
+	//     "location",
+	//     "jobId"
+	//   ],
+	//   "parameters": {
+	//     "jobId": {
+	//       "description": "The job to be snapshotted.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "location": {
+	//       "description": "The location that contains this job.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "projectId": {
+	//       "description": "The project which owns the job to be snapshotted.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}:snapshot",
+	//   "request": {
+	//     "$ref": "SnapshotJobRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Snapshot"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly",
+	//     "https://www.googleapis.com/auth/userinfo.email"
+	//   ]
+	// }
+
+}
+
 // method id "dataflow.projects.locations.jobs.update":
 
 type ProjectsLocationsJobsUpdateCall struct {
@@ -11581,7 +11980,7 @@
 // GcsPath sets the optional parameter "gcsPath": Required. A Cloud
 // Storage path to the template from which to
 // create the job.
-// Must be a valid Cloud Storage URL, beginning with `gs://`.
+// Must be valid Cloud Storage URL, beginning with 'gs://'.
 func (c *ProjectsLocationsTemplatesGetCall) GcsPath(gcsPath string) *ProjectsLocationsTemplatesGetCall {
 	c.urlParams_.Set("gcsPath", gcsPath)
 	return c
@@ -11706,7 +12105,7 @@
 	//   ],
 	//   "parameters": {
 	//     "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://`.",
+	//       "description": "Required. A Cloud Storage path to the template from which to\ncreate the job.\nMust be valid Cloud Storage URL, beginning with 'gs://'.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
@@ -11766,8 +12165,26 @@
 	return c
 }
 
-// GcsPath sets the optional parameter "gcsPath": Required. A Cloud
-// Storage path to the template from which to create
+// DynamicTemplateGcsPath sets the optional parameter
+// "dynamicTemplate.gcsPath": Path to dynamic template spec file on
+// GCS.
+// The file must be a Json serialized DynamicTemplateFieSpec object.
+func (c *ProjectsLocationsTemplatesLaunchCall) DynamicTemplateGcsPath(dynamicTemplateGcsPath string) *ProjectsLocationsTemplatesLaunchCall {
+	c.urlParams_.Set("dynamicTemplate.gcsPath", dynamicTemplateGcsPath)
+	return c
+}
+
+// DynamicTemplateStagingLocation sets the optional parameter
+// "dynamicTemplate.stagingLocation": Cloud Storage path for staging
+// dependencies.
+// Must be a valid Cloud Storage URL, beginning with `gs://`.
+func (c *ProjectsLocationsTemplatesLaunchCall) DynamicTemplateStagingLocation(dynamicTemplateStagingLocation string) *ProjectsLocationsTemplatesLaunchCall {
+	c.urlParams_.Set("dynamicTemplate.stagingLocation", dynamicTemplateStagingLocation)
+	return c
+}
+
+// GcsPath sets the optional parameter "gcsPath": A Cloud Storage path
+// to the template from which to create
 // the job.
 // Must be valid Cloud Storage URL, beginning with 'gs://'.
 func (c *ProjectsLocationsTemplatesLaunchCall) GcsPath(gcsPath string) *ProjectsLocationsTemplatesLaunchCall {
@@ -11883,8 +12300,18 @@
 	//     "location"
 	//   ],
 	//   "parameters": {
+	//     "dynamicTemplate.gcsPath": {
+	//       "description": "Path to dynamic template spec file on GCS.\nThe file must be a Json serialized DynamicTemplateFieSpec object.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "dynamicTemplate.stagingLocation": {
+	//       "description": "Cloud Storage path for staging dependencies.\nMust be a valid Cloud Storage URL, beginning with `gs://`.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
 	//     "gcsPath": {
-	//       "description": "Required. A Cloud Storage path to the template from which to create\nthe job.\nMust be valid Cloud Storage URL, beginning with 'gs://'.",
+	//       "description": "A Cloud Storage path to the template from which to create\nthe job.\nMust be valid Cloud Storage URL, beginning with 'gs://'.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
@@ -12085,7 +12512,7 @@
 // GcsPath sets the optional parameter "gcsPath": Required. A Cloud
 // Storage path to the template from which to
 // create the job.
-// Must be a valid Cloud Storage URL, beginning with `gs://`.
+// Must be valid Cloud Storage URL, beginning with 'gs://'.
 func (c *ProjectsTemplatesGetCall) GcsPath(gcsPath string) *ProjectsTemplatesGetCall {
 	c.urlParams_.Set("gcsPath", gcsPath)
 	return c
@@ -12215,7 +12642,7 @@
 	//   ],
 	//   "parameters": {
 	//     "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://`.",
+	//       "description": "Required. A Cloud Storage path to the template from which to\ncreate the job.\nMust be valid Cloud Storage URL, beginning with 'gs://'.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
@@ -12272,8 +12699,26 @@
 	return c
 }
 
-// GcsPath sets the optional parameter "gcsPath": Required. A Cloud
-// Storage path to the template from which to create
+// DynamicTemplateGcsPath sets the optional parameter
+// "dynamicTemplate.gcsPath": Path to dynamic template spec file on
+// GCS.
+// The file must be a Json serialized DynamicTemplateFieSpec object.
+func (c *ProjectsTemplatesLaunchCall) DynamicTemplateGcsPath(dynamicTemplateGcsPath string) *ProjectsTemplatesLaunchCall {
+	c.urlParams_.Set("dynamicTemplate.gcsPath", dynamicTemplateGcsPath)
+	return c
+}
+
+// DynamicTemplateStagingLocation sets the optional parameter
+// "dynamicTemplate.stagingLocation": Cloud Storage path for staging
+// dependencies.
+// Must be a valid Cloud Storage URL, beginning with `gs://`.
+func (c *ProjectsTemplatesLaunchCall) DynamicTemplateStagingLocation(dynamicTemplateStagingLocation string) *ProjectsTemplatesLaunchCall {
+	c.urlParams_.Set("dynamicTemplate.stagingLocation", dynamicTemplateStagingLocation)
+	return c
+}
+
+// GcsPath sets the optional parameter "gcsPath": A Cloud Storage path
+// to the template from which to create
 // the job.
 // Must be valid Cloud Storage URL, beginning with 'gs://'.
 func (c *ProjectsTemplatesLaunchCall) GcsPath(gcsPath string) *ProjectsTemplatesLaunchCall {
@@ -12394,8 +12839,18 @@
 	//     "projectId"
 	//   ],
 	//   "parameters": {
+	//     "dynamicTemplate.gcsPath": {
+	//       "description": "Path to dynamic template spec file on GCS.\nThe file must be a Json serialized DynamicTemplateFieSpec object.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "dynamicTemplate.stagingLocation": {
+	//       "description": "Cloud Storage path for staging dependencies.\nMust be a valid Cloud Storage URL, beginning with `gs://`.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
 	//     "gcsPath": {
-	//       "description": "Required. A Cloud Storage path to the template from which to create\nthe job.\nMust be valid Cloud Storage URL, beginning with 'gs://'.",
+	//       "description": "A Cloud Storage path to the template from which to create\nthe job.\nMust be valid Cloud Storage URL, beginning with 'gs://'.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
diff --git a/dataproc/v1/dataproc-api.json b/dataproc/v1/dataproc-api.json
index 4c00d63..6bf1660 100644
--- a/dataproc/v1/dataproc-api.json
+++ b/dataproc/v1/dataproc-api.json
@@ -1634,7 +1634,7 @@
       }
     }
   },
-  "revision": "20181019",
+  "revision": "20181114",
   "rootUrl": "https://dataproc.googleapis.com/",
   "schemas": {
     "AcceleratorConfig": {
@@ -2277,6 +2277,10 @@
           "$ref": "HiveJob",
           "description": "Job is a Hive job."
         },
+        "jobUuid": {
+          "description": "Output only. A UUID that uniquely identifies a job within the project over time. This is in contrast to a user-settable reference.job_id that may be reused over time.",
+          "type": "string"
+        },
         "labels": {
           "additionalProperties": {
             "type": "string"
diff --git a/dataproc/v1/dataproc-gen.go b/dataproc/v1/dataproc-gen.go
index 9660287..60a4eda 100644
--- a/dataproc/v1/dataproc-gen.go
+++ b/dataproc/v1/dataproc-gen.go
@@ -1231,6 +1231,11 @@
 	// HiveJob: Job is a Hive job.
 	HiveJob *HiveJob `json:"hiveJob,omitempty"`
 
+	// JobUuid: Output only. A UUID that uniquely identifies a job within
+	// the project over time. This is in contrast to a user-settable
+	// reference.job_id that may be reused over time.
+	JobUuid string `json:"jobUuid,omitempty"`
+
 	// Labels: 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,
diff --git a/dataproc/v1beta2/dataproc-api.json b/dataproc/v1beta2/dataproc-api.json
index 7db00bf..0847950 100644
--- a/dataproc/v1beta2/dataproc-api.json
+++ b/dataproc/v1beta2/dataproc-api.json
@@ -1629,7 +1629,7 @@
       }
     }
   },
-  "revision": "20181019",
+  "revision": "20181114",
   "rootUrl": "https://dataproc.googleapis.com/",
   "schemas": {
     "AcceleratorConfig": {
@@ -1648,6 +1648,39 @@
       },
       "type": "object"
     },
+    "AllocationAffinity": {
+      "description": "Allocation Affinity for consuming Zonal allocation.",
+      "id": "AllocationAffinity",
+      "properties": {
+        "consumeAllocationType": {
+          "enum": [
+            "TYPE_UNSPECIFIED",
+            "NO_ALLOCATION",
+            "ANY_ALLOCATION",
+            "SPECIFIC_ALLOCATION"
+          ],
+          "enumDescriptions": [
+            "",
+            "Do not consume from any allocated capacity.",
+            "Consume any allocation available.",
+            "Must consume from a specific allocation. Must specify key value fields for specifying the allocations."
+          ],
+          "type": "string"
+        },
+        "key": {
+          "description": "Corresponds to the label key of Allocation resource.",
+          "type": "string"
+        },
+        "values": {
+          "description": "Corresponds to the label values of allocation resource.",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
     "Binding": {
       "description": "Associates members with a role.",
       "id": "Binding",
@@ -2043,6 +2076,10 @@
       "description": "Common config settings for resources of Compute Engine cluster instances, applicable to all instances in the cluster.",
       "id": "GceClusterConfig",
       "properties": {
+        "allocationAffinity": {
+          "$ref": "AllocationAffinity",
+          "description": "Allocation Affinity for consuming Zonal allocation."
+        },
         "internalIpOnly": {
           "description": "Optional. If true, all instances in the cluster 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 internal_ip_only 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"
@@ -2284,6 +2321,10 @@
           "$ref": "HiveJob",
           "description": "Job is a Hive job."
         },
+        "jobUuid": {
+          "description": "Output only. A UUID that uniquely identifies a job within the project over time. This is in contrast to a user-settable reference.job_id that may be reused over time.",
+          "type": "string"
+        },
         "labels": {
           "additionalProperties": {
             "type": "string"
@@ -2315,6 +2356,10 @@
           "$ref": "SparkJob",
           "description": "Job is a Spark job."
         },
+        "sparkRJob": {
+          "$ref": "SparkRJob",
+          "description": "Job is a SparkR job."
+        },
         "sparkSqlJob": {
           "$ref": "SparkSqlJob",
           "description": "Job is a SparkSql job."
@@ -2330,6 +2375,10 @@
           },
           "type": "array"
         },
+        "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"
+        },
         "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.",
           "items": {
@@ -2974,6 +3023,49 @@
       },
       "type": "object"
     },
+    "SparkRJob": {
+      "description": "A Cloud Dataproc job for running Apache SparkR (https://spark.apache.org/docs/latest/sparkr.html) applications on YARN.",
+      "id": "SparkRJob",
+      "properties": {
+        "archiveUris": {
+          "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.",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        },
+        "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.",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        },
+        "fileUris": {
+          "description": "Optional. HCFS URIs of files to be copied to the working directory of R drivers and distributed tasks. Useful for naively parallel tasks.",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        },
+        "loggingConfig": {
+          "$ref": "LoggingConfig",
+          "description": "Optional. The runtime log config for job execution."
+        },
+        "mainRFileUri": {
+          "description": "Required. The HCFS URI of the main R file to use as the driver. Must be a .R file.",
+          "type": "string"
+        },
+        "properties": {
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "Optional. A mapping of property names to values, used to configure SparkR. 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"
+        }
+      },
+      "type": "object"
+    },
     "SparkSqlJob": {
       "description": "A Cloud Dataproc job for running Apache Spark SQL (http://spark.apache.org/sql/) queries.",
       "id": "SparkSqlJob",
diff --git a/dataproc/v1beta2/dataproc-gen.go b/dataproc/v1beta2/dataproc-gen.go
index 3b1d0de..5687463 100644
--- a/dataproc/v1beta2/dataproc-gen.go
+++ b/dataproc/v1beta2/dataproc-gen.go
@@ -225,6 +225,48 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// AllocationAffinity: Allocation Affinity for consuming Zonal
+// allocation.
+type AllocationAffinity struct {
+	// Possible values:
+	//   "TYPE_UNSPECIFIED"
+	//   "NO_ALLOCATION" - Do not consume from any allocated capacity.
+	//   "ANY_ALLOCATION" - Consume any allocation available.
+	//   "SPECIFIC_ALLOCATION" - Must consume from a specific allocation.
+	// Must specify key value fields for specifying the allocations.
+	ConsumeAllocationType string `json:"consumeAllocationType,omitempty"`
+
+	// Key: Corresponds to the label key of Allocation resource.
+	Key string `json:"key,omitempty"`
+
+	// Values: Corresponds to the label values of allocation resource.
+	Values []string `json:"values,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g.
+	// "ConsumeAllocationType") 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. "ConsumeAllocationType") 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 *AllocationAffinity) MarshalJSON() ([]byte, error) {
+	type NoMethod AllocationAffinity
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // Binding: Associates members with a role.
 type Binding struct {
 	// Condition: Unimplemented. The condition that is associated with this
@@ -858,6 +900,10 @@
 // GceClusterConfig: Common config settings for resources of Compute
 // Engine cluster instances, applicable to all instances in the cluster.
 type GceClusterConfig struct {
+	// AllocationAffinity: Allocation Affinity for consuming Zonal
+	// allocation.
+	AllocationAffinity *AllocationAffinity `json:"allocationAffinity,omitempty"`
+
 	// InternalIpOnly: Optional. If true, all instances in the cluster will
 	// only have internal IP addresses. By default, clusters are not
 	// restricted to internal IP addresses, and will have ephemeral external
@@ -943,15 +989,15 @@
 	// us-central1-f
 	ZoneUri string `json:"zoneUri,omitempty"`
 
-	// ForceSendFields is a list of field names (e.g. "InternalIpOnly") to
-	// unconditionally include in API requests. By default, fields with
+	// ForceSendFields is a list of field names (e.g. "AllocationAffinity")
+	// 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. "InternalIpOnly") to
+	// NullFields is a list of field names (e.g. "AllocationAffinity") 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
@@ -1236,6 +1282,11 @@
 	// HiveJob: Job is a Hive job.
 	HiveJob *HiveJob `json:"hiveJob,omitempty"`
 
+	// JobUuid: Output only. A UUID that uniquely identifies a job within
+	// the project over time. This is in contrast to a user-settable
+	// reference.job_id that may be reused over time.
+	JobUuid string `json:"jobUuid,omitempty"`
+
 	// Labels: 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,
@@ -1266,6 +1317,9 @@
 	// SparkJob: Job is a Spark job.
 	SparkJob *SparkJob `json:"sparkJob,omitempty"`
 
+	// SparkRJob: Job is a SparkR job.
+	SparkRJob *SparkRJob `json:"sparkRJob,omitempty"`
+
 	// SparkSqlJob: Job is a SparkSql job.
 	SparkSqlJob *SparkSqlJob `json:"sparkSqlJob,omitempty"`
 
@@ -1277,6 +1331,11 @@
 	// StatusHistory: Output only. The previous job status.
 	StatusHistory []*JobStatus `json:"statusHistory,omitempty"`
 
+	// SubmittedBy: Output only. The email address of the user submitting
+	// the job. For jobs submitted on the cluster, the address is
+	// <code>username@hostname</code>.
+	SubmittedBy string `json:"submittedBy,omitempty"`
+
 	// YarnApplications: 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.
@@ -2412,6 +2471,61 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// SparkRJob: A Cloud Dataproc job for running Apache SparkR
+// (https://spark.apache.org/docs/latest/sparkr.html) applications on
+// YARN.
+type SparkRJob struct {
+	// ArchiveUris: 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.
+	ArchiveUris []string `json:"archiveUris,omitempty"`
+
+	// Args: 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.
+	Args []string `json:"args,omitempty"`
+
+	// FileUris: Optional. HCFS URIs of files to be copied to the working
+	// directory of R drivers and distributed tasks. Useful for naively
+	// parallel tasks.
+	FileUris []string `json:"fileUris,omitempty"`
+
+	// LoggingConfig: Optional. The runtime log config for job execution.
+	LoggingConfig *LoggingConfig `json:"loggingConfig,omitempty"`
+
+	// MainRFileUri: Required. The HCFS URI of the main R file to use as the
+	// driver. Must be a .R file.
+	MainRFileUri string `json:"mainRFileUri,omitempty"`
+
+	// Properties: Optional. A mapping of property names to values, used to
+	// configure SparkR. 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.
+	Properties map[string]string `json:"properties,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ArchiveUris") 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. "ArchiveUris") 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 *SparkRJob) MarshalJSON() ([]byte, error) {
+	type NoMethod SparkRJob
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // SparkSqlJob: A Cloud Dataproc job for running Apache Spark SQL
 // (http://spark.apache.org/sql/) queries.
 type SparkSqlJob struct {
diff --git a/dialogflow/v2/dialogflow-api.json b/dialogflow/v2/dialogflow-api.json
index 5510e8e..42f8603 100644
--- a/dialogflow/v2/dialogflow-api.json
+++ b/dialogflow/v2/dialogflow-api.json
@@ -1082,7 +1082,7 @@
                       ],
                       "parameters": {
                         "name": {
-                          "description": "Required. The unique identifier of the context. Format:\n`projects/\u003cProject ID\u003e/agent/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`.",
+                          "description": "Required. The unique identifier of the context. Format:\n`projects/\u003cProject ID\u003e/agent/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`.\n\nThe `Context ID` is always converted to lowercase, may only contain\ncharacters in [a-zA-Z0-9_-%] and may be at most 250 bytes long.",
                           "location": "path",
                           "pattern": "^projects/[^/]+/agent/sessions/[^/]+/contexts/[^/]+$",
                           "required": true,
@@ -1303,7 +1303,7 @@
       }
     }
   },
-  "revision": "20181022",
+  "revision": "20181116",
   "rootUrl": "https://dialogflow.googleapis.com/",
   "schemas": {
     "GoogleCloudDialogflowV2Agent": {
@@ -1552,7 +1552,7 @@
           "type": "integer"
         },
         "name": {
-          "description": "Required. The unique identifier of the context. Format:\n`projects/\u003cProject ID\u003e/agent/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`.",
+          "description": "Required. The unique identifier of the context. Format:\n`projects/\u003cProject ID\u003e/agent/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`.\n\nThe `Context ID` is always converted to lowercase, may only contain\ncharacters in [a-zA-Z0-9_-%] and may be at most 250 bytes long.",
           "type": "string"
         },
         "parameters": {
@@ -2886,7 +2886,7 @@
           "type": "integer"
         },
         "name": {
-          "description": "Required. The unique identifier of the context. Format:\n`projects/\u003cProject ID\u003e/agent/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`,\nor `projects/\u003cProject ID\u003e/agent/environments/\u003cEnvironment ID\u003e/users/\u003cUser\nID\u003e/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`. The `Context ID` is\nalways converted to lowercase. If `Environment ID` is not specified, we\nassume default 'draft' environment. If `User ID` is not specified, we\nassume default '-' user.",
+          "description": "Required. The unique identifier of the context. Format:\n`projects/\u003cProject ID\u003e/agent/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`,\nor `projects/\u003cProject ID\u003e/agent/environments/\u003cEnvironment ID\u003e/users/\u003cUser\nID\u003e/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`.\n\nThe `Context ID` is always converted to lowercase, may only contain\ncharacters in a-zA-Z0-9_-% and may be at most 250 bytes long.\n\nIf `Environment ID` is not specified, we assume default 'draft'\nenvironment. If `User ID` is not specified, we assume default '-' user.",
           "type": "string"
         },
         "parameters": {
diff --git a/dialogflow/v2/dialogflow-gen.go b/dialogflow/v2/dialogflow-gen.go
index 5bce498..2168cb4 100644
--- a/dialogflow/v2/dialogflow-gen.go
+++ b/dialogflow/v2/dialogflow-gen.go
@@ -692,6 +692,10 @@
 	// Format:
 	// `projects/<Project ID>/agent/sessions/<Session ID>/contexts/<Context
 	// ID>`.
+	//
+	// The `Context ID` is always converted to lowercase, may only
+	// contain
+	// characters in [a-zA-Z0-9_-%] and may be at most 250 bytes long.
 	Name string `json:"name,omitempty"`
 
 	// Parameters: Optional. The collection of parameters associated with
@@ -3375,13 +3379,16 @@
 	// ID>`,
 	// or `projects/<Project ID>/agent/environments/<Environment
 	// ID>/users/<User
-	// ID>/sessions/<Session ID>/contexts/<Context ID>`. The `Context ID`
-	// is
-	// always converted to lowercase. If `Environment ID` is not specified,
-	// we
-	// assume default 'draft' environment. If `User ID` is not specified,
-	// we
-	// assume default '-' user.
+	// ID>/sessions/<Session ID>/contexts/<Context ID>`.
+	//
+	// The `Context ID` is always converted to lowercase, may only
+	// contain
+	// characters in a-zA-Z0-9_-% and may be at most 250 bytes long.
+	//
+	// If `Environment ID` is not specified, we assume default
+	// 'draft'
+	// environment. If `User ID` is not specified, we assume default '-'
+	// user.
 	Name string `json:"name,omitempty"`
 
 	// Parameters: Optional. The collection of parameters associated with
@@ -10661,7 +10668,7 @@
 	//   ],
 	//   "parameters": {
 	//     "name": {
-	//       "description": "Required. The unique identifier of the context. Format:\n`projects/\u003cProject ID\u003e/agent/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`.",
+	//       "description": "Required. The unique identifier of the context. Format:\n`projects/\u003cProject ID\u003e/agent/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`.\n\nThe `Context ID` is always converted to lowercase, may only contain\ncharacters in [a-zA-Z0-9_-%] and may be at most 250 bytes long.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]+/agent/sessions/[^/]+/contexts/[^/]+$",
 	//       "required": true,
diff --git a/dialogflow/v2beta1/dialogflow-api.json b/dialogflow/v2beta1/dialogflow-api.json
index 34fdf05..c5c15d4 100644
--- a/dialogflow/v2beta1/dialogflow-api.json
+++ b/dialogflow/v2beta1/dialogflow-api.json
@@ -815,7 +815,7 @@
                               ],
                               "parameters": {
                                 "name": {
-                                  "description": "Required. The unique identifier of the context. Format:\n`projects/\u003cProject ID\u003e/agent/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`,\nor `projects/\u003cProject ID\u003e/agent/environments/\u003cEnvironment ID\u003e/users/\u003cUser\nID\u003e/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`. The `Context ID` is\nalways converted to lowercase. If `Environment ID` is not specified, we\nassume default 'draft' environment. If `User ID` is not specified, we\nassume default '-' user.",
+                                  "description": "Required. The unique identifier of the context. Format:\n`projects/\u003cProject ID\u003e/agent/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`,\nor `projects/\u003cProject ID\u003e/agent/environments/\u003cEnvironment ID\u003e/users/\u003cUser\nID\u003e/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`.\n\nThe `Context ID` is always converted to lowercase, may only contain\ncharacters in a-zA-Z0-9_-% and may be at most 250 bytes long.\n\nIf `Environment ID` is not specified, we assume default 'draft'\nenvironment. If `User ID` is not specified, we assume default '-' user.",
                                   "location": "path",
                                   "pattern": "^projects/[^/]+/agent/environments/[^/]+/users/[^/]+/sessions/[^/]+/contexts/[^/]+$",
                                   "required": true,
@@ -1716,7 +1716,7 @@
                       ],
                       "parameters": {
                         "name": {
-                          "description": "Required. The unique identifier of the context. Format:\n`projects/\u003cProject ID\u003e/agent/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`,\nor `projects/\u003cProject ID\u003e/agent/environments/\u003cEnvironment ID\u003e/users/\u003cUser\nID\u003e/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`. The `Context ID` is\nalways converted to lowercase. If `Environment ID` is not specified, we\nassume default 'draft' environment. If `User ID` is not specified, we\nassume default '-' user.",
+                          "description": "Required. The unique identifier of the context. Format:\n`projects/\u003cProject ID\u003e/agent/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`,\nor `projects/\u003cProject ID\u003e/agent/environments/\u003cEnvironment ID\u003e/users/\u003cUser\nID\u003e/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`.\n\nThe `Context ID` is always converted to lowercase, may only contain\ncharacters in a-zA-Z0-9_-% and may be at most 250 bytes long.\n\nIf `Environment ID` is not specified, we assume default 'draft'\nenvironment. If `User ID` is not specified, we assume default '-' user.",
                           "location": "path",
                           "pattern": "^projects/[^/]+/agent/sessions/[^/]+/contexts/[^/]+$",
                           "required": true,
@@ -2068,7 +2068,7 @@
                           ],
                           "parameters": {
                             "name": {
-                              "description": "Required. The unique identifier of the context. Format:\n`projects/\u003cProject ID\u003e/agent/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`,\nor `projects/\u003cProject ID\u003e/agent/environments/\u003cEnvironment ID\u003e/users/\u003cUser\nID\u003e/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`. The `Context ID` is\nalways converted to lowercase. If `Environment ID` is not specified, we\nassume default 'draft' environment. If `User ID` is not specified, we\nassume default '-' user.",
+                              "description": "Required. The unique identifier of the context. Format:\n`projects/\u003cProject ID\u003e/agent/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`,\nor `projects/\u003cProject ID\u003e/agent/environments/\u003cEnvironment ID\u003e/users/\u003cUser\nID\u003e/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`.\n\nThe `Context ID` is always converted to lowercase, may only contain\ncharacters in a-zA-Z0-9_-% and may be at most 250 bytes long.\n\nIf `Environment ID` is not specified, we assume default 'draft'\nenvironment. If `User ID` is not specified, we assume default '-' user.",
                               "location": "path",
                               "pattern": "^projects/[^/]+/environments/[^/]+/users/[^/]+/conversations/[^/]+/contexts/[^/]+$",
                               "required": true,
@@ -2385,7 +2385,7 @@
       }
     }
   },
-  "revision": "20181022",
+  "revision": "20181116",
   "rootUrl": "https://dialogflow.googleapis.com/",
   "schemas": {
     "GoogleCloudDialogflowV2BatchUpdateEntityTypesResponse": {
@@ -2426,7 +2426,7 @@
           "type": "integer"
         },
         "name": {
-          "description": "Required. The unique identifier of the context. Format:\n`projects/\u003cProject ID\u003e/agent/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`.",
+          "description": "Required. The unique identifier of the context. Format:\n`projects/\u003cProject ID\u003e/agent/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`.\n\nThe `Context ID` is always converted to lowercase, may only contain\ncharacters in [a-zA-Z0-9_-%] and may be at most 250 bytes long.",
           "type": "string"
         },
         "parameters": {
@@ -3608,7 +3608,7 @@
           "type": "integer"
         },
         "name": {
-          "description": "Required. The unique identifier of the context. Format:\n`projects/\u003cProject ID\u003e/agent/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`,\nor `projects/\u003cProject ID\u003e/agent/environments/\u003cEnvironment ID\u003e/users/\u003cUser\nID\u003e/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`. The `Context ID` is\nalways converted to lowercase. If `Environment ID` is not specified, we\nassume default 'draft' environment. If `User ID` is not specified, we\nassume default '-' user.",
+          "description": "Required. The unique identifier of the context. Format:\n`projects/\u003cProject ID\u003e/agent/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`,\nor `projects/\u003cProject ID\u003e/agent/environments/\u003cEnvironment ID\u003e/users/\u003cUser\nID\u003e/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`.\n\nThe `Context ID` is always converted to lowercase, may only contain\ncharacters in a-zA-Z0-9_-% and may be at most 250 bytes long.\n\nIf `Environment ID` is not specified, we assume default 'draft'\nenvironment. If `User ID` is not specified, we assume default '-' user.",
           "type": "string"
         },
         "parameters": {
diff --git a/dialogflow/v2beta1/dialogflow-gen.go b/dialogflow/v2beta1/dialogflow-gen.go
index 570fc2f..dc985ac 100644
--- a/dialogflow/v2beta1/dialogflow-gen.go
+++ b/dialogflow/v2beta1/dialogflow-gen.go
@@ -429,6 +429,10 @@
 	// Format:
 	// `projects/<Project ID>/agent/sessions/<Session ID>/contexts/<Context
 	// ID>`.
+	//
+	// The `Context ID` is always converted to lowercase, may only
+	// contain
+	// characters in [a-zA-Z0-9_-%] and may be at most 250 bytes long.
 	Name string `json:"name,omitempty"`
 
 	// Parameters: Optional. The collection of parameters associated with
@@ -2697,13 +2701,16 @@
 	// ID>`,
 	// or `projects/<Project ID>/agent/environments/<Environment
 	// ID>/users/<User
-	// ID>/sessions/<Session ID>/contexts/<Context ID>`. The `Context ID`
-	// is
-	// always converted to lowercase. If `Environment ID` is not specified,
-	// we
-	// assume default 'draft' environment. If `User ID` is not specified,
-	// we
-	// assume default '-' user.
+	// ID>/sessions/<Session ID>/contexts/<Context ID>`.
+	//
+	// The `Context ID` is always converted to lowercase, may only
+	// contain
+	// characters in a-zA-Z0-9_-% and may be at most 250 bytes long.
+	//
+	// If `Environment ID` is not specified, we assume default
+	// 'draft'
+	// environment. If `User ID` is not specified, we assume default '-'
+	// user.
 	Name string `json:"name,omitempty"`
 
 	// Parameters: Optional. The collection of parameters associated with
@@ -10151,7 +10158,7 @@
 	//   ],
 	//   "parameters": {
 	//     "name": {
-	//       "description": "Required. The unique identifier of the context. Format:\n`projects/\u003cProject ID\u003e/agent/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`,\nor `projects/\u003cProject ID\u003e/agent/environments/\u003cEnvironment ID\u003e/users/\u003cUser\nID\u003e/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`. The `Context ID` is\nalways converted to lowercase. If `Environment ID` is not specified, we\nassume default 'draft' environment. If `User ID` is not specified, we\nassume default '-' user.",
+	//       "description": "Required. The unique identifier of the context. Format:\n`projects/\u003cProject ID\u003e/agent/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`,\nor `projects/\u003cProject ID\u003e/agent/environments/\u003cEnvironment ID\u003e/users/\u003cUser\nID\u003e/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`.\n\nThe `Context ID` is always converted to lowercase, may only contain\ncharacters in a-zA-Z0-9_-% and may be at most 250 bytes long.\n\nIf `Environment ID` is not specified, we assume default 'draft'\nenvironment. If `User ID` is not specified, we assume default '-' user.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]+/agent/environments/[^/]+/users/[^/]+/sessions/[^/]+/contexts/[^/]+$",
 	//       "required": true,
@@ -14413,7 +14420,7 @@
 	//   ],
 	//   "parameters": {
 	//     "name": {
-	//       "description": "Required. The unique identifier of the context. Format:\n`projects/\u003cProject ID\u003e/agent/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`,\nor `projects/\u003cProject ID\u003e/agent/environments/\u003cEnvironment ID\u003e/users/\u003cUser\nID\u003e/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`. The `Context ID` is\nalways converted to lowercase. If `Environment ID` is not specified, we\nassume default 'draft' environment. If `User ID` is not specified, we\nassume default '-' user.",
+	//       "description": "Required. The unique identifier of the context. Format:\n`projects/\u003cProject ID\u003e/agent/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`,\nor `projects/\u003cProject ID\u003e/agent/environments/\u003cEnvironment ID\u003e/users/\u003cUser\nID\u003e/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`.\n\nThe `Context ID` is always converted to lowercase, may only contain\ncharacters in a-zA-Z0-9_-% and may be at most 250 bytes long.\n\nIf `Environment ID` is not specified, we assume default 'draft'\nenvironment. If `User ID` is not specified, we assume default '-' user.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]+/agent/sessions/[^/]+/contexts/[^/]+$",
 	//       "required": true,
@@ -16080,7 +16087,7 @@
 	//   ],
 	//   "parameters": {
 	//     "name": {
-	//       "description": "Required. The unique identifier of the context. Format:\n`projects/\u003cProject ID\u003e/agent/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`,\nor `projects/\u003cProject ID\u003e/agent/environments/\u003cEnvironment ID\u003e/users/\u003cUser\nID\u003e/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`. The `Context ID` is\nalways converted to lowercase. If `Environment ID` is not specified, we\nassume default 'draft' environment. If `User ID` is not specified, we\nassume default '-' user.",
+	//       "description": "Required. The unique identifier of the context. Format:\n`projects/\u003cProject ID\u003e/agent/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`,\nor `projects/\u003cProject ID\u003e/agent/environments/\u003cEnvironment ID\u003e/users/\u003cUser\nID\u003e/sessions/\u003cSession ID\u003e/contexts/\u003cContext ID\u003e`.\n\nThe `Context ID` is always converted to lowercase, may only contain\ncharacters in a-zA-Z0-9_-% and may be at most 250 bytes long.\n\nIf `Environment ID` is not specified, we assume default 'draft'\nenvironment. If `User ID` is not specified, we assume default '-' user.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]+/environments/[^/]+/users/[^/]+/conversations/[^/]+/contexts/[^/]+$",
 	//       "required": true,
diff --git a/dlp/v2/dlp-api.json b/dlp/v2/dlp-api.json
index b9740d8..54ca868 100644
--- a/dlp/v2/dlp-api.json
+++ b/dlp/v2/dlp-api.json
@@ -1486,7 +1486,7 @@
       }
     }
   },
-  "revision": "20181030",
+  "revision": "20181121",
   "rootUrl": "https://dlp.googleapis.com/",
   "schemas": {
     "GooglePrivacyDlpV2Action": {
@@ -4794,7 +4794,7 @@
         },
         "infoType": {
           "$ref": "GooglePrivacyDlpV2InfoType",
-          "description": "Set if the transformation was limited to a specific info_type."
+          "description": "Set if the transformation was limited to a specific InfoType."
         },
         "recordSuppress": {
           "$ref": "GooglePrivacyDlpV2RecordSuppression",
diff --git a/dlp/v2/dlp-gen.go b/dlp/v2/dlp-gen.go
index ed96088..233a7a3 100644
--- a/dlp/v2/dlp-gen.go
+++ b/dlp/v2/dlp-gen.go
@@ -6962,7 +6962,7 @@
 	FieldTransformations []*GooglePrivacyDlpV2FieldTransformation `json:"fieldTransformations,omitempty"`
 
 	// InfoType: Set if the transformation was limited to a specific
-	// info_type.
+	// InfoType.
 	InfoType *GooglePrivacyDlpV2InfoType `json:"infoType,omitempty"`
 
 	// RecordSuppress: The specific suppression option these stats apply to.
diff --git a/dns/v1beta2/dns-api.json b/dns/v1beta2/dns-api.json
index 69f0450..0ba0e3d 100644
--- a/dns/v1beta2/dns-api.json
+++ b/dns/v1beta2/dns-api.json
@@ -23,7 +23,7 @@
   "description": "Configures and serves authoritative DNS records.",
   "discoveryVersion": "v1",
   "documentationLink": "https://developers.google.com/cloud-dns",
-  "etag": "\"J3WqvAcMk4eQjJXvfSI4Yr8VouA/HVdRWYMYTooJOMx6OboAhJKcHz0\"",
+  "etag": "\"J3WqvAcMk4eQjJXvfSI4Yr8VouA/tjeOYqIojF-Ch7P-2UE6XgpQAfQ\"",
   "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"
@@ -666,6 +666,228 @@
         }
       }
     },
+    "policies": {
+      "methods": {
+        "create": {
+          "description": "Create a new Policy",
+          "httpMethod": "POST",
+          "id": "dns.policies.create",
+          "parameterOrder": [
+            "project"
+          ],
+          "parameters": {
+            "clientOperationId": {
+              "description": "For mutating operation requests only. An optional identifier specified by the client. Must be unique for operation resources in the Operations collection.",
+              "location": "query",
+              "type": "string"
+            },
+            "project": {
+              "description": "Identifies the project addressed by this request.",
+              "location": "path",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "path": "{project}/policies",
+          "request": {
+            "$ref": "Policy"
+          },
+          "response": {
+            "$ref": "Policy"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/ndev.clouddns.readwrite"
+          ]
+        },
+        "delete": {
+          "description": "Delete a previously created Policy. Will fail if the policy is still being referenced by a network.",
+          "httpMethod": "DELETE",
+          "id": "dns.policies.delete",
+          "parameterOrder": [
+            "project",
+            "policy"
+          ],
+          "parameters": {
+            "clientOperationId": {
+              "description": "For mutating operation requests only. An optional identifier specified by the client. Must be unique for operation resources in the Operations collection.",
+              "location": "query",
+              "type": "string"
+            },
+            "policy": {
+              "description": "User given friendly name of the policy addressed by this request.",
+              "location": "path",
+              "required": true,
+              "type": "string"
+            },
+            "project": {
+              "description": "Identifies the project addressed by this request.",
+              "location": "path",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "path": "{project}/policies/{policy}",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/ndev.clouddns.readwrite"
+          ]
+        },
+        "get": {
+          "description": "Fetch the representation of an existing Policy.",
+          "httpMethod": "GET",
+          "id": "dns.policies.get",
+          "parameterOrder": [
+            "project",
+            "policy"
+          ],
+          "parameters": {
+            "clientOperationId": {
+              "description": "For mutating operation requests only. An optional identifier specified by the client. Must be unique for operation resources in the Operations collection.",
+              "location": "query",
+              "type": "string"
+            },
+            "policy": {
+              "description": "User given friendly name of the policy addressed by this request.",
+              "location": "path",
+              "required": true,
+              "type": "string"
+            },
+            "project": {
+              "description": "Identifies the project addressed by this request.",
+              "location": "path",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "path": "{project}/policies/{policy}",
+          "response": {
+            "$ref": "Policy"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only",
+            "https://www.googleapis.com/auth/ndev.clouddns.readonly",
+            "https://www.googleapis.com/auth/ndev.clouddns.readwrite"
+          ]
+        },
+        "list": {
+          "description": "Enumerate all Policies associated with a project.",
+          "httpMethod": "GET",
+          "id": "dns.policies.list",
+          "parameterOrder": [
+            "project"
+          ],
+          "parameters": {
+            "maxResults": {
+              "description": "Optional. Maximum number of results to be returned. If unspecified, the server will decide how many results to return.",
+              "format": "int32",
+              "location": "query",
+              "type": "integer"
+            },
+            "pageToken": {
+              "description": "Optional. A tag returned by a previous list request that was truncated. Use this parameter to continue a previous list request.",
+              "location": "query",
+              "type": "string"
+            },
+            "project": {
+              "description": "Identifies the project addressed by this request.",
+              "location": "path",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "path": "{project}/policies",
+          "response": {
+            "$ref": "PoliciesListResponse"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only",
+            "https://www.googleapis.com/auth/ndev.clouddns.readonly",
+            "https://www.googleapis.com/auth/ndev.clouddns.readwrite"
+          ]
+        },
+        "patch": {
+          "description": "Apply a partial update to an existing Policy.",
+          "httpMethod": "PATCH",
+          "id": "dns.policies.patch",
+          "parameterOrder": [
+            "project",
+            "policy"
+          ],
+          "parameters": {
+            "clientOperationId": {
+              "description": "For mutating operation requests only. An optional identifier specified by the client. Must be unique for operation resources in the Operations collection.",
+              "location": "query",
+              "type": "string"
+            },
+            "policy": {
+              "description": "User given friendly name of the policy addressed by this request.",
+              "location": "path",
+              "required": true,
+              "type": "string"
+            },
+            "project": {
+              "description": "Identifies the project addressed by this request.",
+              "location": "path",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "path": "{project}/policies/{policy}",
+          "request": {
+            "$ref": "Policy"
+          },
+          "response": {
+            "$ref": "PoliciesPatchResponse"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/ndev.clouddns.readwrite"
+          ]
+        },
+        "update": {
+          "description": "Update an existing Policy.",
+          "httpMethod": "PUT",
+          "id": "dns.policies.update",
+          "parameterOrder": [
+            "project",
+            "policy"
+          ],
+          "parameters": {
+            "clientOperationId": {
+              "description": "For mutating operation requests only. An optional identifier specified by the client. Must be unique for operation resources in the Operations collection.",
+              "location": "query",
+              "type": "string"
+            },
+            "policy": {
+              "description": "User given friendly name of the policy addressed by this request.",
+              "location": "path",
+              "required": true,
+              "type": "string"
+            },
+            "project": {
+              "description": "Identifies the project addressed by this request.",
+              "location": "path",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "path": "{project}/policies/{policy}",
+          "request": {
+            "$ref": "Policy"
+          },
+          "response": {
+            "$ref": "PoliciesUpdateResponse"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/ndev.clouddns.readwrite"
+          ]
+        }
+      }
+    },
     "projects": {
       "methods": {
         "get": {
@@ -760,7 +982,7 @@
       }
     }
   },
-  "revision": "20181015",
+  "revision": "20181115",
   "rootUrl": "https://www.googleapis.com/",
   "schemas": {
     "Change": {
@@ -1035,6 +1257,10 @@
           "$ref": "ManagedZoneDnsSecConfig",
           "description": "DNSSEC configuration."
         },
+        "forwardingConfig": {
+          "$ref": "ManagedZoneForwardingConfig",
+          "description": "The presence for this field indicates that outbound forwarding is enabled for this zone. The value of this field contains the set of destinations to forward to."
+        },
         "id": {
           "description": "Unique identifier for the resource; defined by the server (output only)",
           "format": "uint64",
@@ -1130,6 +1356,39 @@
       },
       "type": "object"
     },
+    "ManagedZoneForwardingConfig": {
+      "id": "ManagedZoneForwardingConfig",
+      "properties": {
+        "kind": {
+          "default": "dns#managedZoneForwardingConfig",
+          "description": "Identifies what kind of resource this is. Value: the fixed string \"dns#managedZoneForwardingConfig\".",
+          "type": "string"
+        },
+        "targetNameServers": {
+          "description": "List of target name servers to forward to. Cloud DNS will select the best available name server if more than one target is given.",
+          "items": {
+            "$ref": "ManagedZoneForwardingConfigNameServerTarget"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "ManagedZoneForwardingConfigNameServerTarget": {
+      "id": "ManagedZoneForwardingConfigNameServerTarget",
+      "properties": {
+        "ipv4Address": {
+          "description": "IPv4 address of a target name server.",
+          "type": "string"
+        },
+        "kind": {
+          "default": "dns#managedZoneForwardingConfigNameServerTarget",
+          "description": "Identifies what kind of resource this is. Value: the fixed string \"dns#managedZoneForwardingConfigNameServerTarget\".",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "ManagedZoneOperationsListResponse": {
       "id": "ManagedZoneOperationsListResponse",
       "properties": {
@@ -1289,6 +1548,143 @@
       },
       "type": "object"
     },
+    "PoliciesListResponse": {
+      "id": "PoliciesListResponse",
+      "properties": {
+        "header": {
+          "$ref": "ResponseHeader"
+        },
+        "kind": {
+          "default": "dns#policiesListResponse",
+          "description": "Type of resource.",
+          "type": "string"
+        },
+        "nextPageToken": {
+          "description": "The presence of this field indicates that there exist more results following your last page of results in pagination order. To fetch them, make another list request using this value as your page token.\n\nIn this way you can retrieve the complete contents of even very large collections one page at a time. However, if the contents of the collection change between the first and last paginated list request, the set of all elements returned will be an inconsistent view of the collection. There is no way to retrieve a consistent snapshot of a collection larger than the maximum page size.",
+          "type": "string"
+        },
+        "policies": {
+          "description": "The policy resources.",
+          "items": {
+            "$ref": "Policy"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "PoliciesPatchResponse": {
+      "id": "PoliciesPatchResponse",
+      "properties": {
+        "header": {
+          "$ref": "ResponseHeader"
+        },
+        "policy": {
+          "$ref": "Policy"
+        }
+      },
+      "type": "object"
+    },
+    "PoliciesUpdateResponse": {
+      "id": "PoliciesUpdateResponse",
+      "properties": {
+        "header": {
+          "$ref": "ResponseHeader"
+        },
+        "policy": {
+          "$ref": "Policy"
+        }
+      },
+      "type": "object"
+    },
+    "Policy": {
+      "description": "A policy is a collection of rules applied to one or more networks that specify forwarding behavior for that network.",
+      "id": "Policy",
+      "properties": {
+        "alternativeNameServerConfig": {
+          "$ref": "PolicyAlternativeNameServerConfig",
+          "description": "Sets an alternative name server for the associated networks. When specified, all DNS queries are forwarded to a name server that you choose. Names such as .internal are not available when an alternative name server is specified."
+        },
+        "description": {
+          "description": "A mutable string of at most 1024 characters associated with this resource for the user's convenience. Has no effect on the policy's function.",
+          "type": "string"
+        },
+        "enableInboundForwarding": {
+          "description": "Allows networks bound to this policy to receive DNS queries sent by VMs or applications over VPN connections. When enabled, a virtual IP address will be allocated from each of the sub-networks that are bound to this policy.",
+          "type": "boolean"
+        },
+        "id": {
+          "description": "Unique identifier for the resource; defined by the server (output only).",
+          "format": "uint64",
+          "type": "string"
+        },
+        "kind": {
+          "default": "dns#policy",
+          "description": "Identifies what kind of resource this is. Value: the fixed string \"dns#policy\".",
+          "type": "string"
+        },
+        "name": {
+          "description": "User assigned name for this policy.",
+          "type": "string"
+        },
+        "networks": {
+          "description": "List of network names specifying networks to which this policy is applied.",
+          "items": {
+            "$ref": "PolicyNetwork"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "PolicyAlternativeNameServerConfig": {
+      "id": "PolicyAlternativeNameServerConfig",
+      "properties": {
+        "kind": {
+          "default": "dns#policyAlternativeNameServerConfig",
+          "description": "Identifies what kind of resource this is. Value: the fixed string \"dns#policyAlternativeNameServerConfig\".",
+          "type": "string"
+        },
+        "targetNameServers": {
+          "description": "Sets an alternative name server for the associated networks. When specified, all DNS queries are forwarded to a name server that you choose. Names such as .internal are not available when an alternative name server is specified.",
+          "items": {
+            "$ref": "PolicyAlternativeNameServerConfigTargetNameServer"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "PolicyAlternativeNameServerConfigTargetNameServer": {
+      "id": "PolicyAlternativeNameServerConfigTargetNameServer",
+      "properties": {
+        "ipv4Address": {
+          "description": "IPv4 address to forward to.",
+          "type": "string"
+        },
+        "kind": {
+          "default": "dns#policyAlternativeNameServerConfigTargetNameServer",
+          "description": "Identifies what kind of resource this is. Value: the fixed string \"dns#policyAlternativeNameServerConfigTargetNameServer\".",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "PolicyNetwork": {
+      "id": "PolicyNetwork",
+      "properties": {
+        "kind": {
+          "default": "dns#policyNetwork",
+          "description": "Identifies what kind of resource this is. Value: the fixed string \"dns#policyNetwork\".",
+          "type": "string"
+        },
+        "networkUrl": {
+          "description": "The fully qualified URL of the GCE private network to bind to. This should be formatted like https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network}",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "Project": {
       "description": "A project resource. The project is a top level container for resources including Cloud DNS ManagedZones. Projects can be created only in the APIs console.",
       "id": "Project",
@@ -1343,6 +1739,16 @@
           "format": "int32",
           "type": "integer"
         },
+        "networksPerPolicy": {
+          "description": "Maximum allowed number of networks per policy.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "policies": {
+          "description": "Maximum allowed number of policies per project.",
+          "format": "int32",
+          "type": "integer"
+        },
         "resourceRecordsPerRrset": {
           "description": "Maximum allowed number of ResourceRecords per ResourceRecordSet.",
           "format": "int32",
@@ -1363,6 +1769,16 @@
           "format": "int32",
           "type": "integer"
         },
+        "targetNameServersPerManagedZone": {
+          "description": "Maximum allowed number of target name servers per managed forwarding zone.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "targetNameServersPerPolicy": {
+          "description": "Maximum allowed number of alternative target name servers per policy.",
+          "format": "int32",
+          "type": "integer"
+        },
         "totalRrdataSizePerChange": {
           "description": "Maximum allowed size for total rrdata in one ChangesCreateRequest in bytes.",
           "format": "int32",
diff --git a/dns/v1beta2/dns-gen.go b/dns/v1beta2/dns-gen.go
index ee830ae..a8cb3c3 100644
--- a/dns/v1beta2/dns-gen.go
+++ b/dns/v1beta2/dns-gen.go
@@ -84,6 +84,7 @@
 	s.DnsKeys = NewDnsKeysService(s)
 	s.ManagedZoneOperations = NewManagedZoneOperationsService(s)
 	s.ManagedZones = NewManagedZonesService(s)
+	s.Policies = NewPoliciesService(s)
 	s.Projects = NewProjectsService(s)
 	s.ResourceRecordSets = NewResourceRecordSetsService(s)
 	return s, nil
@@ -102,6 +103,8 @@
 
 	ManagedZones *ManagedZonesService
 
+	Policies *PoliciesService
+
 	Projects *ProjectsService
 
 	ResourceRecordSets *ResourceRecordSetsService
@@ -150,6 +153,15 @@
 	s *Service
 }
 
+func NewPoliciesService(s *Service) *PoliciesService {
+	rs := &PoliciesService{s: s}
+	return rs
+}
+
+type PoliciesService struct {
+	s *Service
+}
+
 func NewProjectsService(s *Service) *ProjectsService {
 	rs := &ProjectsService{s: s}
 	return rs
@@ -535,6 +547,11 @@
 	// DnssecConfig: DNSSEC configuration.
 	DnssecConfig *ManagedZoneDnsSecConfig `json:"dnssecConfig,omitempty"`
 
+	// ForwardingConfig: The presence for this field indicates that outbound
+	// forwarding is enabled for this zone. The value of this field contains
+	// the set of destinations to forward to.
+	ForwardingConfig *ManagedZoneForwardingConfig `json:"forwardingConfig,omitempty"`
+
 	// Id: Unique identifier for the resource; defined by the server (output
 	// only)
 	Id uint64 `json:"id,omitempty,string"`
@@ -650,6 +667,70 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+type ManagedZoneForwardingConfig struct {
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "dns#managedZoneForwardingConfig".
+	Kind string `json:"kind,omitempty"`
+
+	// TargetNameServers: List of target name servers to forward to. Cloud
+	// DNS will select the best available name server if more than one
+	// target is given.
+	TargetNameServers []*ManagedZoneForwardingConfigNameServerTarget `json:"targetNameServers,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 *ManagedZoneForwardingConfig) MarshalJSON() ([]byte, error) {
+	type NoMethod ManagedZoneForwardingConfig
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type ManagedZoneForwardingConfigNameServerTarget struct {
+	// Ipv4Address: IPv4 address of a target name server.
+	Ipv4Address string `json:"ipv4Address,omitempty"`
+
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "dns#managedZoneForwardingConfigNameServerTarget".
+	Kind string `json:"kind,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Ipv4Address") 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. "Ipv4Address") 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 *ManagedZoneForwardingConfigNameServerTarget) MarshalJSON() ([]byte, error) {
+	type NoMethod ManagedZoneForwardingConfigNameServerTarget
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 type ManagedZoneOperationsListResponse struct {
 	Header *ResponseHeader `json:"header,omitempty"`
 
@@ -945,6 +1026,281 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+type PoliciesListResponse struct {
+	Header *ResponseHeader `json:"header,omitempty"`
+
+	// Kind: Type of resource.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: The presence of this field indicates that there exist
+	// more results following your last page of results in pagination order.
+	// To fetch them, make another list request using this value as your
+	// page token.
+	//
+	// In this way you can retrieve the complete contents of even very large
+	// collections one page at a time. However, if the contents of the
+	// collection change between the first and last paginated list request,
+	// the set of all elements returned will be an inconsistent view of the
+	// collection. There is no way to retrieve a consistent snapshot of a
+	// collection larger than the maximum page size.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// Policies: The policy resources.
+	Policies []*Policy `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. "Header") 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. "Header") 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 *PoliciesListResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod PoliciesListResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type PoliciesPatchResponse struct {
+	Header *ResponseHeader `json:"header,omitempty"`
+
+	Policy *Policy `json:"policy,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Header") 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. "Header") 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 *PoliciesPatchResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod PoliciesPatchResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type PoliciesUpdateResponse struct {
+	Header *ResponseHeader `json:"header,omitempty"`
+
+	Policy *Policy `json:"policy,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Header") 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. "Header") 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 *PoliciesUpdateResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod PoliciesUpdateResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Policy: A policy is a collection of rules applied to one or more
+// networks that specify forwarding behavior for that network.
+type Policy struct {
+	// AlternativeNameServerConfig: Sets an alternative name server for the
+	// associated networks. When specified, all DNS queries are forwarded to
+	// a name server that you choose. Names such as .internal are not
+	// available when an alternative name server is specified.
+	AlternativeNameServerConfig *PolicyAlternativeNameServerConfig `json:"alternativeNameServerConfig,omitempty"`
+
+	// Description: A mutable string of at most 1024 characters associated
+	// with this resource for the user's convenience. Has no effect on the
+	// policy's function.
+	Description string `json:"description,omitempty"`
+
+	// EnableInboundForwarding: Allows networks bound to this policy to
+	// receive DNS queries sent by VMs or applications over VPN connections.
+	// When enabled, a virtual IP address will be allocated from each of the
+	// sub-networks that are bound to this policy.
+	EnableInboundForwarding bool `json:"enableInboundForwarding,omitempty"`
+
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	Id uint64 `json:"id,omitempty,string"`
+
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "dns#policy".
+	Kind string `json:"kind,omitempty"`
+
+	// Name: User assigned name for this policy.
+	Name string `json:"name,omitempty"`
+
+	// Networks: List of network names specifying networks to which this
+	// policy is applied.
+	Networks []*PolicyNetwork `json:"networks,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g.
+	// "AlternativeNameServerConfig") 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.
+	// "AlternativeNameServerConfig") 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)
+}
+
+type PolicyAlternativeNameServerConfig struct {
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "dns#policyAlternativeNameServerConfig".
+	Kind string `json:"kind,omitempty"`
+
+	// TargetNameServers: Sets an alternative name server for the associated
+	// networks. When specified, all DNS queries are forwarded to a name
+	// server that you choose. Names such as .internal are not available
+	// when an alternative name server is specified.
+	TargetNameServers []*PolicyAlternativeNameServerConfigTargetNameServer `json:"targetNameServers,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 *PolicyAlternativeNameServerConfig) MarshalJSON() ([]byte, error) {
+	type NoMethod PolicyAlternativeNameServerConfig
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type PolicyAlternativeNameServerConfigTargetNameServer struct {
+	// Ipv4Address: IPv4 address to forward to.
+	Ipv4Address string `json:"ipv4Address,omitempty"`
+
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "dns#policyAlternativeNameServerConfigTargetNameServer".
+	Kind string `json:"kind,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Ipv4Address") 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. "Ipv4Address") 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 *PolicyAlternativeNameServerConfigTargetNameServer) MarshalJSON() ([]byte, error) {
+	type NoMethod PolicyAlternativeNameServerConfigTargetNameServer
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type PolicyNetwork struct {
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "dns#policyNetwork".
+	Kind string `json:"kind,omitempty"`
+
+	// NetworkUrl: The fully qualified URL of the GCE private network to
+	// bind to. This should be formatted like
+	// https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network}
+	NetworkUrl string `json:"networkUrl,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 *PolicyNetwork) MarshalJSON() ([]byte, error) {
+	type NoMethod PolicyNetwork
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // Project: A project resource. The project is a top level container for
 // resources including Cloud DNS ManagedZones. Projects can be created
 // only in the APIs console.
@@ -1011,6 +1367,12 @@
 	// privately scoped zone can be attached.
 	NetworksPerManagedZone int64 `json:"networksPerManagedZone,omitempty"`
 
+	// NetworksPerPolicy: Maximum allowed number of networks per policy.
+	NetworksPerPolicy int64 `json:"networksPerPolicy,omitempty"`
+
+	// Policies: Maximum allowed number of policies per project.
+	Policies int64 `json:"policies,omitempty"`
+
 	// ResourceRecordsPerRrset: Maximum allowed number of ResourceRecords
 	// per ResourceRecordSet.
 	ResourceRecordsPerRrset int64 `json:"resourceRecordsPerRrset,omitempty"`
@@ -1027,6 +1389,14 @@
 	// per zone in the project.
 	RrsetsPerManagedZone int64 `json:"rrsetsPerManagedZone,omitempty"`
 
+	// TargetNameServersPerManagedZone: Maximum allowed number of target
+	// name servers per managed forwarding zone.
+	TargetNameServersPerManagedZone int64 `json:"targetNameServersPerManagedZone,omitempty"`
+
+	// TargetNameServersPerPolicy: Maximum allowed number of alternative
+	// target name servers per policy.
+	TargetNameServersPerPolicy int64 `json:"targetNameServersPerPolicy,omitempty"`
+
 	// TotalRrdataSizePerChange: Maximum allowed size for total rrdata in
 	// one ChangesCreateRequest in bytes.
 	TotalRrdataSizePerChange int64 `json:"totalRrdataSizePerChange,omitempty"`
@@ -3550,6 +3920,967 @@
 
 }
 
+// method id "dns.policies.create":
+
+type PoliciesCreateCall struct {
+	s          *Service
+	project    string
+	policy     *Policy
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// Create: Create a new Policy
+func (r *PoliciesService) Create(project string, policy *Policy) *PoliciesCreateCall {
+	c := &PoliciesCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.project = project
+	c.policy = policy
+	return c
+}
+
+// ClientOperationId sets the optional parameter "clientOperationId":
+// For mutating operation requests only. An optional identifier
+// specified by the client. Must be unique for operation resources in
+// the Operations collection.
+func (c *PoliciesCreateCall) ClientOperationId(clientOperationId string) *PoliciesCreateCall {
+	c.urlParams_.Set("clientOperationId", clientOperationId)
+	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 *PoliciesCreateCall) Fields(s ...googleapi.Field) *PoliciesCreateCall {
+	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 *PoliciesCreateCall) Context(ctx context.Context) *PoliciesCreateCall {
+	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 *PoliciesCreateCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *PoliciesCreateCall) 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.policy)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/policies")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"project": c.project,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "dns.policies.create" 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 *PoliciesCreateCall) 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 := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Create a new Policy",
+	//   "httpMethod": "POST",
+	//   "id": "dns.policies.create",
+	//   "parameterOrder": [
+	//     "project"
+	//   ],
+	//   "parameters": {
+	//     "clientOperationId": {
+	//       "description": "For mutating operation requests only. An optional identifier specified by the client. Must be unique for operation resources in the Operations collection.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "project": {
+	//       "description": "Identifies the project addressed by this request.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/policies",
+	//   "request": {
+	//     "$ref": "Policy"
+	//   },
+	//   "response": {
+	//     "$ref": "Policy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/ndev.clouddns.readwrite"
+	//   ]
+	// }
+
+}
+
+// method id "dns.policies.delete":
+
+type PoliciesDeleteCall struct {
+	s          *Service
+	project    string
+	policy     string
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// Delete: Delete a previously created Policy. Will fail if the policy
+// is still being referenced by a network.
+func (r *PoliciesService) Delete(project string, policy string) *PoliciesDeleteCall {
+	c := &PoliciesDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.project = project
+	c.policy = policy
+	return c
+}
+
+// ClientOperationId sets the optional parameter "clientOperationId":
+// For mutating operation requests only. An optional identifier
+// specified by the client. Must be unique for operation resources in
+// the Operations collection.
+func (c *PoliciesDeleteCall) ClientOperationId(clientOperationId string) *PoliciesDeleteCall {
+	c.urlParams_.Set("clientOperationId", clientOperationId)
+	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 *PoliciesDeleteCall) Fields(s ...googleapi.Field) *PoliciesDeleteCall {
+	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 *PoliciesDeleteCall) Context(ctx context.Context) *PoliciesDeleteCall {
+	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 *PoliciesDeleteCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *PoliciesDeleteCall) 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)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/policies/{policy}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("DELETE", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"project": c.project,
+		"policy":  c.policy,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "dns.policies.delete" call.
+func (c *PoliciesDeleteCall) 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 previously created Policy. Will fail if the policy is still being referenced by a network.",
+	//   "httpMethod": "DELETE",
+	//   "id": "dns.policies.delete",
+	//   "parameterOrder": [
+	//     "project",
+	//     "policy"
+	//   ],
+	//   "parameters": {
+	//     "clientOperationId": {
+	//       "description": "For mutating operation requests only. An optional identifier specified by the client. Must be unique for operation resources in the Operations collection.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "policy": {
+	//       "description": "User given friendly name of the policy addressed by this request.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "project": {
+	//       "description": "Identifies the project addressed by this request.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/policies/{policy}",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/ndev.clouddns.readwrite"
+	//   ]
+	// }
+
+}
+
+// method id "dns.policies.get":
+
+type PoliciesGetCall struct {
+	s            *Service
+	project      string
+	policy       string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// Get: Fetch the representation of an existing Policy.
+func (r *PoliciesService) Get(project string, policy string) *PoliciesGetCall {
+	c := &PoliciesGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.project = project
+	c.policy = policy
+	return c
+}
+
+// ClientOperationId sets the optional parameter "clientOperationId":
+// For mutating operation requests only. An optional identifier
+// specified by the client. Must be unique for operation resources in
+// the Operations collection.
+func (c *PoliciesGetCall) ClientOperationId(clientOperationId string) *PoliciesGetCall {
+	c.urlParams_.Set("clientOperationId", clientOperationId)
+	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 *PoliciesGetCall) Fields(s ...googleapi.Field) *PoliciesGetCall {
+	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 *PoliciesGetCall) IfNoneMatch(entityTag string) *PoliciesGetCall {
+	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 *PoliciesGetCall) Context(ctx context.Context) *PoliciesGetCall {
+	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 *PoliciesGetCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *PoliciesGetCall) 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)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/policies/{policy}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"project": c.project,
+		"policy":  c.policy,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "dns.policies.get" 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 *PoliciesGetCall) 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 := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Fetch the representation of an existing Policy.",
+	//   "httpMethod": "GET",
+	//   "id": "dns.policies.get",
+	//   "parameterOrder": [
+	//     "project",
+	//     "policy"
+	//   ],
+	//   "parameters": {
+	//     "clientOperationId": {
+	//       "description": "For mutating operation requests only. An optional identifier specified by the client. Must be unique for operation resources in the Operations collection.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "policy": {
+	//       "description": "User given friendly name of the policy addressed by this request.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "project": {
+	//       "description": "Identifies the project addressed by this request.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/policies/{policy}",
+	//   "response": {
+	//     "$ref": "Policy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-platform.read-only",
+	//     "https://www.googleapis.com/auth/ndev.clouddns.readonly",
+	//     "https://www.googleapis.com/auth/ndev.clouddns.readwrite"
+	//   ]
+	// }
+
+}
+
+// method id "dns.policies.list":
+
+type PoliciesListCall struct {
+	s            *Service
+	project      string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// List: Enumerate all Policies associated with a project.
+func (r *PoliciesService) List(project string) *PoliciesListCall {
+	c := &PoliciesListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.project = project
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": Maximum number
+// of results to be returned. If unspecified, the server will decide how
+// many results to return.
+func (c *PoliciesListCall) MaxResults(maxResults int64) *PoliciesListCall {
+	c.urlParams_.Set("maxResults", fmt.Sprint(maxResults))
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": A tag returned by
+// a previous list request that was truncated. Use this parameter to
+// continue a previous list request.
+func (c *PoliciesListCall) PageToken(pageToken string) *PoliciesListCall {
+	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 *PoliciesListCall) Fields(s ...googleapi.Field) *PoliciesListCall {
+	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 *PoliciesListCall) IfNoneMatch(entityTag string) *PoliciesListCall {
+	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 *PoliciesListCall) Context(ctx context.Context) *PoliciesListCall {
+	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 *PoliciesListCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *PoliciesListCall) 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)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/policies")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"project": c.project,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "dns.policies.list" call.
+// Exactly one of *PoliciesListResponse or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *PoliciesListResponse.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 *PoliciesListCall) Do(opts ...googleapi.CallOption) (*PoliciesListResponse, 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 := &PoliciesListResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Enumerate all Policies associated with a project.",
+	//   "httpMethod": "GET",
+	//   "id": "dns.policies.list",
+	//   "parameterOrder": [
+	//     "project"
+	//   ],
+	//   "parameters": {
+	//     "maxResults": {
+	//       "description": "Optional. Maximum number of results to be returned. If unspecified, the server will decide how many results to return.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Optional. A tag returned by a previous list request that was truncated. Use this parameter to continue a previous list request.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "project": {
+	//       "description": "Identifies the project addressed by this request.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/policies",
+	//   "response": {
+	//     "$ref": "PoliciesListResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-platform.read-only",
+	//     "https://www.googleapis.com/auth/ndev.clouddns.readonly",
+	//     "https://www.googleapis.com/auth/ndev.clouddns.readwrite"
+	//   ]
+	// }
+
+}
+
+// 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 *PoliciesListCall) Pages(ctx context.Context, f func(*PoliciesListResponse) 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 "dns.policies.patch":
+
+type PoliciesPatchCall struct {
+	s          *Service
+	project    string
+	policy     string
+	policy2    *Policy
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// Patch: Apply a partial update to an existing Policy.
+func (r *PoliciesService) Patch(project string, policy string, policy2 *Policy) *PoliciesPatchCall {
+	c := &PoliciesPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.project = project
+	c.policy = policy
+	c.policy2 = policy2
+	return c
+}
+
+// ClientOperationId sets the optional parameter "clientOperationId":
+// For mutating operation requests only. An optional identifier
+// specified by the client. Must be unique for operation resources in
+// the Operations collection.
+func (c *PoliciesPatchCall) ClientOperationId(clientOperationId string) *PoliciesPatchCall {
+	c.urlParams_.Set("clientOperationId", clientOperationId)
+	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 *PoliciesPatchCall) Fields(s ...googleapi.Field) *PoliciesPatchCall {
+	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 *PoliciesPatchCall) Context(ctx context.Context) *PoliciesPatchCall {
+	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 *PoliciesPatchCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *PoliciesPatchCall) 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.policy2)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/policies/{policy}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("PATCH", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"project": c.project,
+		"policy":  c.policy,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "dns.policies.patch" call.
+// Exactly one of *PoliciesPatchResponse or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *PoliciesPatchResponse.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 *PoliciesPatchCall) Do(opts ...googleapi.CallOption) (*PoliciesPatchResponse, 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 := &PoliciesPatchResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Apply a partial update to an existing Policy.",
+	//   "httpMethod": "PATCH",
+	//   "id": "dns.policies.patch",
+	//   "parameterOrder": [
+	//     "project",
+	//     "policy"
+	//   ],
+	//   "parameters": {
+	//     "clientOperationId": {
+	//       "description": "For mutating operation requests only. An optional identifier specified by the client. Must be unique for operation resources in the Operations collection.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "policy": {
+	//       "description": "User given friendly name of the policy addressed by this request.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "project": {
+	//       "description": "Identifies the project addressed by this request.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/policies/{policy}",
+	//   "request": {
+	//     "$ref": "Policy"
+	//   },
+	//   "response": {
+	//     "$ref": "PoliciesPatchResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/ndev.clouddns.readwrite"
+	//   ]
+	// }
+
+}
+
+// method id "dns.policies.update":
+
+type PoliciesUpdateCall struct {
+	s          *Service
+	project    string
+	policy     string
+	policy2    *Policy
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// Update: Update an existing Policy.
+func (r *PoliciesService) Update(project string, policy string, policy2 *Policy) *PoliciesUpdateCall {
+	c := &PoliciesUpdateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.project = project
+	c.policy = policy
+	c.policy2 = policy2
+	return c
+}
+
+// ClientOperationId sets the optional parameter "clientOperationId":
+// For mutating operation requests only. An optional identifier
+// specified by the client. Must be unique for operation resources in
+// the Operations collection.
+func (c *PoliciesUpdateCall) ClientOperationId(clientOperationId string) *PoliciesUpdateCall {
+	c.urlParams_.Set("clientOperationId", clientOperationId)
+	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 *PoliciesUpdateCall) Fields(s ...googleapi.Field) *PoliciesUpdateCall {
+	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 *PoliciesUpdateCall) Context(ctx context.Context) *PoliciesUpdateCall {
+	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 *PoliciesUpdateCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *PoliciesUpdateCall) 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.policy2)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/policies/{policy}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("PUT", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"project": c.project,
+		"policy":  c.policy,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "dns.policies.update" call.
+// Exactly one of *PoliciesUpdateResponse or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *PoliciesUpdateResponse.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 *PoliciesUpdateCall) Do(opts ...googleapi.CallOption) (*PoliciesUpdateResponse, 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 := &PoliciesUpdateResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Update an existing Policy.",
+	//   "httpMethod": "PUT",
+	//   "id": "dns.policies.update",
+	//   "parameterOrder": [
+	//     "project",
+	//     "policy"
+	//   ],
+	//   "parameters": {
+	//     "clientOperationId": {
+	//       "description": "For mutating operation requests only. An optional identifier specified by the client. Must be unique for operation resources in the Operations collection.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "policy": {
+	//       "description": "User given friendly name of the policy addressed by this request.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "project": {
+	//       "description": "Identifies the project addressed by this request.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/policies/{policy}",
+	//   "request": {
+	//     "$ref": "Policy"
+	//   },
+	//   "response": {
+	//     "$ref": "PoliciesUpdateResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/ndev.clouddns.readwrite"
+	//   ]
+	// }
+
+}
+
 // method id "dns.projects.get":
 
 type ProjectsGetCall struct {
diff --git a/driveactivity/v2/driveactivity-api.json b/driveactivity/v2/driveactivity-api.json
new file mode 100644
index 0000000..c3ffdc1
--- /dev/null
+++ b/driveactivity/v2/driveactivity-api.json
@@ -0,0 +1,1112 @@
+{
+  "auth": {
+    "oauth2": {
+      "scopes": {
+        "https://www.googleapis.com/auth/drive.activity": {
+          "description": "View and add to the activity record of files in your Google Drive"
+        },
+        "https://www.googleapis.com/auth/drive.activity.readonly": {
+          "description": "View the activity record of files in your Google Drive"
+        }
+      }
+    }
+  },
+  "basePath": "",
+  "baseUrl": "https://driveactivity.googleapis.com/",
+  "batchPath": "batch",
+  "canonicalName": "Drive Activity",
+  "description": "Provides a historical view of activity in Google Drive.",
+  "discoveryVersion": "v1",
+  "documentationLink": "https://developers.google.com/drive/activity/",
+  "fullyEncodeReservedExpansion": true,
+  "icons": {
+    "x16": "http://www.google.com/images/icons/product/search-16.gif",
+    "x32": "http://www.google.com/images/icons/product/search-32.gif"
+  },
+  "id": "driveactivity:v2",
+  "kind": "discovery#restDescription",
+  "name": "driveactivity",
+  "ownerDomain": "google.com",
+  "ownerName": "Google",
+  "parameters": {
+    "$.xgafv": {
+      "description": "V1 error format.",
+      "enum": [
+        "1",
+        "2"
+      ],
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
+      "location": "query",
+      "type": "string"
+    },
+    "access_token": {
+      "description": "OAuth access token.",
+      "location": "query",
+      "type": "string"
+    },
+    "alt": {
+      "default": "json",
+      "description": "Data format for response.",
+      "enum": [
+        "json",
+        "media",
+        "proto"
+      ],
+      "enumDescriptions": [
+        "Responses with Content-Type of application/json",
+        "Media download with context-dependent Content-Type",
+        "Responses with Content-Type of application/x-protobuf"
+      ],
+      "location": "query",
+      "type": "string"
+    },
+    "callback": {
+      "description": "JSONP",
+      "location": "query",
+      "type": "string"
+    },
+    "fields": {
+      "description": "Selector specifying which fields to include in a partial response.",
+      "location": "query",
+      "type": "string"
+    },
+    "key": {
+      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+      "location": "query",
+      "type": "string"
+    },
+    "oauth_token": {
+      "description": "OAuth 2.0 token for the current user.",
+      "location": "query",
+      "type": "string"
+    },
+    "prettyPrint": {
+      "default": "true",
+      "description": "Returns response with indentations and line breaks.",
+      "location": "query",
+      "type": "boolean"
+    },
+    "quotaUser": {
+      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+      "location": "query",
+      "type": "string"
+    },
+    "uploadType": {
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+      "location": "query",
+      "type": "string"
+    },
+    "upload_protocol": {
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "location": "query",
+      "type": "string"
+    }
+  },
+  "protocol": "rest",
+  "resources": {
+    "activity": {
+      "methods": {
+        "query": {
+          "description": "Query past activity in Google Drive.",
+          "flatPath": "v2/activity:query",
+          "httpMethod": "POST",
+          "id": "driveactivity.activity.query",
+          "parameterOrder": [],
+          "parameters": {},
+          "path": "v2/activity:query",
+          "request": {
+            "$ref": "QueryDriveActivityRequest"
+          },
+          "response": {
+            "$ref": "QueryDriveActivityResponse"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/drive.activity",
+            "https://www.googleapis.com/auth/drive.activity.readonly"
+          ]
+        }
+      }
+    }
+  },
+  "revision": "20181128",
+  "rootUrl": "https://driveactivity.googleapis.com/",
+  "schemas": {
+    "Action": {
+      "description": "Information about the action.",
+      "id": "Action",
+      "properties": {
+        "actor": {
+          "$ref": "Actor",
+          "description": "The actor responsible for this action (or empty if all actors are\nresponsible)."
+        },
+        "detail": {
+          "$ref": "ActionDetail",
+          "description": "The type and detailed information about the action."
+        },
+        "target": {
+          "$ref": "Target",
+          "description": "The target this action affects (or empty if affecting all targets). This\nrepresents the state of the target immediately after this action occurred."
+        },
+        "timeRange": {
+          "$ref": "TimeRange",
+          "description": "The action occurred over this time range."
+        },
+        "timestamp": {
+          "description": "The action occurred at this specific time.",
+          "format": "google-datetime",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "ActionDetail": {
+      "description": "Data describing the type and additional information of an action.",
+      "id": "ActionDetail",
+      "properties": {
+        "comment": {
+          "$ref": "Comment",
+          "description": "A change about comments was made."
+        },
+        "create": {
+          "$ref": "Create",
+          "description": "An object was created."
+        },
+        "delete": {
+          "$ref": "Delete",
+          "description": "An object was deleted."
+        },
+        "dlpChange": {
+          "$ref": "DataLeakPreventionChange",
+          "description": "A change happened in data leak prevention status."
+        },
+        "edit": {
+          "$ref": "Edit",
+          "description": "An object was edited."
+        },
+        "move": {
+          "$ref": "Move",
+          "description": "An object was moved."
+        },
+        "permissionChange": {
+          "$ref": "PermissionChange",
+          "description": "The permission on an object was changed."
+        },
+        "reference": {
+          "$ref": "ApplicationReference",
+          "description": "An object was referenced in an application outside of Drive/Docs."
+        },
+        "rename": {
+          "$ref": "Rename",
+          "description": "An object was renamed."
+        },
+        "restore": {
+          "$ref": "Restore",
+          "description": "A deleted object was restored."
+        },
+        "settingsChange": {
+          "$ref": "SettingsChange",
+          "description": "Settings were changed."
+        }
+      },
+      "type": "object"
+    },
+    "Actor": {
+      "description": "The actor of a Drive activity.",
+      "id": "Actor",
+      "properties": {
+        "administrator": {
+          "$ref": "Administrator",
+          "description": "An administrator."
+        },
+        "anonymous": {
+          "$ref": "AnonymousUser",
+          "description": "An anonymous user."
+        },
+        "impersonation": {
+          "$ref": "Impersonation",
+          "description": "An account acting on behalf of another."
+        },
+        "system": {
+          "$ref": "SystemEvent",
+          "description": "A non-user actor (i.e. system triggered)."
+        },
+        "user": {
+          "$ref": "User",
+          "description": "An end user."
+        }
+      },
+      "type": "object"
+    },
+    "Administrator": {
+      "description": "Empty message representing an administrator.",
+      "id": "Administrator",
+      "properties": {},
+      "type": "object"
+    },
+    "AnonymousUser": {
+      "description": "Empty message representing an anonymous user or indicating the authenticated\nuser should be anonymized.",
+      "id": "AnonymousUser",
+      "properties": {},
+      "type": "object"
+    },
+    "Anyone": {
+      "description": "Represents any user (including a logged out user).",
+      "id": "Anyone",
+      "properties": {},
+      "type": "object"
+    },
+    "ApplicationReference": {
+      "description": "Activity in applications other than Drive.",
+      "id": "ApplicationReference",
+      "properties": {
+        "type": {
+          "description": "The reference type corresponding to this event.",
+          "enum": [
+            "UNSPECIFIED_REFERENCE_TYPE",
+            "LINK",
+            "DISCUSS"
+          ],
+          "enumDescriptions": [
+            "The type is not available.",
+            "The links of one or more Drive items were posted.",
+            "Comments were made regarding a Drive item."
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "Assignment": {
+      "description": "A comment with an assignment.",
+      "id": "Assignment",
+      "properties": {
+        "subtype": {
+          "description": "The sub-type of this event.",
+          "enum": [
+            "SUBTYPE_UNSPECIFIED",
+            "ADDED",
+            "DELETED",
+            "REPLY_ADDED",
+            "REPLY_DELETED",
+            "RESOLVED",
+            "REOPENED",
+            "REASSIGNED"
+          ],
+          "enumDescriptions": [
+            "Subtype not available.",
+            "An assignment was added.",
+            "An assignment was deleted.",
+            "An assignment reply was added.",
+            "An assignment reply was deleted.",
+            "An assignment was resolved.",
+            "A resolved assignment was reopened.",
+            "An assignment was reassigned."
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "Comment": {
+      "description": "A change about comments on an object.",
+      "id": "Comment",
+      "properties": {
+        "assignment": {
+          "$ref": "Assignment",
+          "description": "A change on an assignment."
+        },
+        "mentionedUsers": {
+          "description": "Users who are mentioned in this comment.",
+          "items": {
+            "$ref": "User"
+          },
+          "type": "array"
+        },
+        "post": {
+          "$ref": "Post",
+          "description": "A change on a regular posted comment."
+        },
+        "suggestion": {
+          "$ref": "Suggestion",
+          "description": "A change on a suggestion."
+        }
+      },
+      "type": "object"
+    },
+    "ConsolidationStrategy": {
+      "description": "How the individual activities are consolidated. A set of activities may be\nconsolidated into one combined activity if they are related in some way, such\nas one actor performing the same action on multiple targets, or multiple\nactors performing the same action on a single target. The strategy defines\nthe rules for which activities are related.",
+      "id": "ConsolidationStrategy",
+      "properties": {
+        "legacy": {
+          "$ref": "Legacy",
+          "description": "The individual activities are consolidated using the legacy strategy."
+        },
+        "none": {
+          "$ref": "NoConsolidation",
+          "description": "The individual activities are not consolidated."
+        }
+      },
+      "type": "object"
+    },
+    "Copy": {
+      "description": "An object was created by copying an existing object.",
+      "id": "Copy",
+      "properties": {
+        "originalObject": {
+          "$ref": "TargetReference",
+          "description": "The the original object."
+        }
+      },
+      "type": "object"
+    },
+    "Create": {
+      "description": "An object was created.",
+      "id": "Create",
+      "properties": {
+        "copy": {
+          "$ref": "Copy",
+          "description": "If present, indicates the object was created by copying an existing Drive\nobject."
+        },
+        "new": {
+          "$ref": "New",
+          "description": "If present, indicates the object was newly created (e.g. as a blank\ndocument), not derived from a Drive object or external object."
+        },
+        "upload": {
+          "$ref": "Upload",
+          "description": "If present, indicates the object originated externally and was uploaded\nto Drive."
+        }
+      },
+      "type": "object"
+    },
+    "DataLeakPreventionChange": {
+      "description": "A change in the object's data leak prevention status.",
+      "id": "DataLeakPreventionChange",
+      "properties": {
+        "type": {
+          "description": "The type of Data Leak Prevention (DLP) change.",
+          "enum": [
+            "TYPE_UNSPECIFIED",
+            "FLAGGED",
+            "CLEARED"
+          ],
+          "enumDescriptions": [
+            "An update to the DLP state that is neither FLAGGED or CLEARED.",
+            "Document has been flagged as containing sensitive content.",
+            "Document is no longer flagged as containing sensitive content."
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "Delete": {
+      "description": "An object was deleted.",
+      "id": "Delete",
+      "properties": {
+        "type": {
+          "description": "The type of delete action taken.",
+          "enum": [
+            "TYPE_UNSPECIFIED",
+            "TRASH",
+            "PERMANENT_DELETE"
+          ],
+          "enumDescriptions": [
+            "Deletion type is not available.",
+            "An object was put into the trash.",
+            "An object was deleted permanently."
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "DeletedUser": {
+      "description": "A user whose account has since been deleted.",
+      "id": "DeletedUser",
+      "properties": {},
+      "type": "object"
+    },
+    "Domain": {
+      "description": "Information about a domain.",
+      "id": "Domain",
+      "properties": {
+        "legacyId": {
+          "description": "An opaque string used to identify this domain.",
+          "type": "string"
+        },
+        "name": {
+          "description": "The name of the domain, e.g. \"google.com\".",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "DriveActivity": {
+      "description": "A single Drive activity comprising one or more Actions by one or more\nActors on one or more Targets. Some Action groupings occur spontaneously,\nsuch as moving an item into a shared folder triggering a permission change.\nOther groupings of related Actions, such as multiple Actors editing one item\nor moving multiple files into a new folder, are controlled by the selection\nof a ConsolidationStrategy in the QueryDriveActivityRequest.",
+      "id": "DriveActivity",
+      "properties": {
+        "actions": {
+          "description": "Details on all actions in this activity.",
+          "items": {
+            "$ref": "Action"
+          },
+          "type": "array"
+        },
+        "actors": {
+          "description": "All actor(s) responsible for the activity.",
+          "items": {
+            "$ref": "Actor"
+          },
+          "type": "array"
+        },
+        "primaryActionDetail": {
+          "$ref": "ActionDetail",
+          "description": "Key information about the primary action for this activity. This is either\nrepresentative, or the most important, of all actions in the activity,\naccording to the ConsolidationStrategy in the request."
+        },
+        "targets": {
+          "description": "All Drive objects this activity is about (e.g. file, folder, Team Drive).\nThis represents the state of the target immediately after the actions\noccurred.",
+          "items": {
+            "$ref": "Target"
+          },
+          "type": "array"
+        },
+        "timeRange": {
+          "$ref": "TimeRange",
+          "description": "The activity occurred over this time range."
+        },
+        "timestamp": {
+          "description": "The activity occurred at this specific time.",
+          "format": "google-datetime",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "DriveItem": {
+      "description": "A Drive item, such as a file or folder.",
+      "id": "DriveItem",
+      "properties": {
+        "file": {
+          "$ref": "File",
+          "description": "The Drive item is a file."
+        },
+        "folder": {
+          "$ref": "Folder",
+          "description": "The Drive item is a folder."
+        },
+        "mimeType": {
+          "description": "The MIME type of the Drive item.  See\nhttps://developers.google.com/drive/v3/web/mime-types.",
+          "type": "string"
+        },
+        "name": {
+          "description": "The target Drive item. The format is \"items/ITEM_ID\".",
+          "type": "string"
+        },
+        "owner": {
+          "$ref": "Owner",
+          "description": "Information about the owner of this Drive item."
+        },
+        "title": {
+          "description": "The title of the Drive item.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "DriveItemReference": {
+      "description": "A lightweight reference to a Drive item, such as a file or folder.",
+      "id": "DriveItemReference",
+      "properties": {
+        "file": {
+          "$ref": "File",
+          "description": "The Drive item is a file."
+        },
+        "folder": {
+          "$ref": "Folder",
+          "description": "The Drive item is a folder."
+        },
+        "name": {
+          "description": "The target Drive item. The format is \"items/ITEM_ID\".",
+          "type": "string"
+        },
+        "title": {
+          "description": "The title of the Drive item.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "Edit": {
+      "description": "An empty message indicating an object was edited.",
+      "id": "Edit",
+      "properties": {},
+      "type": "object"
+    },
+    "File": {
+      "description": "A Drive item which is a file.",
+      "id": "File",
+      "properties": {},
+      "type": "object"
+    },
+    "FileComment": {
+      "description": "A comment on a file.",
+      "id": "FileComment",
+      "properties": {
+        "legacyCommentId": {
+          "description": "The comment in the discussion thread. This identifier is an opaque string\ncompatible with the Drive API; see\nhttps://developers.google.com/drive/v3/reference/comments/get",
+          "type": "string"
+        },
+        "legacyDiscussionId": {
+          "description": "The discussion thread to which the comment was added. This identifier is an\nopaque string compatible with the Drive API and references the first\ncomment in a discussion; see\nhttps://developers.google.com/drive/v3/reference/comments/get",
+          "type": "string"
+        },
+        "linkToDiscussion": {
+          "description": "The link to the discussion thread containing this comment, for example,\n\"https://docs.google.com/DOCUMENT_ID/edit?disco=THREAD_ID\".",
+          "type": "string"
+        },
+        "parent": {
+          "$ref": "DriveItem",
+          "description": "The Drive item containing this comment."
+        }
+      },
+      "type": "object"
+    },
+    "Folder": {
+      "description": "A Drive item which is a folder.",
+      "id": "Folder",
+      "properties": {
+        "type": {
+          "description": "The type of Drive folder.",
+          "enum": [
+            "TYPE_UNSPECIFIED",
+            "MY_DRIVE_ROOT",
+            "TEAM_DRIVE_ROOT",
+            "STANDARD_FOLDER"
+          ],
+          "enumDescriptions": [
+            "The folder type is unknown.",
+            "The folder is the root of a user's MyDrive.",
+            "The folder is the root of a Team Drive. Note that this folder is\na Drive item, and is a distinct entity from the Team Drive itself.",
+            "The folder is a standard, non-root, folder."
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "Group": {
+      "description": "Information about a group.",
+      "id": "Group",
+      "properties": {
+        "email": {
+          "description": "The email address of the group.",
+          "type": "string"
+        },
+        "title": {
+          "description": "The title of the group.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "Impersonation": {
+      "description": "Information about an impersonation, where an admin acts on behalf of an end\nuser. Information about the acting admin is not currently available.",
+      "id": "Impersonation",
+      "properties": {
+        "impersonatedUser": {
+          "$ref": "User",
+          "description": "The impersonated user."
+        }
+      },
+      "type": "object"
+    },
+    "KnownUser": {
+      "description": "A known user.",
+      "id": "KnownUser",
+      "properties": {
+        "isCurrentUser": {
+          "description": "True if this is the user making the request.",
+          "type": "boolean"
+        },
+        "personName": {
+          "description": "The identifier for this user that can be used with the People API to get\nmore information. The format is \"people/ACCOUNT_ID\". See\nhttps://developers.google.com/people/.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "Legacy": {
+      "description": "A strategy which consolidates activities using the grouping rules from the\nlegacy V1 Activity API. Similar actions occurring within a window of time\ncan be grouped across multiple targets (such as moving a set of files at\nonce) or multiple actors (such as several users editing the same item).\nGrouping rules for this strategy are specific to each type of action.",
+      "id": "Legacy",
+      "properties": {},
+      "type": "object"
+    },
+    "Move": {
+      "description": "An object was moved.",
+      "id": "Move",
+      "properties": {
+        "addedParents": {
+          "description": "The added parent object(s).",
+          "items": {
+            "$ref": "TargetReference"
+          },
+          "type": "array"
+        },
+        "removedParents": {
+          "description": "The removed parent object(s).",
+          "items": {
+            "$ref": "TargetReference"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "New": {
+      "description": "An object was created from scratch.",
+      "id": "New",
+      "properties": {},
+      "type": "object"
+    },
+    "NoConsolidation": {
+      "description": "A strategy which does no consolidation of individual activities.",
+      "id": "NoConsolidation",
+      "properties": {},
+      "type": "object"
+    },
+    "Owner": {
+      "description": "Information about the owner of a Drive item.",
+      "id": "Owner",
+      "properties": {
+        "domain": {
+          "$ref": "Domain",
+          "description": "The domain of the Drive item owner."
+        },
+        "teamDrive": {
+          "$ref": "TeamDriveReference",
+          "description": "The Team Drive that owns the Drive item."
+        },
+        "user": {
+          "$ref": "User",
+          "description": "The user that owns the Drive item."
+        }
+      },
+      "type": "object"
+    },
+    "Permission": {
+      "description": "The permission setting of an object.",
+      "id": "Permission",
+      "properties": {
+        "allowDiscovery": {
+          "description": "If true, the item can be discovered (e.g. in the user's \"Shared with me\"\ncollection) without needing a link to the item.",
+          "type": "boolean"
+        },
+        "anyone": {
+          "$ref": "Anyone",
+          "description": "If set, this permission applies to anyone, even logged out users."
+        },
+        "domain": {
+          "$ref": "Domain",
+          "description": "The domain to whom this permission applies."
+        },
+        "group": {
+          "$ref": "Group",
+          "description": "The group to whom this permission applies."
+        },
+        "role": {
+          "description": "Indicates the\n\u003ca href=\"/drive/web/manage-sharing#roles\"\u003eGoogle Drive permissions\nrole\u003c/a\u003e. The role determines a user's ability to read, write, and\ncomment on items.",
+          "enum": [
+            "ROLE_UNSPECIFIED",
+            "OWNER",
+            "ORGANIZER",
+            "FILE_ORGANIZER",
+            "EDITOR",
+            "COMMENTER",
+            "VIEWER",
+            "PUBLISHED_VIEWER"
+          ],
+          "enumDescriptions": [
+            "The role is not available.",
+            "A role granting full access.",
+            "A role granting the ability to manage people and settings.",
+            "A role granting the ability to contribute and manage content.",
+            "A role granting the ability to contribute content. This role is sometimes\nalso known as \"writer\".",
+            "A role granting the ability to view and comment on content.",
+            "A role granting the ability to view content. This role is sometimes also\nknown as \"reader\".",
+            "A role granting the ability to view content only after it has been\npublished to the web. This role is sometimes also known as \"published\nreader\". See https://support.google.com/sites/answer/6372880 for more\ninformation."
+          ],
+          "type": "string"
+        },
+        "user": {
+          "$ref": "User",
+          "description": "The user to whom this permission applies."
+        }
+      },
+      "type": "object"
+    },
+    "PermissionChange": {
+      "description": "A change of the permission setting on an item.",
+      "id": "PermissionChange",
+      "properties": {
+        "addedPermissions": {
+          "description": "The set of permissions added by this change.",
+          "items": {
+            "$ref": "Permission"
+          },
+          "type": "array"
+        },
+        "removedPermissions": {
+          "description": "The set of permissions removed by this change.",
+          "items": {
+            "$ref": "Permission"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "Post": {
+      "description": "A regular posted comment.",
+      "id": "Post",
+      "properties": {
+        "subtype": {
+          "description": "The sub-type of this event.",
+          "enum": [
+            "SUBTYPE_UNSPECIFIED",
+            "ADDED",
+            "DELETED",
+            "REPLY_ADDED",
+            "REPLY_DELETED",
+            "RESOLVED",
+            "REOPENED"
+          ],
+          "enumDescriptions": [
+            "Subtype not available.",
+            "A post was added.",
+            "A post was deleted.",
+            "A reply was added.",
+            "A reply was deleted.",
+            "A posted comment was resolved.",
+            "A posted comment was reopened."
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "QueryDriveActivityRequest": {
+      "description": "The request message for querying Drive activity.",
+      "id": "QueryDriveActivityRequest",
+      "properties": {
+        "ancestorName": {
+          "description": "Return activities for this Drive folder and all children and descendants.\nThe format is \"items/ITEM_ID\".",
+          "type": "string"
+        },
+        "consolidationStrategy": {
+          "$ref": "ConsolidationStrategy",
+          "description": "Details on how to consolidate related actions that make up the activity. If\nnot set, then related actions will not be consolidated."
+        },
+        "filter": {
+          "description": "The filtering for items returned from this query request. The format of the\nfilter string is a sequence of expressions, joined by an optional \"AND\",\nwhere each expression is of the form \"field operator value\".\n\nSupported fields:\n\n  - \u003ctt\u003etime\u003c/tt\u003e: Uses numerical operators on date values either in\n    terms of milliseconds since Jan 1, 1970 or in RFC 3339 format.\n    Examples:\n      - \u003ctt\u003etime \u003e 1452409200000 AND time \u003c= 1492812924310\u003c/tt\u003e\n      - \u003ctt\u003etime \u003e= \"2016-01-10T01:02:03-05:00\"\u003c/tt\u003e\n\n  - \u003ctt\u003edetail.action_detail_case\u003c/tt\u003e: Uses the \"has\" operator (:) and\n    either a singular value or a list of allowed action types enclosed in\n    parentheses.\n    Examples:\n      - \u003ctt\u003edetail.action_detail_case: RENAME\u003c/tt\u003e\n      - \u003ctt\u003edetail.action_detail_case:(CREATE UPLOAD)\u003c/tt\u003e\n      - \u003ctt\u003e-detail.action_detail_case:MOVE\u003c/tt\u003e",
+          "type": "string"
+        },
+        "itemName": {
+          "description": "Return activities for this Drive item. The format is\n\"items/ITEM_ID\".",
+          "type": "string"
+        },
+        "pageSize": {
+          "description": "The requested number of activity to return. If not set, a default value\nwill be used.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "pageToken": {
+          "description": "The next_page_token value returned from a previous QueryDriveActivity\nrequest, if any.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "QueryDriveActivityResponse": {
+      "description": "Response message for querying Drive activity.",
+      "id": "QueryDriveActivityResponse",
+      "properties": {
+        "activities": {
+          "description": "List of activity requested.",
+          "items": {
+            "$ref": "DriveActivity"
+          },
+          "type": "array"
+        },
+        "nextPageToken": {
+          "description": "Token to retrieve the next page of results, or\nempty if there are no more results in the list.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "Rename": {
+      "description": "An object was renamed.",
+      "id": "Rename",
+      "properties": {
+        "newTitle": {
+          "description": "The new title of the drive object.",
+          "type": "string"
+        },
+        "oldTitle": {
+          "description": "The previous title of the drive object.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "Restore": {
+      "description": "A deleted object was restored.",
+      "id": "Restore",
+      "properties": {
+        "type": {
+          "description": "The type of restore action taken.",
+          "enum": [
+            "TYPE_UNSPECIFIED",
+            "UNTRASH"
+          ],
+          "enumDescriptions": [
+            "The type is not available.",
+            "An object was restored from the trash."
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "RestrictionChange": {
+      "description": "Information about restriction policy changes to a feature.",
+      "id": "RestrictionChange",
+      "properties": {
+        "feature": {
+          "description": "The feature which had a change in restriction policy.",
+          "enum": [
+            "FEATURE_UNSPECIFIED",
+            "SHARING_OUTSIDE_DOMAIN",
+            "DIRECT_SHARING",
+            "ITEM_DUPLICATION",
+            "DRIVE_FILE_STREAM"
+          ],
+          "enumDescriptions": [
+            "The feature which changed restriction settings was not available.",
+            "When restricted, this prevents items from being shared outside the\ndomain.",
+            "When restricted, this prevents direct sharing of individual items.",
+            "When restricted, this prevents actions like copy, download, and print\nthat might result in uncontrolled duplicates of items.",
+            "When restricted, this prevents use of Drive File Stream."
+          ],
+          "type": "string"
+        },
+        "newRestriction": {
+          "description": "The restriction in place after the change.",
+          "enum": [
+            "RESTRICTION_UNSPECIFIED",
+            "UNRESTRICTED",
+            "FULLY_RESTRICTED"
+          ],
+          "enumDescriptions": [
+            "The type of restriction is not available.",
+            "The feature is available without restriction.",
+            "The use of this feature is fully restricted."
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "SettingsChange": {
+      "description": "Information about settings changes.",
+      "id": "SettingsChange",
+      "properties": {
+        "restrictionChanges": {
+          "description": "The set of changes made to restrictions.",
+          "items": {
+            "$ref": "RestrictionChange"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "Suggestion": {
+      "description": "A suggestion.",
+      "id": "Suggestion",
+      "properties": {
+        "subtype": {
+          "description": "The sub-type of this event.",
+          "enum": [
+            "SUBTYPE_UNSPECIFIED",
+            "ADDED",
+            "DELETED",
+            "REPLY_ADDED",
+            "REPLY_DELETED",
+            "ACCEPTED",
+            "REJECTED",
+            "ACCEPT_DELETED",
+            "REJECT_DELETED"
+          ],
+          "enumDescriptions": [
+            "Subtype not available.",
+            "A suggestion was added.",
+            "A suggestion was deleted.",
+            "A suggestion reply was added.",
+            "A suggestion reply was deleted.",
+            "A suggestion was accepted.",
+            "A suggestion was rejected.",
+            "An accepted suggestion was deleted.",
+            "A rejected suggestion was deleted."
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "SystemEvent": {
+      "description": "Event triggered by system operations instead of end users.",
+      "id": "SystemEvent",
+      "properties": {
+        "type": {
+          "description": "The type of the system event that may triggered activity.",
+          "enum": [
+            "TYPE_UNSPECIFIED",
+            "USER_DELETION",
+            "TRASH_AUTO_PURGE"
+          ],
+          "enumDescriptions": [
+            "The event type is unspecified.",
+            "The event is a consequence of a user account being deleted.",
+            "The event is due to the system automatically purging trash."
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "Target": {
+      "description": "Information about the target of activity.",
+      "id": "Target",
+      "properties": {
+        "driveItem": {
+          "$ref": "DriveItem",
+          "description": "The target is a Drive item."
+        },
+        "fileComment": {
+          "$ref": "FileComment",
+          "description": "The target is a comment on a Drive file."
+        },
+        "teamDrive": {
+          "$ref": "TeamDrive",
+          "description": "The target is a Team Drive."
+        }
+      },
+      "type": "object"
+    },
+    "TargetReference": {
+      "description": "A lightweight reference to the target of activity.",
+      "id": "TargetReference",
+      "properties": {
+        "driveItem": {
+          "$ref": "DriveItemReference",
+          "description": "The target is a Drive item."
+        },
+        "teamDrive": {
+          "$ref": "TeamDriveReference",
+          "description": "The target is a Team Drive."
+        }
+      },
+      "type": "object"
+    },
+    "TeamDrive": {
+      "description": "Information about a Team Drive.",
+      "id": "TeamDrive",
+      "properties": {
+        "name": {
+          "description": "The resource name of the Team Drive. The format is\n\"teamDrives/TEAM_DRIVE_ID\".",
+          "type": "string"
+        },
+        "root": {
+          "$ref": "DriveItem",
+          "description": "The root of this Team Drive."
+        },
+        "title": {
+          "description": "The title of the Team Drive.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "TeamDriveReference": {
+      "description": "A lightweight reference to a Team Drive.",
+      "id": "TeamDriveReference",
+      "properties": {
+        "name": {
+          "description": "The resource name of the Team Drive. The format is\n\"teamDrives/TEAM_DRIVE_ID\".",
+          "type": "string"
+        },
+        "title": {
+          "description": "The title of the Team Drive.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "TimeRange": {
+      "description": "Information about time ranges.",
+      "id": "TimeRange",
+      "properties": {
+        "endTime": {
+          "description": "The end of the time range.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "startTime": {
+          "description": "The start of the time range.",
+          "format": "google-datetime",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "UnknownUser": {
+      "description": "A user about whom nothing is currently known.",
+      "id": "UnknownUser",
+      "properties": {},
+      "type": "object"
+    },
+    "Upload": {
+      "description": "An object was uploaded into Drive.",
+      "id": "Upload",
+      "properties": {},
+      "type": "object"
+    },
+    "User": {
+      "description": "Information about an end user.",
+      "id": "User",
+      "properties": {
+        "deletedUser": {
+          "$ref": "DeletedUser",
+          "description": "A user whose account has since been deleted."
+        },
+        "knownUser": {
+          "$ref": "KnownUser",
+          "description": "A known user."
+        },
+        "unknownUser": {
+          "$ref": "UnknownUser",
+          "description": "A user about whom nothing is currently known."
+        }
+      },
+      "type": "object"
+    }
+  },
+  "servicePath": "",
+  "title": "Drive Activity API",
+  "version": "v2",
+  "version_module": true
+}
\ No newline at end of file
diff --git a/driveactivity/v2/driveactivity-gen.go b/driveactivity/v2/driveactivity-gen.go
new file mode 100644
index 0000000..da034bc
--- /dev/null
+++ b/driveactivity/v2/driveactivity-gen.go
@@ -0,0 +1,1836 @@
+// Copyright 2018 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// AUTO-GENERATED CODE. DO NOT EDIT.
+
+// Package driveactivity provides access to the Drive Activity API.
+//
+// See https://developers.google.com/drive/activity/
+//
+// Usage example:
+//
+//   import "google.golang.org/api/driveactivity/v2"
+//   ...
+//   driveactivityService, err := driveactivity.New(oauthHttpClient)
+package driveactivity // import "google.golang.org/api/driveactivity/v2"
+
+import (
+	"bytes"
+	"context"
+	"encoding/json"
+	"errors"
+	"fmt"
+	"io"
+	"net/http"
+	"net/url"
+	"strconv"
+	"strings"
+
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
+)
+
+// 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
+
+const apiId = "driveactivity:v2"
+const apiName = "driveactivity"
+const apiVersion = "v2"
+const basePath = "https://driveactivity.googleapis.com/"
+
+// OAuth2 scopes used by this API.
+const (
+	// View and add to the activity record of files in your Google Drive
+	DriveActivityScope = "https://www.googleapis.com/auth/drive.activity"
+
+	// View the activity record of files in your Google Drive
+	DriveActivityReadonlyScope = "https://www.googleapis.com/auth/drive.activity.readonly"
+)
+
+func New(client *http.Client) (*Service, error) {
+	if client == nil {
+		return nil, errors.New("client is nil")
+	}
+	s := &Service{client: client, BasePath: basePath}
+	s.Activity = NewActivityService(s)
+	return s, nil
+}
+
+type Service struct {
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
+
+	Activity *ActivityService
+}
+
+func (s *Service) userAgent() string {
+	if s.UserAgent == "" {
+		return googleapi.UserAgent
+	}
+	return googleapi.UserAgent + " " + s.UserAgent
+}
+
+func NewActivityService(s *Service) *ActivityService {
+	rs := &ActivityService{s: s}
+	return rs
+}
+
+type ActivityService struct {
+	s *Service
+}
+
+// Action: Information about the action.
+type Action struct {
+	// Actor: The actor responsible for this action (or empty if all actors
+	// are
+	// responsible).
+	Actor *Actor `json:"actor,omitempty"`
+
+	// Detail: The type and detailed information about the action.
+	Detail *ActionDetail `json:"detail,omitempty"`
+
+	// Target: The target this action affects (or empty if affecting all
+	// targets). This
+	// represents the state of the target immediately after this action
+	// occurred.
+	Target *Target `json:"target,omitempty"`
+
+	// TimeRange: The action occurred over this time range.
+	TimeRange *TimeRange `json:"timeRange,omitempty"`
+
+	// Timestamp: The action occurred at this specific time.
+	Timestamp string `json:"timestamp,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Actor") 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. "Actor") 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 *Action) MarshalJSON() ([]byte, error) {
+	type NoMethod Action
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ActionDetail: Data describing the type and additional information of
+// an action.
+type ActionDetail struct {
+	// Comment: A change about comments was made.
+	Comment *Comment `json:"comment,omitempty"`
+
+	// Create: An object was created.
+	Create *Create `json:"create,omitempty"`
+
+	// Delete: An object was deleted.
+	Delete *Delete `json:"delete,omitempty"`
+
+	// DlpChange: A change happened in data leak prevention status.
+	DlpChange *DataLeakPreventionChange `json:"dlpChange,omitempty"`
+
+	// Edit: An object was edited.
+	Edit *Edit `json:"edit,omitempty"`
+
+	// Move: An object was moved.
+	Move *Move `json:"move,omitempty"`
+
+	// PermissionChange: The permission on an object was changed.
+	PermissionChange *PermissionChange `json:"permissionChange,omitempty"`
+
+	// Reference: An object was referenced in an application outside of
+	// Drive/Docs.
+	Reference *ApplicationReference `json:"reference,omitempty"`
+
+	// Rename: An object was renamed.
+	Rename *Rename `json:"rename,omitempty"`
+
+	// Restore: A deleted object was restored.
+	Restore *Restore `json:"restore,omitempty"`
+
+	// SettingsChange: Settings were changed.
+	SettingsChange *SettingsChange `json:"settingsChange,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Comment") 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. "Comment") 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 *ActionDetail) MarshalJSON() ([]byte, error) {
+	type NoMethod ActionDetail
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Actor: The actor of a Drive activity.
+type Actor struct {
+	// Administrator: An administrator.
+	Administrator *Administrator `json:"administrator,omitempty"`
+
+	// Anonymous: An anonymous user.
+	Anonymous *AnonymousUser `json:"anonymous,omitempty"`
+
+	// Impersonation: An account acting on behalf of another.
+	Impersonation *Impersonation `json:"impersonation,omitempty"`
+
+	// System: A non-user actor (i.e. system triggered).
+	System *SystemEvent `json:"system,omitempty"`
+
+	// User: An end user.
+	User *User `json:"user,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Administrator") 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. "Administrator") 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 *Actor) MarshalJSON() ([]byte, error) {
+	type NoMethod Actor
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Administrator: Empty message representing an administrator.
+type Administrator struct {
+}
+
+// AnonymousUser: Empty message representing an anonymous user or
+// indicating the authenticated
+// user should be anonymized.
+type AnonymousUser struct {
+}
+
+// Anyone: Represents any user (including a logged out user).
+type Anyone struct {
+}
+
+// ApplicationReference: Activity in applications other than Drive.
+type ApplicationReference struct {
+	// Type: The reference type corresponding to this event.
+	//
+	// Possible values:
+	//   "UNSPECIFIED_REFERENCE_TYPE" - The type is not available.
+	//   "LINK" - The links of one or more Drive items were posted.
+	//   "DISCUSS" - Comments were made regarding a Drive item.
+	Type string `json:"type,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Type") 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. "Type") 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 *ApplicationReference) MarshalJSON() ([]byte, error) {
+	type NoMethod ApplicationReference
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Assignment: A comment with an assignment.
+type Assignment struct {
+	// Subtype: The sub-type of this event.
+	//
+	// Possible values:
+	//   "SUBTYPE_UNSPECIFIED" - Subtype not available.
+	//   "ADDED" - An assignment was added.
+	//   "DELETED" - An assignment was deleted.
+	//   "REPLY_ADDED" - An assignment reply was added.
+	//   "REPLY_DELETED" - An assignment reply was deleted.
+	//   "RESOLVED" - An assignment was resolved.
+	//   "REOPENED" - A resolved assignment was reopened.
+	//   "REASSIGNED" - An assignment was reassigned.
+	Subtype string `json:"subtype,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Subtype") 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. "Subtype") 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 *Assignment) MarshalJSON() ([]byte, error) {
+	type NoMethod Assignment
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Comment: A change about comments on an object.
+type Comment struct {
+	// Assignment: A change on an assignment.
+	Assignment *Assignment `json:"assignment,omitempty"`
+
+	// MentionedUsers: Users who are mentioned in this comment.
+	MentionedUsers []*User `json:"mentionedUsers,omitempty"`
+
+	// Post: A change on a regular posted comment.
+	Post *Post `json:"post,omitempty"`
+
+	// Suggestion: A change on a suggestion.
+	Suggestion *Suggestion `json:"suggestion,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Assignment") 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. "Assignment") 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 *Comment) MarshalJSON() ([]byte, error) {
+	type NoMethod Comment
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ConsolidationStrategy: How the individual activities are
+// consolidated. A set of activities may be
+// consolidated into one combined activity if they are related in some
+// way, such
+// as one actor performing the same action on multiple targets, or
+// multiple
+// actors performing the same action on a single target. The strategy
+// defines
+// the rules for which activities are related.
+type ConsolidationStrategy struct {
+	// Legacy: The individual activities are consolidated using the legacy
+	// strategy.
+	Legacy *Legacy `json:"legacy,omitempty"`
+
+	// None: The individual activities are not consolidated.
+	None *NoConsolidation `json:"none,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Legacy") 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. "Legacy") 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 *ConsolidationStrategy) MarshalJSON() ([]byte, error) {
+	type NoMethod ConsolidationStrategy
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Copy: An object was created by copying an existing object.
+type Copy struct {
+	// OriginalObject: The the original object.
+	OriginalObject *TargetReference `json:"originalObject,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "OriginalObject") 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. "OriginalObject") 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 *Copy) MarshalJSON() ([]byte, error) {
+	type NoMethod Copy
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Create: An object was created.
+type Create struct {
+	// Copy: If present, indicates the object was created by copying an
+	// existing Drive
+	// object.
+	Copy *Copy `json:"copy,omitempty"`
+
+	// New: If present, indicates the object was newly created (e.g. as a
+	// blank
+	// document), not derived from a Drive object or external object.
+	New *New1 `json:"new,omitempty"`
+
+	// Upload: If present, indicates the object originated externally and
+	// was uploaded
+	// to Drive.
+	Upload *Upload `json:"upload,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Copy") 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. "Copy") 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 *Create) MarshalJSON() ([]byte, error) {
+	type NoMethod Create
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// DataLeakPreventionChange: A change in the object's data leak
+// prevention status.
+type DataLeakPreventionChange struct {
+	// Type: The type of Data Leak Prevention (DLP) change.
+	//
+	// Possible values:
+	//   "TYPE_UNSPECIFIED" - An update to the DLP state that is neither
+	// FLAGGED or CLEARED.
+	//   "FLAGGED" - Document has been flagged as containing sensitive
+	// content.
+	//   "CLEARED" - Document is no longer flagged as containing sensitive
+	// content.
+	Type string `json:"type,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Type") 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. "Type") 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 *DataLeakPreventionChange) MarshalJSON() ([]byte, error) {
+	type NoMethod DataLeakPreventionChange
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Delete: An object was deleted.
+type Delete struct {
+	// Type: The type of delete action taken.
+	//
+	// Possible values:
+	//   "TYPE_UNSPECIFIED" - Deletion type is not available.
+	//   "TRASH" - An object was put into the trash.
+	//   "PERMANENT_DELETE" - An object was deleted permanently.
+	Type string `json:"type,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Type") 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. "Type") 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)
+}
+
+// DeletedUser: A user whose account has since been deleted.
+type DeletedUser struct {
+}
+
+// Domain: Information about a domain.
+type Domain struct {
+	// LegacyId: An opaque string used to identify this domain.
+	LegacyId string `json:"legacyId,omitempty"`
+
+	// Name: The name of the domain, e.g. "google.com".
+	Name string `json:"name,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "LegacyId") 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. "LegacyId") 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 *Domain) MarshalJSON() ([]byte, error) {
+	type NoMethod Domain
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// DriveActivity: A single Drive activity comprising one or more Actions
+// by one or more
+// Actors on one or more Targets. Some Action groupings occur
+// spontaneously,
+// such as moving an item into a shared folder triggering a permission
+// change.
+// Other groupings of related Actions, such as multiple Actors editing
+// one item
+// or moving multiple files into a new folder, are controlled by the
+// selection
+// of a ConsolidationStrategy in the QueryDriveActivityRequest.
+type DriveActivity struct {
+	// Actions: Details on all actions in this activity.
+	Actions []*Action `json:"actions,omitempty"`
+
+	// Actors: All actor(s) responsible for the activity.
+	Actors []*Actor `json:"actors,omitempty"`
+
+	// PrimaryActionDetail: Key information about the primary action for
+	// this activity. This is either
+	// representative, or the most important, of all actions in the
+	// activity,
+	// according to the ConsolidationStrategy in the request.
+	PrimaryActionDetail *ActionDetail `json:"primaryActionDetail,omitempty"`
+
+	// Targets: All Drive objects this activity is about (e.g. file, folder,
+	// Team Drive).
+	// This represents the state of the target immediately after the
+	// actions
+	// occurred.
+	Targets []*Target `json:"targets,omitempty"`
+
+	// TimeRange: The activity occurred over this time range.
+	TimeRange *TimeRange `json:"timeRange,omitempty"`
+
+	// Timestamp: The activity occurred at this specific time.
+	Timestamp string `json:"timestamp,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Actions") 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. "Actions") 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 *DriveActivity) MarshalJSON() ([]byte, error) {
+	type NoMethod DriveActivity
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// DriveItem: A Drive item, such as a file or folder.
+type DriveItem struct {
+	// File: The Drive item is a file.
+	File *File `json:"file,omitempty"`
+
+	// Folder: The Drive item is a folder.
+	Folder *Folder `json:"folder,omitempty"`
+
+	// MimeType: The MIME type of the Drive item.
+	// See
+	// https://developers.google.com/drive/v3/web/mime-types.
+	MimeType string `json:"mimeType,omitempty"`
+
+	// Name: The target Drive item. The format is "items/ITEM_ID".
+	Name string `json:"name,omitempty"`
+
+	// Owner: Information about the owner of this Drive item.
+	Owner *Owner `json:"owner,omitempty"`
+
+	// Title: The title of the Drive item.
+	Title string `json:"title,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "File") 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. "File") 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 *DriveItem) MarshalJSON() ([]byte, error) {
+	type NoMethod DriveItem
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// DriveItemReference: A lightweight reference to a Drive item, such as
+// a file or folder.
+type DriveItemReference struct {
+	// File: The Drive item is a file.
+	File *File `json:"file,omitempty"`
+
+	// Folder: The Drive item is a folder.
+	Folder *Folder `json:"folder,omitempty"`
+
+	// Name: The target Drive item. The format is "items/ITEM_ID".
+	Name string `json:"name,omitempty"`
+
+	// Title: The title of the Drive item.
+	Title string `json:"title,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "File") 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. "File") 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 *DriveItemReference) MarshalJSON() ([]byte, error) {
+	type NoMethod DriveItemReference
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Edit: An empty message indicating an object was edited.
+type Edit struct {
+}
+
+// File: A Drive item which is a file.
+type File struct {
+}
+
+// FileComment: A comment on a file.
+type FileComment struct {
+	// LegacyCommentId: The comment in the discussion thread. This
+	// identifier is an opaque string
+	// compatible with the Drive API;
+	// see
+	// https://developers.google.com/drive/v3/reference/comments/get
+	LegacyCommentId string `json:"legacyCommentId,omitempty"`
+
+	// LegacyDiscussionId: The discussion thread to which the comment was
+	// added. This identifier is an
+	// opaque string compatible with the Drive API and references the
+	// first
+	// comment in a discussion;
+	// see
+	// https://developers.google.com/drive/v3/reference/comments/get
+	LegacyDiscussionId string `json:"legacyDiscussionId,omitempty"`
+
+	// LinkToDiscussion: The link to the discussion thread containing this
+	// comment, for
+	// example,
+	// "https://docs.google.com/DOCUMENT_ID/edit?disco=THREAD_ID".
+	LinkToDiscussion string `json:"linkToDiscussion,omitempty"`
+
+	// Parent: The Drive item containing this comment.
+	Parent *DriveItem `json:"parent,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "LegacyCommentId") 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. "LegacyCommentId") 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 *FileComment) MarshalJSON() ([]byte, error) {
+	type NoMethod FileComment
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Folder: A Drive item which is a folder.
+type Folder struct {
+	// Type: The type of Drive folder.
+	//
+	// Possible values:
+	//   "TYPE_UNSPECIFIED" - The folder type is unknown.
+	//   "MY_DRIVE_ROOT" - The folder is the root of a user's MyDrive.
+	//   "TEAM_DRIVE_ROOT" - The folder is the root of a Team Drive. Note
+	// that this folder is
+	// a Drive item, and is a distinct entity from the Team Drive itself.
+	//   "STANDARD_FOLDER" - The folder is a standard, non-root, folder.
+	Type string `json:"type,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Type") 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. "Type") 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 *Folder) MarshalJSON() ([]byte, error) {
+	type NoMethod Folder
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Group: Information about a group.
+type Group struct {
+	// Email: The email address of the group.
+	Email string `json:"email,omitempty"`
+
+	// Title: The title of the group.
+	Title string `json:"title,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Email") 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. "Email") 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 *Group) MarshalJSON() ([]byte, error) {
+	type NoMethod Group
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Impersonation: Information about an impersonation, where an admin
+// acts on behalf of an end
+// user. Information about the acting admin is not currently available.
+type Impersonation struct {
+	// ImpersonatedUser: The impersonated user.
+	ImpersonatedUser *User `json:"impersonatedUser,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ImpersonatedUser") 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. "ImpersonatedUser") 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 *Impersonation) MarshalJSON() ([]byte, error) {
+	type NoMethod Impersonation
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// KnownUser: A known user.
+type KnownUser struct {
+	// IsCurrentUser: True if this is the user making the request.
+	IsCurrentUser bool `json:"isCurrentUser,omitempty"`
+
+	// PersonName: The identifier for this user that can be used with the
+	// People API to get
+	// more information. The format is "people/ACCOUNT_ID".
+	// See
+	// https://developers.google.com/people/.
+	PersonName string `json:"personName,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "IsCurrentUser") 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. "IsCurrentUser") 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 *KnownUser) MarshalJSON() ([]byte, error) {
+	type NoMethod KnownUser
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Legacy: A strategy which consolidates activities using the grouping
+// rules from the
+// legacy V1 Activity API. Similar actions occurring within a window of
+// time
+// can be grouped across multiple targets (such as moving a set of files
+// at
+// once) or multiple actors (such as several users editing the same
+// item).
+// Grouping rules for this strategy are specific to each type of action.
+type Legacy struct {
+}
+
+// Move: An object was moved.
+type Move struct {
+	// AddedParents: The added parent object(s).
+	AddedParents []*TargetReference `json:"addedParents,omitempty"`
+
+	// RemovedParents: The removed parent object(s).
+	RemovedParents []*TargetReference `json:"removedParents,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "AddedParents") 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. "AddedParents") 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 *Move) MarshalJSON() ([]byte, error) {
+	type NoMethod Move
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// New1: An object was created from scratch.
+type New1 struct {
+}
+
+// NoConsolidation: A strategy which does no consolidation of individual
+// activities.
+type NoConsolidation struct {
+}
+
+// Owner: Information about the owner of a Drive item.
+type Owner struct {
+	// Domain: The domain of the Drive item owner.
+	Domain *Domain `json:"domain,omitempty"`
+
+	// TeamDrive: The Team Drive that owns the Drive item.
+	TeamDrive *TeamDriveReference `json:"teamDrive,omitempty"`
+
+	// User: The user that owns the Drive item.
+	User *User `json:"user,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 *Owner) MarshalJSON() ([]byte, error) {
+	type NoMethod Owner
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Permission: The permission setting of an object.
+type Permission struct {
+	// AllowDiscovery: If true, the item can be discovered (e.g. in the
+	// user's "Shared with me"
+	// collection) without needing a link to the item.
+	AllowDiscovery bool `json:"allowDiscovery,omitempty"`
+
+	// Anyone: If set, this permission applies to anyone, even logged out
+	// users.
+	Anyone *Anyone `json:"anyone,omitempty"`
+
+	// Domain: The domain to whom this permission applies.
+	Domain *Domain `json:"domain,omitempty"`
+
+	// Group: The group to whom this permission applies.
+	Group *Group `json:"group,omitempty"`
+
+	// Role: Indicates the
+	// <a href="/drive/web/manage-sharing#roles">Google Drive
+	// permissions
+	// role</a>. The role determines a user's ability to read, write,
+	// and
+	// comment on items.
+	//
+	// Possible values:
+	//   "ROLE_UNSPECIFIED" - The role is not available.
+	//   "OWNER" - A role granting full access.
+	//   "ORGANIZER" - A role granting the ability to manage people and
+	// settings.
+	//   "FILE_ORGANIZER" - A role granting the ability to contribute and
+	// manage content.
+	//   "EDITOR" - A role granting the ability to contribute content. This
+	// role is sometimes
+	// also known as "writer".
+	//   "COMMENTER" - A role granting the ability to view and comment on
+	// content.
+	//   "VIEWER" - A role granting the ability to view content. This role
+	// is sometimes also
+	// known as "reader".
+	//   "PUBLISHED_VIEWER" - A role granting the ability to view content
+	// only after it has been
+	// published to the web. This role is sometimes also known as
+	// "published
+	// reader". See https://support.google.com/sites/answer/6372880 for
+	// more
+	// information.
+	Role string `json:"role,omitempty"`
+
+	// User: The user to whom this permission applies.
+	User *User `json:"user,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "AllowDiscovery") 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. "AllowDiscovery") 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 *Permission) MarshalJSON() ([]byte, error) {
+	type NoMethod Permission
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// PermissionChange: A change of the permission setting on an item.
+type PermissionChange struct {
+	// AddedPermissions: The set of permissions added by this change.
+	AddedPermissions []*Permission `json:"addedPermissions,omitempty"`
+
+	// RemovedPermissions: The set of permissions removed by this change.
+	RemovedPermissions []*Permission `json:"removedPermissions,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "AddedPermissions") 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. "AddedPermissions") 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 *PermissionChange) MarshalJSON() ([]byte, error) {
+	type NoMethod PermissionChange
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Post: A regular posted comment.
+type Post struct {
+	// Subtype: The sub-type of this event.
+	//
+	// Possible values:
+	//   "SUBTYPE_UNSPECIFIED" - Subtype not available.
+	//   "ADDED" - A post was added.
+	//   "DELETED" - A post was deleted.
+	//   "REPLY_ADDED" - A reply was added.
+	//   "REPLY_DELETED" - A reply was deleted.
+	//   "RESOLVED" - A posted comment was resolved.
+	//   "REOPENED" - A posted comment was reopened.
+	Subtype string `json:"subtype,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Subtype") 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. "Subtype") 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 *Post) MarshalJSON() ([]byte, error) {
+	type NoMethod Post
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// QueryDriveActivityRequest: The request message for querying Drive
+// activity.
+type QueryDriveActivityRequest struct {
+	// AncestorName: Return activities for this Drive folder and all
+	// children and descendants.
+	// The format is "items/ITEM_ID".
+	AncestorName string `json:"ancestorName,omitempty"`
+
+	// ConsolidationStrategy: Details on how to consolidate related actions
+	// that make up the activity. If
+	// not set, then related actions will not be consolidated.
+	ConsolidationStrategy *ConsolidationStrategy `json:"consolidationStrategy,omitempty"`
+
+	// Filter: The filtering for items returned from this query request. The
+	// format of the
+	// filter string is a sequence of expressions, joined by an optional
+	// "AND",
+	// where each expression is of the form "field operator
+	// value".
+	//
+	// Supported fields:
+	//
+	//   - <tt>time</tt>: Uses numerical operators on date values either in
+	//     terms of milliseconds since Jan 1, 1970 or in RFC 3339 format.
+	//     Examples:
+	//       - <tt>time > 1452409200000 AND time <= 1492812924310</tt>
+	//       - <tt>time >= "2016-01-10T01:02:03-05:00"</tt>
+	//
+	//   - <tt>detail.action_detail_case</tt>: Uses the "has" operator (:)
+	// and
+	//     either a singular value or a list of allowed action types
+	// enclosed in
+	//     parentheses.
+	//     Examples:
+	//       - <tt>detail.action_detail_case: RENAME</tt>
+	//       - <tt>detail.action_detail_case:(CREATE UPLOAD)</tt>
+	//       - <tt>-detail.action_detail_case:MOVE</tt>
+	Filter string `json:"filter,omitempty"`
+
+	// ItemName: Return activities for this Drive item. The format
+	// is
+	// "items/ITEM_ID".
+	ItemName string `json:"itemName,omitempty"`
+
+	// PageSize: The requested number of activity to return. If not set, a
+	// default value
+	// will be used.
+	PageSize int64 `json:"pageSize,omitempty"`
+
+	// PageToken: The next_page_token value returned from a previous
+	// QueryDriveActivity
+	// request, if any.
+	PageToken string `json:"pageToken,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "AncestorName") 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. "AncestorName") 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 *QueryDriveActivityRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod QueryDriveActivityRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// QueryDriveActivityResponse: Response message for querying Drive
+// activity.
+type QueryDriveActivityResponse struct {
+	// Activities: List of activity requested.
+	Activities []*DriveActivity `json:"activities,omitempty"`
+
+	// NextPageToken: Token to retrieve the next page of results, or
+	// empty if there are no more results in the list.
+	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. "Activities") 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. "Activities") 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 *QueryDriveActivityResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod QueryDriveActivityResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Rename: An object was renamed.
+type Rename struct {
+	// NewTitle: The new title of the drive object.
+	NewTitle string `json:"newTitle,omitempty"`
+
+	// OldTitle: The previous title of the drive object.
+	OldTitle string `json:"oldTitle,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "NewTitle") 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. "NewTitle") 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 *Rename) MarshalJSON() ([]byte, error) {
+	type NoMethod Rename
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Restore: A deleted object was restored.
+type Restore struct {
+	// Type: The type of restore action taken.
+	//
+	// Possible values:
+	//   "TYPE_UNSPECIFIED" - The type is not available.
+	//   "UNTRASH" - An object was restored from the trash.
+	Type string `json:"type,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Type") 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. "Type") 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 *Restore) MarshalJSON() ([]byte, error) {
+	type NoMethod Restore
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// RestrictionChange: Information about restriction policy changes to a
+// feature.
+type RestrictionChange struct {
+	// Feature: The feature which had a change in restriction policy.
+	//
+	// Possible values:
+	//   "FEATURE_UNSPECIFIED" - The feature which changed restriction
+	// settings was not available.
+	//   "SHARING_OUTSIDE_DOMAIN" - When restricted, this prevents items
+	// from being shared outside the
+	// domain.
+	//   "DIRECT_SHARING" - When restricted, this prevents direct sharing of
+	// individual items.
+	//   "ITEM_DUPLICATION" - When restricted, this prevents actions like
+	// copy, download, and print
+	// that might result in uncontrolled duplicates of items.
+	//   "DRIVE_FILE_STREAM" - When restricted, this prevents use of Drive
+	// File Stream.
+	Feature string `json:"feature,omitempty"`
+
+	// NewRestriction: The restriction in place after the change.
+	//
+	// Possible values:
+	//   "RESTRICTION_UNSPECIFIED" - The type of restriction is not
+	// available.
+	//   "UNRESTRICTED" - The feature is available without restriction.
+	//   "FULLY_RESTRICTED" - The use of this feature is fully restricted.
+	NewRestriction string `json:"newRestriction,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Feature") 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. "Feature") 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 *RestrictionChange) MarshalJSON() ([]byte, error) {
+	type NoMethod RestrictionChange
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// SettingsChange: Information about settings changes.
+type SettingsChange struct {
+	// RestrictionChanges: The set of changes made to restrictions.
+	RestrictionChanges []*RestrictionChange `json:"restrictionChanges,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "RestrictionChanges")
+	// 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. "RestrictionChanges") 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 *SettingsChange) MarshalJSON() ([]byte, error) {
+	type NoMethod SettingsChange
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Suggestion: A suggestion.
+type Suggestion struct {
+	// Subtype: The sub-type of this event.
+	//
+	// Possible values:
+	//   "SUBTYPE_UNSPECIFIED" - Subtype not available.
+	//   "ADDED" - A suggestion was added.
+	//   "DELETED" - A suggestion was deleted.
+	//   "REPLY_ADDED" - A suggestion reply was added.
+	//   "REPLY_DELETED" - A suggestion reply was deleted.
+	//   "ACCEPTED" - A suggestion was accepted.
+	//   "REJECTED" - A suggestion was rejected.
+	//   "ACCEPT_DELETED" - An accepted suggestion was deleted.
+	//   "REJECT_DELETED" - A rejected suggestion was deleted.
+	Subtype string `json:"subtype,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Subtype") 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. "Subtype") 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 *Suggestion) MarshalJSON() ([]byte, error) {
+	type NoMethod Suggestion
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// SystemEvent: Event triggered by system operations instead of end
+// users.
+type SystemEvent struct {
+	// Type: The type of the system event that may triggered activity.
+	//
+	// Possible values:
+	//   "TYPE_UNSPECIFIED" - The event type is unspecified.
+	//   "USER_DELETION" - The event is a consequence of a user account
+	// being deleted.
+	//   "TRASH_AUTO_PURGE" - The event is due to the system automatically
+	// purging trash.
+	Type string `json:"type,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Type") 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. "Type") 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 *SystemEvent) MarshalJSON() ([]byte, error) {
+	type NoMethod SystemEvent
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Target: Information about the target of activity.
+type Target struct {
+	// DriveItem: The target is a Drive item.
+	DriveItem *DriveItem `json:"driveItem,omitempty"`
+
+	// FileComment: The target is a comment on a Drive file.
+	FileComment *FileComment `json:"fileComment,omitempty"`
+
+	// TeamDrive: The target is a Team Drive.
+	TeamDrive *TeamDrive `json:"teamDrive,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "DriveItem") 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. "DriveItem") 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 *Target) MarshalJSON() ([]byte, error) {
+	type NoMethod Target
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// TargetReference: A lightweight reference to the target of activity.
+type TargetReference struct {
+	// DriveItem: The target is a Drive item.
+	DriveItem *DriveItemReference `json:"driveItem,omitempty"`
+
+	// TeamDrive: The target is a Team Drive.
+	TeamDrive *TeamDriveReference `json:"teamDrive,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "DriveItem") 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. "DriveItem") 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 *TargetReference) MarshalJSON() ([]byte, error) {
+	type NoMethod TargetReference
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// TeamDrive: Information about a Team Drive.
+type TeamDrive struct {
+	// Name: The resource name of the Team Drive. The format
+	// is
+	// "teamDrives/TEAM_DRIVE_ID".
+	Name string `json:"name,omitempty"`
+
+	// Root: The root of this Team Drive.
+	Root *DriveItem `json:"root,omitempty"`
+
+	// Title: The title of the Team Drive.
+	Title string `json:"title,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 *TeamDrive) MarshalJSON() ([]byte, error) {
+	type NoMethod TeamDrive
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// TeamDriveReference: A lightweight reference to a Team Drive.
+type TeamDriveReference struct {
+	// Name: The resource name of the Team Drive. The format
+	// is
+	// "teamDrives/TEAM_DRIVE_ID".
+	Name string `json:"name,omitempty"`
+
+	// Title: The title of the Team Drive.
+	Title string `json:"title,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 *TeamDriveReference) MarshalJSON() ([]byte, error) {
+	type NoMethod TeamDriveReference
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// TimeRange: Information about time ranges.
+type TimeRange struct {
+	// EndTime: The end of the time range.
+	EndTime string `json:"endTime,omitempty"`
+
+	// StartTime: The start of the time range.
+	StartTime string `json:"startTime,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 *TimeRange) MarshalJSON() ([]byte, error) {
+	type NoMethod TimeRange
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// UnknownUser: A user about whom nothing is currently known.
+type UnknownUser struct {
+}
+
+// Upload: An object was uploaded into Drive.
+type Upload struct {
+}
+
+// User: Information about an end user.
+type User struct {
+	// DeletedUser: A user whose account has since been deleted.
+	DeletedUser *DeletedUser `json:"deletedUser,omitempty"`
+
+	// KnownUser: A known user.
+	KnownUser *KnownUser `json:"knownUser,omitempty"`
+
+	// UnknownUser: A user about whom nothing is currently known.
+	UnknownUser *UnknownUser `json:"unknownUser,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "DeletedUser") 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. "DeletedUser") 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 *User) MarshalJSON() ([]byte, error) {
+	type NoMethod User
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// method id "driveactivity.activity.query":
+
+type ActivityQueryCall struct {
+	s                         *Service
+	querydriveactivityrequest *QueryDriveActivityRequest
+	urlParams_                gensupport.URLParams
+	ctx_                      context.Context
+	header_                   http.Header
+}
+
+// Query: Query past activity in Google Drive.
+func (r *ActivityService) Query(querydriveactivityrequest *QueryDriveActivityRequest) *ActivityQueryCall {
+	c := &ActivityQueryCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.querydriveactivityrequest = querydriveactivityrequest
+	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 *ActivityQueryCall) Fields(s ...googleapi.Field) *ActivityQueryCall {
+	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 *ActivityQueryCall) Context(ctx context.Context) *ActivityQueryCall {
+	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 *ActivityQueryCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ActivityQueryCall) 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.querydriveactivityrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/activity:query")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "driveactivity.activity.query" call.
+// Exactly one of *QueryDriveActivityResponse or error will be non-nil.
+// Any non-2xx status code is an error. Response headers are in either
+// *QueryDriveActivityResponse.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 *ActivityQueryCall) Do(opts ...googleapi.CallOption) (*QueryDriveActivityResponse, 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 := &QueryDriveActivityResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Query past activity in Google Drive.",
+	//   "flatPath": "v2/activity:query",
+	//   "httpMethod": "POST",
+	//   "id": "driveactivity.activity.query",
+	//   "parameterOrder": [],
+	//   "parameters": {},
+	//   "path": "v2/activity:query",
+	//   "request": {
+	//     "$ref": "QueryDriveActivityRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "QueryDriveActivityResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/drive.activity",
+	//     "https://www.googleapis.com/auth/drive.activity.readonly"
+	//   ]
+	// }
+
+}
+
+// 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 *ActivityQueryCall) Pages(ctx context.Context, f func(*QueryDriveActivityResponse) error) error {
+	c.ctx_ = ctx
+	defer func(pt string) { c.querydriveactivityrequest.PageToken = pt }(c.querydriveactivityrequest.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.querydriveactivityrequest.PageToken = x.NextPageToken
+	}
+}
diff --git a/firebasedynamiclinks/v1/firebasedynamiclinks-api.json b/firebasedynamiclinks/v1/firebasedynamiclinks-api.json
index e98089b..220e734 100644
--- a/firebasedynamiclinks/v1/firebasedynamiclinks-api.json
+++ b/firebasedynamiclinks/v1/firebasedynamiclinks-api.json
@@ -223,7 +223,7 @@
       }
     }
   },
-  "revision": "20181002",
+  "revision": "20181127",
   "rootUrl": "https://firebasedynamiclinks.googleapis.com/",
   "schemas": {
     "AnalyticsInfo": {
@@ -473,11 +473,11 @@
           "description": "Desktop related information. See desktop related parameters in the\n[documentation](https://firebase.google.com/docs/dynamic-links/create-manually)."
         },
         "domainUriPrefix": {
-          "description": "E.g. https://maps.app.goo.gl, https://maps.page.link, https://g.co/maps\nMore examples can be found in description of getNormalizedUriPrefix in\nj/c/g/firebase/dynamiclinks/uri/DdlDomain.java",
+          "description": "E.g. https://maps.app.goo.gl, https://maps.page.link, https://g.co/maps\nMore examples can be found in description of getNormalizedUriPrefix in\nj/c/g/firebase/dynamiclinks/uri/DdlDomain.java\n\nWill fallback to dynamic_link_domain is this field is missing",
           "type": "string"
         },
         "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/receive)\non how to set up Dynamic Link domain associated with your Firebase project.\n\nRequired.",
+          "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/receive)\non how to set up Dynamic Link domain associated with your Firebase project.\n\nRequired if missing domain_uri_prefix.",
           "type": "string"
         },
         "iosInfo": {
@@ -872,6 +872,10 @@
         "iosIpadFallbackLink": {
           "description": "If specified, this overrides the ios_fallback_link value on iPads.",
           "type": "string"
+        },
+        "iosMinimumVersion": {
+          "description": "iOS minimum version.",
+          "type": "string"
         }
       },
       "type": "object"
diff --git a/firebasedynamiclinks/v1/firebasedynamiclinks-gen.go b/firebasedynamiclinks/v1/firebasedynamiclinks-gen.go
index 76ebc01..9c8fa88 100644
--- a/firebasedynamiclinks/v1/firebasedynamiclinks-gen.go
+++ b/firebasedynamiclinks/v1/firebasedynamiclinks-gen.go
@@ -558,6 +558,8 @@
 	// More examples can be found in description of getNormalizedUriPrefix
 	// in
 	// j/c/g/firebase/dynamiclinks/uri/DdlDomain.java
+	//
+	// Will fallback to dynamic_link_domain is this field is missing
 	DomainUriPrefix string `json:"domainUriPrefix,omitempty"`
 
 	// DynamicLinkDomain: Dynamic Links domain that the project owns, e.g.
@@ -568,7 +570,7 @@
 	// on how to set up Dynamic Link domain associated with your Firebase
 	// project.
 	//
-	// Required.
+	// Required if missing domain_uri_prefix.
 	DynamicLinkDomain string `json:"dynamicLinkDomain,omitempty"`
 
 	// IosInfo: iOS related information. See iOS related parameters in
@@ -1180,6 +1182,9 @@
 	// ios_fallback_link value on iPads.
 	IosIpadFallbackLink string `json:"iosIpadFallbackLink,omitempty"`
 
+	// IosMinimumVersion: iOS minimum version.
+	IosMinimumVersion string `json:"iosMinimumVersion,omitempty"`
+
 	// ForceSendFields is a list of field names (e.g. "IosAppStoreId") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
diff --git a/firebasehosting/v1beta1/firebasehosting-api.json b/firebasehosting/v1beta1/firebasehosting-api.json
index 5985360..a8d071d 100644
--- a/firebasehosting/v1beta1/firebasehosting-api.json
+++ b/firebasehosting/v1beta1/firebasehosting-api.json
@@ -114,6 +114,71 @@
   "protocol": "rest",
   "resources": {
     "sites": {
+      "methods": {
+        "getConfig": {
+          "description": "Gets the Hosting metadata for a specific site.",
+          "flatPath": "v1beta1/sites/{sitesId}/config",
+          "httpMethod": "GET",
+          "id": "firebasehosting.sites.getConfig",
+          "parameterOrder": [
+            "name"
+          ],
+          "parameters": {
+            "name": {
+              "description": "Required. The site for which to get the SiteConfig, in the format:\n\u003ccode\u003esites/\u003cvar\u003esite-name\u003c/var\u003e/config\u003c/code\u003e",
+              "location": "path",
+              "pattern": "^sites/[^/]+/config$",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "path": "v1beta1/{+name}",
+          "response": {
+            "$ref": "SiteConfig"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only",
+            "https://www.googleapis.com/auth/firebase",
+            "https://www.googleapis.com/auth/firebase.readonly"
+          ]
+        },
+        "updateConfig": {
+          "description": "Sets the Hosting metadata for a specific site.",
+          "flatPath": "v1beta1/sites/{sitesId}/config",
+          "httpMethod": "PATCH",
+          "id": "firebasehosting.sites.updateConfig",
+          "parameterOrder": [
+            "name"
+          ],
+          "parameters": {
+            "name": {
+              "description": "Required. The site for which to update the SiteConfig, in the format:\n\u003ccode\u003esites/\u003cvar\u003esite-name\u003c/var\u003e/config\u003c/code\u003e",
+              "location": "path",
+              "pattern": "^sites/[^/]+/config$",
+              "required": true,
+              "type": "string"
+            },
+            "updateMask": {
+              "description": "A set of field names from your [site configuration](../sites.SiteConfig)\nthat you want to update.\n\u003cbr\u003eA field will be overwritten if, and only if, it's in the mask.\n\u003cbr\u003eIf a mask is not provided then a default mask of only\n[`max_versions`](../sites.SiteConfig.max_versions) will be used.",
+              "format": "google-fieldmask",
+              "location": "query",
+              "type": "string"
+            }
+          },
+          "path": "v1beta1/{+name}",
+          "request": {
+            "$ref": "SiteConfig"
+          },
+          "response": {
+            "$ref": "SiteConfig"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/firebase"
+          ]
+        }
+      },
       "resources": {
         "domains": {
           "methods": {
@@ -539,7 +604,7 @@
       }
     }
   },
-  "revision": "20181004",
+  "revision": "20181116",
   "rootUrl": "https://firebasehosting.googleapis.com/",
   "schemas": {
     "ActingUser": {
@@ -989,6 +1054,18 @@
       },
       "type": "object"
     },
+    "SiteConfig": {
+      "description": "A `SiteConfig` contains metadata associated with a specific site that\ncontrols Firebase Hosting serving behavior",
+      "id": "SiteConfig",
+      "properties": {
+        "maxVersions": {
+          "description": "The number of FINALIZED versions that will be held for a site before\nautomatic deletion. When a new version is deployed, content for versions\nin storage in excess of this number will be deleted, and will no longer be\nbilled for storage usage. Oldest versions will be deleted first; sites are\ncreated with an unlimited number of max_versions by default.",
+          "format": "int64",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "Version": {
       "description": "A `Version` is the collection of configuration and\n[static files](sites.versions.files) that determine how a site is displayed.",
       "id": "Version",
diff --git a/firebasehosting/v1beta1/firebasehosting-gen.go b/firebasehosting/v1beta1/firebasehosting-gen.go
index dfa748f..bf33596 100644
--- a/firebasehosting/v1beta1/firebasehosting-gen.go
+++ b/firebasehosting/v1beta1/firebasehosting-gen.go
@@ -948,6 +948,48 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// SiteConfig: A `SiteConfig` contains metadata associated with a
+// specific site that
+// controls Firebase Hosting serving behavior
+type SiteConfig struct {
+	// MaxVersions: The number of FINALIZED versions that will be held for a
+	// site before
+	// automatic deletion. When a new version is deployed, content for
+	// versions
+	// in storage in excess of this number will be deleted, and will no
+	// longer be
+	// billed for storage usage. Oldest versions will be deleted first;
+	// sites are
+	// created with an unlimited number of max_versions by default.
+	MaxVersions int64 `json:"maxVersions,omitempty,string"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "MaxVersions") 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. "MaxVersions") 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 *SiteConfig) MarshalJSON() ([]byte, error) {
+	type NoMethod SiteConfig
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // Version: A `Version` is the collection of configuration and
 // [static files](sites.versions.files) that determine how a site is
 // displayed.
@@ -1112,6 +1154,311 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// method id "firebasehosting.sites.getConfig":
+
+type SitesGetConfigCall struct {
+	s            *Service
+	name         string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// GetConfig: Gets the Hosting metadata for a specific site.
+func (r *SitesService) GetConfig(name string) *SitesGetConfigCall {
+	c := &SitesGetConfigCall{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 *SitesGetConfigCall) Fields(s ...googleapi.Field) *SitesGetConfigCall {
+	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 *SitesGetConfigCall) IfNoneMatch(entityTag string) *SitesGetConfigCall {
+	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 *SitesGetConfigCall) Context(ctx context.Context) *SitesGetConfigCall {
+	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 *SitesGetConfigCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *SitesGetConfigCall) 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)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "firebasehosting.sites.getConfig" call.
+// Exactly one of *SiteConfig or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *SiteConfig.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 *SitesGetConfigCall) Do(opts ...googleapi.CallOption) (*SiteConfig, 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 := &SiteConfig{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets the Hosting metadata for a specific site.",
+	//   "flatPath": "v1beta1/sites/{sitesId}/config",
+	//   "httpMethod": "GET",
+	//   "id": "firebasehosting.sites.getConfig",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Required. The site for which to get the SiteConfig, in the format:\n\u003ccode\u003esites/\u003cvar\u003esite-name\u003c/var\u003e/config\u003c/code\u003e",
+	//       "location": "path",
+	//       "pattern": "^sites/[^/]+/config$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta1/{+name}",
+	//   "response": {
+	//     "$ref": "SiteConfig"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-platform.read-only",
+	//     "https://www.googleapis.com/auth/firebase",
+	//     "https://www.googleapis.com/auth/firebase.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "firebasehosting.sites.updateConfig":
+
+type SitesUpdateConfigCall struct {
+	s          *Service
+	name       string
+	siteconfig *SiteConfig
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// UpdateConfig: Sets the Hosting metadata for a specific site.
+func (r *SitesService) UpdateConfig(name string, siteconfig *SiteConfig) *SitesUpdateConfigCall {
+	c := &SitesUpdateConfigCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	c.siteconfig = siteconfig
+	return c
+}
+
+// UpdateMask sets the optional parameter "updateMask": A set of field
+// names from your [site configuration](../sites.SiteConfig)
+// that you want to update.
+// <br>A field will be overwritten if, and only if, it's in the
+// mask.
+// <br>If a mask is not provided then a default mask of
+// only
+// [`max_versions`](../sites.SiteConfig.max_versions) will be used.
+func (c *SitesUpdateConfigCall) UpdateMask(updateMask string) *SitesUpdateConfigCall {
+	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 *SitesUpdateConfigCall) Fields(s ...googleapi.Field) *SitesUpdateConfigCall {
+	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 *SitesUpdateConfigCall) Context(ctx context.Context) *SitesUpdateConfigCall {
+	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 *SitesUpdateConfigCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *SitesUpdateConfigCall) 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.siteconfig)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("PATCH", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "firebasehosting.sites.updateConfig" call.
+// Exactly one of *SiteConfig or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *SiteConfig.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 *SitesUpdateConfigCall) Do(opts ...googleapi.CallOption) (*SiteConfig, 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 := &SiteConfig{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Sets the Hosting metadata for a specific site.",
+	//   "flatPath": "v1beta1/sites/{sitesId}/config",
+	//   "httpMethod": "PATCH",
+	//   "id": "firebasehosting.sites.updateConfig",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Required. The site for which to update the SiteConfig, in the format:\n\u003ccode\u003esites/\u003cvar\u003esite-name\u003c/var\u003e/config\u003c/code\u003e",
+	//       "location": "path",
+	//       "pattern": "^sites/[^/]+/config$",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "updateMask": {
+	//       "description": "A set of field names from your [site configuration](../sites.SiteConfig)\nthat you want to update.\n\u003cbr\u003eA field will be overwritten if, and only if, it's in the mask.\n\u003cbr\u003eIf a mask is not provided then a default mask of only\n[`max_versions`](../sites.SiteConfig.max_versions) will be used.",
+	//       "format": "google-fieldmask",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta1/{+name}",
+	//   "request": {
+	//     "$ref": "SiteConfig"
+	//   },
+	//   "response": {
+	//     "$ref": "SiteConfig"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/firebase"
+	//   ]
+	// }
+
+}
+
 // method id "firebasehosting.sites.domains.create":
 
 type SitesDomainsCreateCall struct {
diff --git a/firestore/v1/firestore-api.json b/firestore/v1/firestore-api.json
index c24dc4a..52c2d7f 100644
--- a/firestore/v1/firestore-api.json
+++ b/firestore/v1/firestore-api.json
@@ -409,6 +409,494 @@
                 }
               }
             },
+            "documents": {
+              "methods": {
+                "batchGet": {
+                  "description": "Gets multiple documents.\n\nDocuments returned by this method are not guaranteed to be returned in the\nsame order that they were requested.",
+                  "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/documents:batchGet",
+                  "httpMethod": "POST",
+                  "id": "firestore.projects.databases.documents.batchGet",
+                  "parameterOrder": [
+                    "database"
+                  ],
+                  "parameters": {
+                    "database": {
+                      "description": "The database name. In the format:\n`projects/{project_id}/databases/{database_id}`.",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/databases/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/{+database}/documents:batchGet",
+                  "request": {
+                    "$ref": "BatchGetDocumentsRequest"
+                  },
+                  "response": {
+                    "$ref": "BatchGetDocumentsResponse"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/datastore"
+                  ]
+                },
+                "beginTransaction": {
+                  "description": "Starts a new transaction.",
+                  "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/documents:beginTransaction",
+                  "httpMethod": "POST",
+                  "id": "firestore.projects.databases.documents.beginTransaction",
+                  "parameterOrder": [
+                    "database"
+                  ],
+                  "parameters": {
+                    "database": {
+                      "description": "The database name. In the format:\n`projects/{project_id}/databases/{database_id}`.",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/databases/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/{+database}/documents:beginTransaction",
+                  "request": {
+                    "$ref": "BeginTransactionRequest"
+                  },
+                  "response": {
+                    "$ref": "BeginTransactionResponse"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/datastore"
+                  ]
+                },
+                "commit": {
+                  "description": "Commits a transaction, while optionally updating documents.",
+                  "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/documents:commit",
+                  "httpMethod": "POST",
+                  "id": "firestore.projects.databases.documents.commit",
+                  "parameterOrder": [
+                    "database"
+                  ],
+                  "parameters": {
+                    "database": {
+                      "description": "The database name. In the format:\n`projects/{project_id}/databases/{database_id}`.",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/databases/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/{+database}/documents:commit",
+                  "request": {
+                    "$ref": "CommitRequest"
+                  },
+                  "response": {
+                    "$ref": "CommitResponse"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/datastore"
+                  ]
+                },
+                "createDocument": {
+                  "description": "Creates a new document.",
+                  "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/documents/{documentsId}/{collectionId}",
+                  "httpMethod": "POST",
+                  "id": "firestore.projects.databases.documents.createDocument",
+                  "parameterOrder": [
+                    "parent",
+                    "collectionId"
+                  ],
+                  "parameters": {
+                    "collectionId": {
+                      "description": "The collection ID, relative to `parent`, to list. For example: `chatrooms`.",
+                      "location": "path",
+                      "required": true,
+                      "type": "string"
+                    },
+                    "documentId": {
+                      "description": "The client-assigned document ID to use for this document.\n\nOptional. If not specified, an ID will be assigned by the service.",
+                      "location": "query",
+                      "type": "string"
+                    },
+                    "mask.fieldPaths": {
+                      "description": "The list of field paths in the mask. See Document.fields for a field\npath syntax reference.",
+                      "location": "query",
+                      "repeated": true,
+                      "type": "string"
+                    },
+                    "parent": {
+                      "description": "The parent resource. For example:\n`projects/{project_id}/databases/{database_id}/documents` or\n`projects/{project_id}/databases/{database_id}/documents/chatrooms/{chatroom_id}`",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/databases/[^/]+/documents/.+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/{+parent}/{collectionId}",
+                  "request": {
+                    "$ref": "Document"
+                  },
+                  "response": {
+                    "$ref": "Document"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/datastore"
+                  ]
+                },
+                "delete": {
+                  "description": "Deletes a document.",
+                  "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/documents/{documentsId}/{documentsId1}",
+                  "httpMethod": "DELETE",
+                  "id": "firestore.projects.databases.documents.delete",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "parameters": {
+                    "currentDocument.exists": {
+                      "description": "When set to `true`, the target document must exist.\nWhen set to `false`, the target document must not exist.",
+                      "location": "query",
+                      "type": "boolean"
+                    },
+                    "currentDocument.updateTime": {
+                      "description": "When set, the target document must exist and have been last updated at\nthat time.",
+                      "format": "google-datetime",
+                      "location": "query",
+                      "type": "string"
+                    },
+                    "name": {
+                      "description": "The resource name of the Document to delete. In the format:\n`projects/{project_id}/databases/{database_id}/documents/{document_path}`.",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/databases/[^/]+/documents/[^/]+/.+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/{+name}",
+                  "response": {
+                    "$ref": "Empty"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/datastore"
+                  ]
+                },
+                "get": {
+                  "description": "Gets a single document.",
+                  "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/documents/{documentsId}/{documentsId1}",
+                  "httpMethod": "GET",
+                  "id": "firestore.projects.databases.documents.get",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "parameters": {
+                    "mask.fieldPaths": {
+                      "description": "The list of field paths in the mask. See Document.fields for a field\npath syntax reference.",
+                      "location": "query",
+                      "repeated": true,
+                      "type": "string"
+                    },
+                    "name": {
+                      "description": "The resource name of the Document to get. In the format:\n`projects/{project_id}/databases/{database_id}/documents/{document_path}`.",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/databases/[^/]+/documents/[^/]+/.+$",
+                      "required": true,
+                      "type": "string"
+                    },
+                    "readTime": {
+                      "description": "Reads the version of the document at the given time.\nThis may not be older than 60 seconds.",
+                      "format": "google-datetime",
+                      "location": "query",
+                      "type": "string"
+                    },
+                    "transaction": {
+                      "description": "Reads the document in a transaction.",
+                      "format": "byte",
+                      "location": "query",
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/{+name}",
+                  "response": {
+                    "$ref": "Document"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/datastore"
+                  ]
+                },
+                "list": {
+                  "description": "Lists documents.",
+                  "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/documents/{documentsId}/{documentsId1}/{collectionId}",
+                  "httpMethod": "GET",
+                  "id": "firestore.projects.databases.documents.list",
+                  "parameterOrder": [
+                    "parent",
+                    "collectionId"
+                  ],
+                  "parameters": {
+                    "collectionId": {
+                      "description": "The collection ID, relative to `parent`, to list. For example: `chatrooms`\nor `messages`.",
+                      "location": "path",
+                      "required": true,
+                      "type": "string"
+                    },
+                    "mask.fieldPaths": {
+                      "description": "The list of field paths in the mask. See Document.fields for a field\npath syntax reference.",
+                      "location": "query",
+                      "repeated": true,
+                      "type": "string"
+                    },
+                    "orderBy": {
+                      "description": "The order to sort results by. For example: `priority desc, name`.",
+                      "location": "query",
+                      "type": "string"
+                    },
+                    "pageSize": {
+                      "description": "The maximum number of documents to return.",
+                      "format": "int32",
+                      "location": "query",
+                      "type": "integer"
+                    },
+                    "pageToken": {
+                      "description": "The `next_page_token` value returned from a previous List request, if any.",
+                      "location": "query",
+                      "type": "string"
+                    },
+                    "parent": {
+                      "description": "The parent resource name. In the format:\n`projects/{project_id}/databases/{database_id}/documents` or\n`projects/{project_id}/databases/{database_id}/documents/{document_path}`.\nFor example:\n`projects/my-project/databases/my-database/documents` or\n`projects/my-project/databases/my-database/documents/chatrooms/my-chatroom`",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/databases/[^/]+/documents/[^/]+/.+$",
+                      "required": true,
+                      "type": "string"
+                    },
+                    "readTime": {
+                      "description": "Reads documents as they were at the given time.\nThis may not be older than 60 seconds.",
+                      "format": "google-datetime",
+                      "location": "query",
+                      "type": "string"
+                    },
+                    "showMissing": {
+                      "description": "If the list should show missing documents. A missing document is a\ndocument that does not exist but has sub-documents. These documents will\nbe returned with a key but will not have fields, Document.create_time,\nor Document.update_time set.\n\nRequests with `show_missing` may not specify `where` or\n`order_by`.",
+                      "location": "query",
+                      "type": "boolean"
+                    },
+                    "transaction": {
+                      "description": "Reads documents in a transaction.",
+                      "format": "byte",
+                      "location": "query",
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/{+parent}/{collectionId}",
+                  "response": {
+                    "$ref": "ListDocumentsResponse"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/datastore"
+                  ]
+                },
+                "listCollectionIds": {
+                  "description": "Lists all the collection IDs underneath a document.",
+                  "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/documents/{documentsId}/{documentsId1}:listCollectionIds",
+                  "httpMethod": "POST",
+                  "id": "firestore.projects.databases.documents.listCollectionIds",
+                  "parameterOrder": [
+                    "parent"
+                  ],
+                  "parameters": {
+                    "parent": {
+                      "description": "The parent document. In the format:\n`projects/{project_id}/databases/{database_id}/documents/{document_path}`.\nFor example:\n`projects/my-project/databases/my-database/documents/chatrooms/my-chatroom`",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/databases/[^/]+/documents/[^/]+/.+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/{+parent}:listCollectionIds",
+                  "request": {
+                    "$ref": "ListCollectionIdsRequest"
+                  },
+                  "response": {
+                    "$ref": "ListCollectionIdsResponse"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/datastore"
+                  ]
+                },
+                "listen": {
+                  "description": "Listens to changes.",
+                  "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/documents:listen",
+                  "httpMethod": "POST",
+                  "id": "firestore.projects.databases.documents.listen",
+                  "parameterOrder": [
+                    "database"
+                  ],
+                  "parameters": {
+                    "database": {
+                      "description": "The database name. In the format:\n`projects/{project_id}/databases/{database_id}`.",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/databases/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/{+database}/documents:listen",
+                  "request": {
+                    "$ref": "ListenRequest"
+                  },
+                  "response": {
+                    "$ref": "ListenResponse"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/datastore"
+                  ]
+                },
+                "patch": {
+                  "description": "Updates or inserts a document.",
+                  "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/documents/{documentsId}/{documentsId1}",
+                  "httpMethod": "PATCH",
+                  "id": "firestore.projects.databases.documents.patch",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "parameters": {
+                    "currentDocument.exists": {
+                      "description": "When set to `true`, the target document must exist.\nWhen set to `false`, the target document must not exist.",
+                      "location": "query",
+                      "type": "boolean"
+                    },
+                    "currentDocument.updateTime": {
+                      "description": "When set, the target document must exist and have been last updated at\nthat time.",
+                      "format": "google-datetime",
+                      "location": "query",
+                      "type": "string"
+                    },
+                    "mask.fieldPaths": {
+                      "description": "The list of field paths in the mask. See Document.fields for a field\npath syntax reference.",
+                      "location": "query",
+                      "repeated": true,
+                      "type": "string"
+                    },
+                    "name": {
+                      "description": "The resource name of the document, for example\n`projects/{project_id}/databases/{database_id}/documents/{document_path}`.",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/databases/[^/]+/documents/[^/]+/.+$",
+                      "required": true,
+                      "type": "string"
+                    },
+                    "updateMask.fieldPaths": {
+                      "description": "The list of field paths in the mask. See Document.fields for a field\npath syntax reference.",
+                      "location": "query",
+                      "repeated": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/{+name}",
+                  "request": {
+                    "$ref": "Document"
+                  },
+                  "response": {
+                    "$ref": "Document"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/datastore"
+                  ]
+                },
+                "rollback": {
+                  "description": "Rolls back a transaction.",
+                  "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/documents:rollback",
+                  "httpMethod": "POST",
+                  "id": "firestore.projects.databases.documents.rollback",
+                  "parameterOrder": [
+                    "database"
+                  ],
+                  "parameters": {
+                    "database": {
+                      "description": "The database name. In the format:\n`projects/{project_id}/databases/{database_id}`.",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/databases/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/{+database}/documents:rollback",
+                  "request": {
+                    "$ref": "RollbackRequest"
+                  },
+                  "response": {
+                    "$ref": "Empty"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/datastore"
+                  ]
+                },
+                "runQuery": {
+                  "description": "Runs a query.",
+                  "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/documents/{documentsId}/{documentsId1}:runQuery",
+                  "httpMethod": "POST",
+                  "id": "firestore.projects.databases.documents.runQuery",
+                  "parameterOrder": [
+                    "parent"
+                  ],
+                  "parameters": {
+                    "parent": {
+                      "description": "The parent resource name. In the format:\n`projects/{project_id}/databases/{database_id}/documents` or\n`projects/{project_id}/databases/{database_id}/documents/{document_path}`.\nFor example:\n`projects/my-project/databases/my-database/documents` or\n`projects/my-project/databases/my-database/documents/chatrooms/my-chatroom`",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/databases/[^/]+/documents/[^/]+/.+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/{+parent}:runQuery",
+                  "request": {
+                    "$ref": "RunQueryRequest"
+                  },
+                  "response": {
+                    "$ref": "RunQueryResponse"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/datastore"
+                  ]
+                },
+                "write": {
+                  "description": "Streams batches of document updates and deletes, in order.",
+                  "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/documents:write",
+                  "httpMethod": "POST",
+                  "id": "firestore.projects.databases.documents.write",
+                  "parameterOrder": [
+                    "database"
+                  ],
+                  "parameters": {
+                    "database": {
+                      "description": "The database name. In the format:\n`projects/{project_id}/databases/{database_id}`.\nThis is only required in the first message.",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/databases/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/{+database}/documents:write",
+                  "request": {
+                    "$ref": "WriteRequest"
+                  },
+                  "response": {
+                    "$ref": "WriteResponse"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/datastore"
+                  ]
+                }
+              }
+            },
             "operations": {
               "methods": {
                 "cancel": {
@@ -613,15 +1101,469 @@
       }
     }
   },
-  "revision": "20181020",
+  "revision": "20181121",
   "rootUrl": "https://firestore.googleapis.com/",
   "schemas": {
+    "ArrayValue": {
+      "description": "An array value.",
+      "id": "ArrayValue",
+      "properties": {
+        "values": {
+          "description": "Values in the array.",
+          "items": {
+            "$ref": "Value"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "BatchGetDocumentsRequest": {
+      "description": "The request for Firestore.BatchGetDocuments.",
+      "id": "BatchGetDocumentsRequest",
+      "properties": {
+        "documents": {
+          "description": "The names of the documents to retrieve. In the format:\n`projects/{project_id}/databases/{database_id}/documents/{document_path}`.\nThe request will fail if any of the document is not a child resource of the\ngiven `database`. Duplicate names will be elided.",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        },
+        "mask": {
+          "$ref": "DocumentMask",
+          "description": "The fields to return. If not set, returns all fields.\n\nIf a document has a field that is not present in this mask, that field will\nnot be returned in the response."
+        },
+        "newTransaction": {
+          "$ref": "TransactionOptions",
+          "description": "Starts a new transaction and reads the documents.\nDefaults to a read-only transaction.\nThe new transaction ID will be returned as the first response in the\nstream."
+        },
+        "readTime": {
+          "description": "Reads documents as they were at the given time.\nThis may not be older than 60 seconds.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "transaction": {
+          "description": "Reads documents in a transaction.",
+          "format": "byte",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "BatchGetDocumentsResponse": {
+      "description": "The streamed response for Firestore.BatchGetDocuments.",
+      "id": "BatchGetDocumentsResponse",
+      "properties": {
+        "found": {
+          "$ref": "Document",
+          "description": "A document that was requested."
+        },
+        "missing": {
+          "description": "A document name that was requested but does not exist. In the format:\n`projects/{project_id}/databases/{database_id}/documents/{document_path}`.",
+          "type": "string"
+        },
+        "readTime": {
+          "description": "The time at which the document was read.\nThis may be monotically increasing, in this case the previous documents in\nthe result stream are guaranteed not to have changed between their\nread_time and this one.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "transaction": {
+          "description": "The transaction that was started as part of this request.\nWill only be set in the first response, and only if\nBatchGetDocumentsRequest.new_transaction was set in the request.",
+          "format": "byte",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "BeginTransactionRequest": {
+      "description": "The request for Firestore.BeginTransaction.",
+      "id": "BeginTransactionRequest",
+      "properties": {
+        "options": {
+          "$ref": "TransactionOptions",
+          "description": "The options for the transaction.\nDefaults to a read-write transaction."
+        }
+      },
+      "type": "object"
+    },
+    "BeginTransactionResponse": {
+      "description": "The response for Firestore.BeginTransaction.",
+      "id": "BeginTransactionResponse",
+      "properties": {
+        "transaction": {
+          "description": "The transaction that was started.",
+          "format": "byte",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "CollectionSelector": {
+      "description": "A selection of a collection, such as `messages as m1`.",
+      "id": "CollectionSelector",
+      "properties": {
+        "allDescendants": {
+          "description": "When false, selects only collections that are immediate children of\nthe `parent` specified in the containing `RunQueryRequest`.\nWhen true, selects all descendant collections.",
+          "type": "boolean"
+        },
+        "collectionId": {
+          "description": "The collection ID.\nWhen set, selects only collections with this ID.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "CommitRequest": {
+      "description": "The request for Firestore.Commit.",
+      "id": "CommitRequest",
+      "properties": {
+        "transaction": {
+          "description": "If set, applies all writes in this transaction, and commits it.",
+          "format": "byte",
+          "type": "string"
+        },
+        "writes": {
+          "description": "The writes to apply.\n\nAlways executed atomically and in order.",
+          "items": {
+            "$ref": "Write"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "CommitResponse": {
+      "description": "The response for Firestore.Commit.",
+      "id": "CommitResponse",
+      "properties": {
+        "commitTime": {
+          "description": "The time at which the commit occurred.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "writeResults": {
+          "description": "The result of applying the writes.\n\nThis i-th write result corresponds to the i-th write in the\nrequest.",
+          "items": {
+            "$ref": "WriteResult"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "CompositeFilter": {
+      "description": "A filter that merges multiple other filters using the given operator.",
+      "id": "CompositeFilter",
+      "properties": {
+        "filters": {
+          "description": "The list of filters to combine.\nMust contain at least one filter.",
+          "items": {
+            "$ref": "Filter"
+          },
+          "type": "array"
+        },
+        "op": {
+          "description": "The operator for combining multiple filters.",
+          "enum": [
+            "OPERATOR_UNSPECIFIED",
+            "AND"
+          ],
+          "enumDescriptions": [
+            "Unspecified. This value must not be used.",
+            "The results are required to satisfy each of the combined filters."
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "Cursor": {
+      "description": "A position in a query result set.",
+      "id": "Cursor",
+      "properties": {
+        "before": {
+          "description": "If the position is just before or just after the given values, relative\nto the sort order defined by the query.",
+          "type": "boolean"
+        },
+        "values": {
+          "description": "The values that represent a position, in the order they appear in\nthe order by clause of a query.\n\nCan contain fewer values than specified in the order by clause.",
+          "items": {
+            "$ref": "Value"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "Document": {
+      "description": "A Firestore document.\n\nMust not exceed 1 MiB - 4 bytes.",
+      "id": "Document",
+      "properties": {
+        "createTime": {
+          "description": "Output only. The time at which the document was created.\n\nThis value increases monotonically when a document is deleted then\nrecreated. It can also be compared to values from other documents and\nthe `read_time` of a query.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "fields": {
+          "additionalProperties": {
+            "$ref": "Value"
+          },
+          "description": "The document's fields.\n\nThe map keys represent field names.\n\nA simple field name contains only characters `a` to `z`, `A` to `Z`,\n`0` to `9`, or `_`, and must not start with `0` to `9`. For example,\n`foo_bar_17`.\n\nField names matching the regular expression `__.*__` are reserved. Reserved\nfield names are forbidden except in certain documented contexts. The map\nkeys, represented as UTF-8, must not exceed 1,500 bytes and cannot be\nempty.\n\nField paths may be used in other contexts to refer to structured fields\ndefined here. For `map_value`, the field path is represented by the simple\nor quoted field names of the containing fields, delimited by `.`. For\nexample, the structured field\n`\"foo\" : { map_value: { \"x\u0026y\" : { string_value: \"hello\" }}}` would be\nrepresented by the field path `foo.x\u0026y`.\n\nWithin a field path, a quoted field name starts and ends with `` ` `` and\nmay contain any character. Some characters, including `` ` ``, must be\nescaped using a `\\`. For example, `` `x\u0026y` `` represents `x\u0026y` and\n`` `bak\\`tik` `` represents `` bak`tik ``.",
+          "type": "object"
+        },
+        "name": {
+          "description": "The resource name of the document, for example\n`projects/{project_id}/databases/{database_id}/documents/{document_path}`.",
+          "type": "string"
+        },
+        "updateTime": {
+          "description": "Output only. The time at which the document was last changed.\n\nThis value is initially set to the `create_time` then increases\nmonotonically with each change to the document. It can also be\ncompared to values from other documents and the `read_time` of a query.",
+          "format": "google-datetime",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "DocumentChange": {
+      "description": "A Document has changed.\n\nMay be the result of multiple writes, including deletes, that\nultimately resulted in a new value for the Document.\n\nMultiple DocumentChange messages may be returned for the same logical\nchange, if multiple targets are affected.",
+      "id": "DocumentChange",
+      "properties": {
+        "document": {
+          "$ref": "Document",
+          "description": "The new state of the Document.\n\nIf `mask` is set, contains only fields that were updated or added."
+        },
+        "removedTargetIds": {
+          "description": "A set of target IDs for targets that no longer match this document.",
+          "items": {
+            "format": "int32",
+            "type": "integer"
+          },
+          "type": "array"
+        },
+        "targetIds": {
+          "description": "A set of target IDs of targets that match this document.",
+          "items": {
+            "format": "int32",
+            "type": "integer"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "DocumentDelete": {
+      "description": "A Document has been deleted.\n\nMay be the result of multiple writes, including updates, the\nlast of which deleted the Document.\n\nMultiple DocumentDelete messages may be returned for the same logical\ndelete, if multiple targets are affected.",
+      "id": "DocumentDelete",
+      "properties": {
+        "document": {
+          "description": "The resource name of the Document that was deleted.",
+          "type": "string"
+        },
+        "readTime": {
+          "description": "The read timestamp at which the delete was observed.\n\nGreater or equal to the `commit_time` of the delete.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "removedTargetIds": {
+          "description": "A set of target IDs for targets that previously matched this entity.",
+          "items": {
+            "format": "int32",
+            "type": "integer"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "DocumentMask": {
+      "description": "A set of field paths on a document.\nUsed to restrict a get or update operation on a document to a subset of its\nfields.\nThis is different from standard field masks, as this is always scoped to a\nDocument, and takes in account the dynamic nature of Value.",
+      "id": "DocumentMask",
+      "properties": {
+        "fieldPaths": {
+          "description": "The list of field paths in the mask. See Document.fields for a field\npath syntax reference.",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "DocumentRemove": {
+      "description": "A Document has been removed from the view of the targets.\n\nSent if the document is no longer relevant to a target and is out of view.\nCan be sent instead of a DocumentDelete or a DocumentChange if the server\ncan not send the new value of the document.\n\nMultiple DocumentRemove messages may be returned for the same logical\nwrite or delete, if multiple targets are affected.",
+      "id": "DocumentRemove",
+      "properties": {
+        "document": {
+          "description": "The resource name of the Document that has gone out of view.",
+          "type": "string"
+        },
+        "readTime": {
+          "description": "The read timestamp at which the remove was observed.\n\nGreater or equal to the `commit_time` of the change/delete/remove.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "removedTargetIds": {
+          "description": "A set of target IDs for targets that previously matched this document.",
+          "items": {
+            "format": "int32",
+            "type": "integer"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "DocumentTransform": {
+      "description": "A transformation of a document.",
+      "id": "DocumentTransform",
+      "properties": {
+        "document": {
+          "description": "The name of the document to transform.",
+          "type": "string"
+        },
+        "fieldTransforms": {
+          "description": "The list of transformations to apply to the fields of the document, in\norder.\nThis must not be empty.",
+          "items": {
+            "$ref": "FieldTransform"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "DocumentsTarget": {
+      "description": "A target specified by a set of documents names.",
+      "id": "DocumentsTarget",
+      "properties": {
+        "documents": {
+          "description": "The names of the documents to retrieve. In the format:\n`projects/{project_id}/databases/{database_id}/documents/{document_path}`.\nThe request will fail if any of the document is not a child resource of\nthe given `database`. Duplicate names will be elided.",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        }
+      },
+      "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 `{}`.",
       "id": "Empty",
       "properties": {},
       "type": "object"
     },
+    "ExistenceFilter": {
+      "description": "A digest of all the documents that match a given target.",
+      "id": "ExistenceFilter",
+      "properties": {
+        "count": {
+          "description": "The total count of documents that match target_id.\n\nIf different from the count of documents in the client that match, the\nclient must manually determine which documents no longer match the target.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "targetId": {
+          "description": "The target ID to which this filter applies.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "type": "object"
+    },
+    "FieldFilter": {
+      "description": "A filter on a specific field.",
+      "id": "FieldFilter",
+      "properties": {
+        "field": {
+          "$ref": "FieldReference",
+          "description": "The field to filter by."
+        },
+        "op": {
+          "description": "The operator to filter by.",
+          "enum": [
+            "OPERATOR_UNSPECIFIED",
+            "LESS_THAN",
+            "LESS_THAN_OR_EQUAL",
+            "GREATER_THAN",
+            "GREATER_THAN_OR_EQUAL",
+            "EQUAL",
+            "ARRAY_CONTAINS"
+          ],
+          "enumDescriptions": [
+            "Unspecified. This value must not be used.",
+            "Less than. Requires that the field come first in `order_by`.",
+            "Less than or equal. Requires that the field come first in `order_by`.",
+            "Greater than. Requires that the field come first in `order_by`.",
+            "Greater than or equal. Requires that the field come first in\n`order_by`.",
+            "Equal.",
+            "Contains. Requires that the field is an array."
+          ],
+          "type": "string"
+        },
+        "value": {
+          "$ref": "Value",
+          "description": "The value to compare to."
+        }
+      },
+      "type": "object"
+    },
+    "FieldReference": {
+      "description": "A reference to a field, such as `max(messages.time) as max_time`.",
+      "id": "FieldReference",
+      "properties": {
+        "fieldPath": {
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "FieldTransform": {
+      "description": "A transformation of a field of the document.",
+      "id": "FieldTransform",
+      "properties": {
+        "appendMissingElements": {
+          "$ref": "ArrayValue",
+          "description": "Append the given elements in order if they are not already present in\nthe current field value.\nIf the field is not an array, or if the field does not yet exist, it is\nfirst set to the empty array.\n\nEquivalent numbers of different types (e.g. 3L and 3.0) are\nconsidered equal when checking if a value is missing.\nNaN is equal to NaN, and Null is equal to Null.\nIf the input contains multiple equivalent values, only the first will\nbe considered.\n\nThe corresponding transform_result will be the null value."
+        },
+        "fieldPath": {
+          "description": "The path of the field. See Document.fields for the field path syntax\nreference.",
+          "type": "string"
+        },
+        "removeAllFromArray": {
+          "$ref": "ArrayValue",
+          "description": "Remove all of the given elements from the array in the field.\nIf the field is not an array, or if the field does not yet exist, it is\nset to the empty array.\n\nEquivalent numbers of the different types (e.g. 3L and 3.0) are\nconsidered equal when deciding whether an element should be removed.\nNaN is equal to NaN, and Null is equal to Null.\nThis will remove all equivalent values if there are duplicates.\n\nThe corresponding transform_result will be the null value."
+        },
+        "setToServerValue": {
+          "description": "Sets the field to the given server value.",
+          "enum": [
+            "SERVER_VALUE_UNSPECIFIED",
+            "REQUEST_TIME"
+          ],
+          "enumDescriptions": [
+            "Unspecified. This value must not be used.",
+            "The time at which the server processed the request, with millisecond\nprecision."
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "Filter": {
+      "description": "A filter.",
+      "id": "Filter",
+      "properties": {
+        "compositeFilter": {
+          "$ref": "CompositeFilter",
+          "description": "A composite filter."
+        },
+        "fieldFilter": {
+          "$ref": "FieldFilter",
+          "description": "A filter on a document field."
+        },
+        "unaryFilter": {
+          "$ref": "UnaryFilter",
+          "description": "A filter that takes exactly one argument."
+        }
+      },
+      "type": "object"
+    },
     "GoogleFirestoreAdminV1ExportDocumentsMetadata": {
       "description": "Metadata for google.longrunning.Operation results from\nFirestoreAdmin.ExportDocuments.",
       "id": "GoogleFirestoreAdminV1ExportDocumentsMetadata",
@@ -1169,6 +2111,75 @@
       },
       "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.",
+      "id": "LatLng",
+      "properties": {
+        "latitude": {
+          "description": "The latitude in degrees. It must be in the range [-90.0, +90.0].",
+          "format": "double",
+          "type": "number"
+        },
+        "longitude": {
+          "description": "The longitude in degrees. It must be in the range [-180.0, +180.0].",
+          "format": "double",
+          "type": "number"
+        }
+      },
+      "type": "object"
+    },
+    "ListCollectionIdsRequest": {
+      "description": "The request for Firestore.ListCollectionIds.",
+      "id": "ListCollectionIdsRequest",
+      "properties": {
+        "pageSize": {
+          "description": "The maximum number of results to return.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "pageToken": {
+          "description": "A page token. Must be a value from\nListCollectionIdsResponse.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "ListCollectionIdsResponse": {
+      "description": "The response from Firestore.ListCollectionIds.",
+      "id": "ListCollectionIdsResponse",
+      "properties": {
+        "collectionIds": {
+          "description": "The collection ids.",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        },
+        "nextPageToken": {
+          "description": "A page token that may be used to continue the list.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "ListDocumentsResponse": {
+      "description": "The response for Firestore.ListDocuments.",
+      "id": "ListDocumentsResponse",
+      "properties": {
+        "documents": {
+          "description": "The Documents found.",
+          "items": {
+            "$ref": "Document"
+          },
+          "type": "array"
+        },
+        "nextPageToken": {
+          "description": "The next page token.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "ListLocationsResponse": {
       "description": "The response message for Locations.ListLocations.",
       "id": "ListLocationsResponse",
@@ -1187,6 +2198,56 @@
       },
       "type": "object"
     },
+    "ListenRequest": {
+      "description": "A request for Firestore.Listen",
+      "id": "ListenRequest",
+      "properties": {
+        "addTarget": {
+          "$ref": "Target",
+          "description": "A target to add to this stream."
+        },
+        "labels": {
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "Labels associated with this target change.",
+          "type": "object"
+        },
+        "removeTarget": {
+          "description": "The ID of a target to remove from this stream.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "type": "object"
+    },
+    "ListenResponse": {
+      "description": "The response for Firestore.Listen.",
+      "id": "ListenResponse",
+      "properties": {
+        "documentChange": {
+          "$ref": "DocumentChange",
+          "description": "A Document has changed."
+        },
+        "documentDelete": {
+          "$ref": "DocumentDelete",
+          "description": "A Document has been deleted."
+        },
+        "documentRemove": {
+          "$ref": "DocumentRemove",
+          "description": "A Document has been removed from a target (because it is no longer\nrelevant to that target)."
+        },
+        "filter": {
+          "$ref": "ExistenceFilter",
+          "description": "A filter to apply to the set of documents previously returned for the\ngiven target.\n\nReturned when documents may have been removed from the given target, but\nthe exact documents are unknown."
+        },
+        "targetChange": {
+          "$ref": "TargetChange",
+          "description": "Targets have changed."
+        }
+      },
+      "type": "object"
+    },
     "Location": {
       "description": "A resource that represents Google Cloud Platform location.",
       "id": "Location",
@@ -1221,6 +2282,177 @@
       },
       "type": "object"
     },
+    "MapValue": {
+      "description": "A map value.",
+      "id": "MapValue",
+      "properties": {
+        "fields": {
+          "additionalProperties": {
+            "$ref": "Value"
+          },
+          "description": "The map's fields.\n\nThe map keys represent field names. Field names matching the regular\nexpression `__.*__` are reserved. Reserved field names are forbidden except\nin certain documented contexts. The map keys, represented as UTF-8, must\nnot exceed 1,500 bytes and cannot be empty.",
+          "type": "object"
+        }
+      },
+      "type": "object"
+    },
+    "Order": {
+      "description": "An order on a field.",
+      "id": "Order",
+      "properties": {
+        "direction": {
+          "description": "The direction to order by. Defaults to `ASCENDING`.",
+          "enum": [
+            "DIRECTION_UNSPECIFIED",
+            "ASCENDING",
+            "DESCENDING"
+          ],
+          "enumDescriptions": [
+            "Unspecified.",
+            "Ascending.",
+            "Descending."
+          ],
+          "type": "string"
+        },
+        "field": {
+          "$ref": "FieldReference",
+          "description": "The field to order by."
+        }
+      },
+      "type": "object"
+    },
+    "Precondition": {
+      "description": "A precondition on a document, used for conditional operations.",
+      "id": "Precondition",
+      "properties": {
+        "exists": {
+          "description": "When set to `true`, the target document must exist.\nWhen set to `false`, the target document must not exist.",
+          "type": "boolean"
+        },
+        "updateTime": {
+          "description": "When set, the target document must exist and have been last updated at\nthat time.",
+          "format": "google-datetime",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "Projection": {
+      "description": "The projection of document's fields to return.",
+      "id": "Projection",
+      "properties": {
+        "fields": {
+          "description": "The fields to return.\n\nIf empty, all fields are returned. To only return the name\nof the document, use `['__name__']`.",
+          "items": {
+            "$ref": "FieldReference"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "QueryTarget": {
+      "description": "A target specified by a query.",
+      "id": "QueryTarget",
+      "properties": {
+        "parent": {
+          "description": "The parent resource name. In the format:\n`projects/{project_id}/databases/{database_id}/documents` or\n`projects/{project_id}/databases/{database_id}/documents/{document_path}`.\nFor example:\n`projects/my-project/databases/my-database/documents` or\n`projects/my-project/databases/my-database/documents/chatrooms/my-chatroom`",
+          "type": "string"
+        },
+        "structuredQuery": {
+          "$ref": "StructuredQuery",
+          "description": "A structured query."
+        }
+      },
+      "type": "object"
+    },
+    "ReadOnly": {
+      "description": "Options for a transaction that can only be used to read documents.",
+      "id": "ReadOnly",
+      "properties": {
+        "readTime": {
+          "description": "Reads documents at the given time.\nThis may not be older than 60 seconds.",
+          "format": "google-datetime",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "ReadWrite": {
+      "description": "Options for a transaction that can be used to read and write documents.",
+      "id": "ReadWrite",
+      "properties": {
+        "retryTransaction": {
+          "description": "An optional transaction to retry.",
+          "format": "byte",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "RollbackRequest": {
+      "description": "The request for Firestore.Rollback.",
+      "id": "RollbackRequest",
+      "properties": {
+        "transaction": {
+          "description": "The transaction to roll back.",
+          "format": "byte",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "RunQueryRequest": {
+      "description": "The request for Firestore.RunQuery.",
+      "id": "RunQueryRequest",
+      "properties": {
+        "newTransaction": {
+          "$ref": "TransactionOptions",
+          "description": "Starts a new transaction and reads the documents.\nDefaults to a read-only transaction.\nThe new transaction ID will be returned as the first response in the\nstream."
+        },
+        "readTime": {
+          "description": "Reads documents as they were at the given time.\nThis may not be older than 60 seconds.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "structuredQuery": {
+          "$ref": "StructuredQuery",
+          "description": "A structured query."
+        },
+        "transaction": {
+          "description": "Reads documents in a transaction.",
+          "format": "byte",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "RunQueryResponse": {
+      "description": "The response for Firestore.RunQuery.",
+      "id": "RunQueryResponse",
+      "properties": {
+        "document": {
+          "$ref": "Document",
+          "description": "A query result.\nNot set when reporting partial progress."
+        },
+        "readTime": {
+          "description": "The time at which the document was read. This may be monotonically\nincreasing; in this case, the previous documents in the result stream are\nguaranteed not to have changed between their `read_time` and this one.\n\nIf the query returns no results, a response with `read_time` and no\n`document` will be sent, and this represents the time at which the query\nwas run.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "skippedResults": {
+          "description": "The number of results that have been skipped due to an offset between\nthe last response and the current response.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "transaction": {
+          "description": "The transaction that was started as part of this request.\nCan only be set in the first response, and only if\nRunQueryRequest.new_transaction was set in the request.\nIf set, no other fields will be set in this response.",
+          "format": "byte",
+          "type": "string"
+        }
+      },
+      "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` that 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.\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",
@@ -1247,6 +2479,339 @@
         }
       },
       "type": "object"
+    },
+    "StructuredQuery": {
+      "description": "A Firestore query.",
+      "id": "StructuredQuery",
+      "properties": {
+        "endAt": {
+          "$ref": "Cursor",
+          "description": "A end point for the query results."
+        },
+        "from": {
+          "description": "The collections to query.",
+          "items": {
+            "$ref": "CollectionSelector"
+          },
+          "type": "array"
+        },
+        "limit": {
+          "description": "The maximum number of results to return.\n\nApplies after all other constraints.\nMust be \u003e= 0 if specified.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "offset": {
+          "description": "The number of results to skip.\n\nApplies before limit, but after all other constraints. Must be \u003e= 0 if\nspecified.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "orderBy": {
+          "description": "The order to apply to the query results.\n\nFirestore guarantees a stable ordering through the following rules:\n\n * Any field required to appear in `order_by`, that is not already\n   specified in `order_by`, is appended to the order in field name order\n   by default.\n * If an order on `__name__` is not specified, it is appended by default.\n\nFields are appended with the same sort direction as the last order\nspecified, or 'ASCENDING' if no order was specified. For example:\n\n * `SELECT * FROM Foo ORDER BY A` becomes\n   `SELECT * FROM Foo ORDER BY A, __name__`\n * `SELECT * FROM Foo ORDER BY A DESC` becomes\n   `SELECT * FROM Foo ORDER BY A DESC, __name__ DESC`\n * `SELECT * FROM Foo WHERE A \u003e 1` becomes\n   `SELECT * FROM Foo WHERE A \u003e 1 ORDER BY A, __name__`",
+          "items": {
+            "$ref": "Order"
+          },
+          "type": "array"
+        },
+        "select": {
+          "$ref": "Projection",
+          "description": "The projection to return."
+        },
+        "startAt": {
+          "$ref": "Cursor",
+          "description": "A starting point for the query results."
+        },
+        "where": {
+          "$ref": "Filter",
+          "description": "The filter to apply."
+        }
+      },
+      "type": "object"
+    },
+    "Target": {
+      "description": "A specification of a set of documents to listen to.",
+      "id": "Target",
+      "properties": {
+        "documents": {
+          "$ref": "DocumentsTarget",
+          "description": "A target specified by a set of document names."
+        },
+        "once": {
+          "description": "If the target should be removed once it is current and consistent.",
+          "type": "boolean"
+        },
+        "query": {
+          "$ref": "QueryTarget",
+          "description": "A target specified by a query."
+        },
+        "readTime": {
+          "description": "Start listening after a specific `read_time`.\n\nThe client must know the state of matching documents at this time.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "resumeToken": {
+          "description": "A resume token from a prior TargetChange for an identical target.\n\nUsing a resume token with a different target is unsupported and may fail.",
+          "format": "byte",
+          "type": "string"
+        },
+        "targetId": {
+          "description": "A client provided target ID.\n\nIf not set, the server will assign an ID for the target.\n\nUsed for resuming a target without changing IDs. The IDs can either be\nclient-assigned or be server-assigned in a previous stream. All targets\nwith client provided IDs must be added before adding a target that needs\na server-assigned id.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "type": "object"
+    },
+    "TargetChange": {
+      "description": "Targets being watched have changed.",
+      "id": "TargetChange",
+      "properties": {
+        "cause": {
+          "$ref": "Status",
+          "description": "The error that resulted in this change, if applicable."
+        },
+        "readTime": {
+          "description": "The consistent `read_time` for the given `target_ids` (omitted when the\ntarget_ids are not at a consistent snapshot).\n\nThe stream is guaranteed to send a `read_time` with `target_ids` empty\nwhenever the entire stream reaches a new consistent snapshot. ADD,\nCURRENT, and RESET messages are guaranteed to (eventually) result in a\nnew consistent snapshot (while NO_CHANGE and REMOVE messages are not).\n\nFor a given stream, `read_time` is guaranteed to be monotonically\nincreasing.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "resumeToken": {
+          "description": "A token that can be used to resume the stream for the given `target_ids`,\nor all targets if `target_ids` is empty.\n\nNot set on every target change.",
+          "format": "byte",
+          "type": "string"
+        },
+        "targetChangeType": {
+          "description": "The type of change that occurred.",
+          "enum": [
+            "NO_CHANGE",
+            "ADD",
+            "REMOVE",
+            "CURRENT",
+            "RESET"
+          ],
+          "enumDescriptions": [
+            "No change has occurred. Used only to send an updated `resume_token`.",
+            "The targets have been added.",
+            "The targets have been removed.",
+            "The targets reflect all changes committed before the targets were added\nto the stream.\n\nThis will be sent after or with a `read_time` that is greater than or\nequal to the time at which the targets were added.\n\nListeners can wait for this change if read-after-write semantics\nare desired.",
+            "The targets have been reset, and a new initial state for the targets\nwill be returned in subsequent changes.\n\nAfter the initial state is complete, `CURRENT` will be returned even\nif the target was previously indicated to be `CURRENT`."
+          ],
+          "type": "string"
+        },
+        "targetIds": {
+          "description": "The target IDs of targets that have changed.\n\nIf empty, the change applies to all targets.\n\nFor `target_change_type=ADD`, the order of the target IDs matches the order\nof the requests to add the targets. This allows clients to unambiguously\nassociate server-assigned target IDs with added targets.\n\nFor other states, the order of the target IDs is not defined.",
+          "items": {
+            "format": "int32",
+            "type": "integer"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "TransactionOptions": {
+      "description": "Options for creating a new transaction.",
+      "id": "TransactionOptions",
+      "properties": {
+        "readOnly": {
+          "$ref": "ReadOnly",
+          "description": "The transaction can only be used for read operations."
+        },
+        "readWrite": {
+          "$ref": "ReadWrite",
+          "description": "The transaction can be used for both read and write operations."
+        }
+      },
+      "type": "object"
+    },
+    "UnaryFilter": {
+      "description": "A filter with a single operand.",
+      "id": "UnaryFilter",
+      "properties": {
+        "field": {
+          "$ref": "FieldReference",
+          "description": "The field to which to apply the operator."
+        },
+        "op": {
+          "description": "The unary operator to apply.",
+          "enum": [
+            "OPERATOR_UNSPECIFIED",
+            "IS_NAN",
+            "IS_NULL"
+          ],
+          "enumDescriptions": [
+            "Unspecified. This value must not be used.",
+            "Test if a field is equal to NaN.",
+            "Test if an exprestion evaluates to Null."
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "Value": {
+      "description": "A message that can hold any of the supported value types.",
+      "id": "Value",
+      "properties": {
+        "arrayValue": {
+          "$ref": "ArrayValue",
+          "description": "An array value.\n\nCannot directly contain another array value, though can contain an\nmap which contains another array."
+        },
+        "booleanValue": {
+          "description": "A boolean value.",
+          "type": "boolean"
+        },
+        "bytesValue": {
+          "description": "A bytes value.\n\nMust not exceed 1 MiB - 89 bytes.\nOnly the first 1,500 bytes are considered by queries.",
+          "format": "byte",
+          "type": "string"
+        },
+        "doubleValue": {
+          "description": "A double value.",
+          "format": "double",
+          "type": "number"
+        },
+        "geoPointValue": {
+          "$ref": "LatLng",
+          "description": "A geo point value representing a point on the surface of Earth."
+        },
+        "integerValue": {
+          "description": "An integer value.",
+          "format": "int64",
+          "type": "string"
+        },
+        "mapValue": {
+          "$ref": "MapValue",
+          "description": "A map value."
+        },
+        "nullValue": {
+          "description": "A null value.",
+          "enum": [
+            "NULL_VALUE"
+          ],
+          "enumDescriptions": [
+            "Null value."
+          ],
+          "type": "string"
+        },
+        "referenceValue": {
+          "description": "A reference to a document. For example:\n`projects/{project_id}/databases/{database_id}/documents/{document_path}`.",
+          "type": "string"
+        },
+        "stringValue": {
+          "description": "A string value.\n\nThe string, represented as UTF-8, must not exceed 1 MiB - 89 bytes.\nOnly the first 1,500 bytes of the UTF-8 representation are considered by\nqueries.",
+          "type": "string"
+        },
+        "timestampValue": {
+          "description": "A timestamp value.\n\nPrecise only to microseconds. When stored, any additional precision is\nrounded down.",
+          "format": "google-datetime",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "Write": {
+      "description": "A write on a document.",
+      "id": "Write",
+      "properties": {
+        "currentDocument": {
+          "$ref": "Precondition",
+          "description": "An optional precondition on the document.\n\nThe write will fail if this is set and not met by the target document."
+        },
+        "delete": {
+          "description": "A document name to delete. In the format:\n`projects/{project_id}/databases/{database_id}/documents/{document_path}`.",
+          "type": "string"
+        },
+        "transform": {
+          "$ref": "DocumentTransform",
+          "description": "Applies a tranformation to a document.\nAt most one `transform` per document is allowed in a given request.\nAn `update` cannot follow a `transform` on the same document in a given\nrequest."
+        },
+        "update": {
+          "$ref": "Document",
+          "description": "A document to write."
+        },
+        "updateMask": {
+          "$ref": "DocumentMask",
+          "description": "The fields to update in this write.\n\nThis field can be set only when the operation is `update`.\nIf the mask is not set for an `update` and the document exists, any\nexisting data will be overwritten.\nIf the mask is set and the document on the server has fields not covered by\nthe mask, they are left unchanged.\nFields referenced in the mask, but not present in the input document, are\ndeleted from the document on the server.\nThe field paths in this mask must not contain a reserved field name."
+        }
+      },
+      "type": "object"
+    },
+    "WriteRequest": {
+      "description": "The request for Firestore.Write.\n\nThe first request creates a stream, or resumes an existing one from a token.\n\nWhen creating a new stream, the server replies with a response containing\nonly an ID and a token, to use in the next request.\n\nWhen resuming a stream, the server first streams any responses later than the\ngiven token, then a response containing only an up-to-date token, to use in\nthe next request.",
+      "id": "WriteRequest",
+      "properties": {
+        "labels": {
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "Labels associated with this write request.",
+          "type": "object"
+        },
+        "streamId": {
+          "description": "The ID of the write stream to resume.\nThis may only be set in the first message. When left empty, a new write\nstream will be created.",
+          "type": "string"
+        },
+        "streamToken": {
+          "description": "A stream token that was previously sent by the server.\n\nThe client should set this field to the token from the most recent\nWriteResponse it has received. This acknowledges that the client has\nreceived responses up to this token. After sending this token, earlier\ntokens may not be used anymore.\n\nThe server may close the stream if there are too many unacknowledged\nresponses.\n\nLeave this field unset when creating a new stream. To resume a stream at\na specific point, set this field and the `stream_id` field.\n\nLeave this field unset when creating a new stream.",
+          "format": "byte",
+          "type": "string"
+        },
+        "writes": {
+          "description": "The writes to apply.\n\nAlways executed atomically and in order.\nThis must be empty on the first request.\nThis may be empty on the last request.\nThis must not be empty on all other requests.",
+          "items": {
+            "$ref": "Write"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "WriteResponse": {
+      "description": "The response for Firestore.Write.",
+      "id": "WriteResponse",
+      "properties": {
+        "commitTime": {
+          "description": "The time at which the commit occurred.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "streamId": {
+          "description": "The ID of the stream.\nOnly set on the first message, when a new stream was created.",
+          "type": "string"
+        },
+        "streamToken": {
+          "description": "A token that represents the position of this response in the stream.\nThis can be used by a client to resume the stream at this point.\n\nThis field is always set.",
+          "format": "byte",
+          "type": "string"
+        },
+        "writeResults": {
+          "description": "The result of applying the writes.\n\nThis i-th write result corresponds to the i-th write in the\nrequest.",
+          "items": {
+            "$ref": "WriteResult"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "WriteResult": {
+      "description": "The result of applying a write.",
+      "id": "WriteResult",
+      "properties": {
+        "transformResults": {
+          "description": "The results of applying each DocumentTransform.FieldTransform, in the\nsame order.",
+          "items": {
+            "$ref": "Value"
+          },
+          "type": "array"
+        },
+        "updateTime": {
+          "description": "The last update time of the document after applying the write. Not set\nafter a `delete`.\n\nIf the write did not actually change the document, this will be the\nprevious update_time.",
+          "format": "google-datetime",
+          "type": "string"
+        }
+      },
+      "type": "object"
     }
   },
   "servicePath": "",
diff --git a/firestore/v1/firestore-gen.go b/firestore/v1/firestore-gen.go
index c2736af..7f9e1b4 100644
--- a/firestore/v1/firestore-gen.go
+++ b/firestore/v1/firestore-gen.go
@@ -113,6 +113,7 @@
 func NewProjectsDatabasesService(s *Service) *ProjectsDatabasesService {
 	rs := &ProjectsDatabasesService{s: s}
 	rs.CollectionGroups = NewProjectsDatabasesCollectionGroupsService(s)
+	rs.Documents = NewProjectsDatabasesDocumentsService(s)
 	rs.Operations = NewProjectsDatabasesOperationsService(s)
 	return rs
 }
@@ -122,6 +123,8 @@
 
 	CollectionGroups *ProjectsDatabasesCollectionGroupsService
 
+	Documents *ProjectsDatabasesDocumentsService
+
 	Operations *ProjectsDatabasesOperationsService
 }
 
@@ -158,6 +161,15 @@
 	s *Service
 }
 
+func NewProjectsDatabasesDocumentsService(s *Service) *ProjectsDatabasesDocumentsService {
+	rs := &ProjectsDatabasesDocumentsService{s: s}
+	return rs
+}
+
+type ProjectsDatabasesDocumentsService struct {
+	s *Service
+}
+
 func NewProjectsDatabasesOperationsService(s *Service) *ProjectsDatabasesOperationsService {
 	rs := &ProjectsDatabasesOperationsService{s: s}
 	return rs
@@ -176,6 +188,731 @@
 	s *Service
 }
 
+// ArrayValue: An array value.
+type ArrayValue struct {
+	// Values: Values in the array.
+	Values []*Value `json:"values,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Values") 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. "Values") 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 *ArrayValue) MarshalJSON() ([]byte, error) {
+	type NoMethod ArrayValue
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// BatchGetDocumentsRequest: The request for
+// Firestore.BatchGetDocuments.
+type BatchGetDocumentsRequest struct {
+	// Documents: The names of the documents to retrieve. In the
+	// format:
+	// `projects/{project_id}/databases/{database_id}/documents/{docu
+	// ment_path}`.
+	// The request will fail if any of the document is not a child resource
+	// of the
+	// given `database`. Duplicate names will be elided.
+	Documents []string `json:"documents,omitempty"`
+
+	// Mask: The fields to return. If not set, returns all fields.
+	//
+	// If a document has a field that is not present in this mask, that
+	// field will
+	// not be returned in the response.
+	Mask *DocumentMask `json:"mask,omitempty"`
+
+	// NewTransaction: Starts a new transaction and reads the
+	// documents.
+	// Defaults to a read-only transaction.
+	// The new transaction ID will be returned as the first response in
+	// the
+	// stream.
+	NewTransaction *TransactionOptions `json:"newTransaction,omitempty"`
+
+	// ReadTime: Reads documents as they were at the given time.
+	// This may not be older than 60 seconds.
+	ReadTime string `json:"readTime,omitempty"`
+
+	// Transaction: Reads documents in a transaction.
+	Transaction string `json:"transaction,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Documents") 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. "Documents") 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 *BatchGetDocumentsRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod BatchGetDocumentsRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// BatchGetDocumentsResponse: The streamed response for
+// Firestore.BatchGetDocuments.
+type BatchGetDocumentsResponse struct {
+	// Found: A document that was requested.
+	Found *Document `json:"found,omitempty"`
+
+	// Missing: A document name that was requested but does not exist. In
+	// the
+	// format:
+	// `projects/{project_id}/databases/{database_id}/documents/{docu
+	// ment_path}`.
+	Missing string `json:"missing,omitempty"`
+
+	// ReadTime: The time at which the document was read.
+	// This may be monotically increasing, in this case the previous
+	// documents in
+	// the result stream are guaranteed not to have changed between
+	// their
+	// read_time and this one.
+	ReadTime string `json:"readTime,omitempty"`
+
+	// Transaction: The transaction that was started as part of this
+	// request.
+	// Will only be set in the first response, and only
+	// if
+	// BatchGetDocumentsRequest.new_transaction was set in the request.
+	Transaction string `json:"transaction,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Found") 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. "Found") 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 *BatchGetDocumentsResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod BatchGetDocumentsResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// BeginTransactionRequest: The request for Firestore.BeginTransaction.
+type BeginTransactionRequest struct {
+	// Options: The options for the transaction.
+	// Defaults to a read-write 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)
+}
+
+// BeginTransactionResponse: The response for
+// Firestore.BeginTransaction.
+type BeginTransactionResponse struct {
+	// Transaction: The transaction that was started.
+	Transaction string `json:"transaction,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Transaction") 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. "Transaction") 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 *BeginTransactionResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod BeginTransactionResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// CollectionSelector: A selection of a collection, such as `messages as
+// m1`.
+type CollectionSelector struct {
+	// AllDescendants: When false, selects only collections that are
+	// immediate children of
+	// the `parent` specified in the containing `RunQueryRequest`.
+	// When true, selects all descendant collections.
+	AllDescendants bool `json:"allDescendants,omitempty"`
+
+	// CollectionId: The collection ID.
+	// When set, selects only collections with this ID.
+	CollectionId string `json:"collectionId,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "AllDescendants") 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. "AllDescendants") 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 *CollectionSelector) MarshalJSON() ([]byte, error) {
+	type NoMethod CollectionSelector
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// CommitRequest: The request for Firestore.Commit.
+type CommitRequest struct {
+	// Transaction: If set, applies all writes in this transaction, and
+	// commits it.
+	Transaction string `json:"transaction,omitempty"`
+
+	// Writes: The writes to apply.
+	//
+	// Always executed atomically and in order.
+	Writes []*Write `json:"writes,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Transaction") 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. "Transaction") 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 Firestore.Commit.
+type CommitResponse struct {
+	// CommitTime: The time at which the commit occurred.
+	CommitTime string `json:"commitTime,omitempty"`
+
+	// WriteResults: The result of applying the writes.
+	//
+	// This i-th write result corresponds to the i-th write in the
+	// request.
+	WriteResults []*WriteResult `json:"writeResults,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "CommitTime") 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. "CommitTime") 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)
+}
+
+// CompositeFilter: A filter that merges multiple other filters using
+// the given operator.
+type CompositeFilter struct {
+	// Filters: The list of filters to combine.
+	// Must contain at least one filter.
+	Filters []*Filter `json:"filters,omitempty"`
+
+	// Op: The operator for combining multiple filters.
+	//
+	// Possible values:
+	//   "OPERATOR_UNSPECIFIED" - Unspecified. This value must not be used.
+	//   "AND" - The results are required to satisfy each of the combined
+	// filters.
+	Op string `json:"op,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Filters") 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. "Filters") 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 *CompositeFilter) MarshalJSON() ([]byte, error) {
+	type NoMethod CompositeFilter
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Cursor: A position in a query result set.
+type Cursor struct {
+	// Before: If the position is just before or just after the given
+	// values, relative
+	// to the sort order defined by the query.
+	Before bool `json:"before,omitempty"`
+
+	// Values: The values that represent a position, in the order they
+	// appear in
+	// the order by clause of a query.
+	//
+	// Can contain fewer values than specified in the order by clause.
+	Values []*Value `json:"values,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Before") 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. "Before") 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 *Cursor) MarshalJSON() ([]byte, error) {
+	type NoMethod Cursor
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Document: A Firestore document.
+//
+// Must not exceed 1 MiB - 4 bytes.
+type Document struct {
+	// CreateTime: Output only. The time at which the document was
+	// created.
+	//
+	// This value increases monotonically when a document is deleted
+	// then
+	// recreated. It can also be compared to values from other documents
+	// and
+	// the `read_time` of a query.
+	CreateTime string `json:"createTime,omitempty"`
+
+	// Fields: The document's fields.
+	//
+	// The map keys represent field names.
+	//
+	// A simple field name contains only characters `a` to `z`, `A` to
+	// `Z`,
+	// `0` to `9`, or `_`, and must not start with `0` to `9`. For
+	// example,
+	// `foo_bar_17`.
+	//
+	// Field names matching the regular expression `__.*__` are reserved.
+	// Reserved
+	// field names are forbidden except in certain documented contexts. The
+	// map
+	// keys, represented as UTF-8, must not exceed 1,500 bytes and cannot
+	// be
+	// empty.
+	//
+	// Field paths may be used in other contexts to refer to structured
+	// fields
+	// defined here. For `map_value`, the field path is represented by the
+	// simple
+	// or quoted field names of the containing fields, delimited by `.`.
+	// For
+	// example, the structured field
+	// "foo" : { map_value: { "x&y" : { string_value: "hello" }}}` would
+	// be
+	// represented by the field path `foo.x&y`.
+	//
+	// Within a field path, a quoted field name starts and ends with `` ` ``
+	// and
+	// may contain any character. Some characters, including `` ` ``, must
+	// be
+	// escaped using a `\`. For example, `` `x&y` `` represents `x&y` and
+	// `` `bak\`tik` `` represents `` bak`tik ``.
+	Fields map[string]Value `json:"fields,omitempty"`
+
+	// Name: The resource name of the document, for
+	// example
+	// `projects/{project_id}/databases/{database_id}/documents/{docu
+	// ment_path}`.
+	Name string `json:"name,omitempty"`
+
+	// UpdateTime: Output only. The time at which the document was last
+	// changed.
+	//
+	// This value is initially set to the `create_time` then
+	// increases
+	// monotonically with each change to the document. It can also
+	// be
+	// compared to values from other documents and the `read_time` of a
+	// query.
+	UpdateTime string `json:"updateTime,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// 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 *Document) MarshalJSON() ([]byte, error) {
+	type NoMethod Document
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// DocumentChange: A Document has changed.
+//
+// May be the result of multiple writes, including deletes,
+// that
+// ultimately resulted in a new value for the Document.
+//
+// Multiple DocumentChange messages may be returned for the same
+// logical
+// change, if multiple targets are affected.
+type DocumentChange struct {
+	// Document: The new state of the Document.
+	//
+	// If `mask` is set, contains only fields that were updated or added.
+	Document *Document `json:"document,omitempty"`
+
+	// RemovedTargetIds: A set of target IDs for targets that no longer
+	// match this document.
+	RemovedTargetIds []int64 `json:"removedTargetIds,omitempty"`
+
+	// TargetIds: A set of target IDs of targets that match this document.
+	TargetIds []int64 `json:"targetIds,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Document") 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. "Document") 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 *DocumentChange) MarshalJSON() ([]byte, error) {
+	type NoMethod DocumentChange
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// DocumentDelete: A Document has been deleted.
+//
+// May be the result of multiple writes, including updates, the
+// last of which deleted the Document.
+//
+// Multiple DocumentDelete messages may be returned for the same
+// logical
+// delete, if multiple targets are affected.
+type DocumentDelete struct {
+	// Document: The resource name of the Document that was deleted.
+	Document string `json:"document,omitempty"`
+
+	// ReadTime: The read timestamp at which the delete was
+	// observed.
+	//
+	// Greater or equal to the `commit_time` of the delete.
+	ReadTime string `json:"readTime,omitempty"`
+
+	// RemovedTargetIds: A set of target IDs for targets that previously
+	// matched this entity.
+	RemovedTargetIds []int64 `json:"removedTargetIds,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Document") 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. "Document") 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 *DocumentDelete) MarshalJSON() ([]byte, error) {
+	type NoMethod DocumentDelete
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// DocumentMask: A set of field paths on a document.
+// Used to restrict a get or update operation on a document to a subset
+// of its
+// fields.
+// This is different from standard field masks, as this is always scoped
+// to a
+// Document, and takes in account the dynamic nature of Value.
+type DocumentMask struct {
+	// FieldPaths: The list of field paths in the mask. See Document.fields
+	// for a field
+	// path syntax reference.
+	FieldPaths []string `json:"fieldPaths,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "FieldPaths") 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. "FieldPaths") 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 *DocumentMask) MarshalJSON() ([]byte, error) {
+	type NoMethod DocumentMask
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// DocumentRemove: A Document has been removed from the view of the
+// targets.
+//
+// Sent if the document is no longer relevant to a target and is out of
+// view.
+// Can be sent instead of a DocumentDelete or a DocumentChange if the
+// server
+// can not send the new value of the document.
+//
+// Multiple DocumentRemove messages may be returned for the same
+// logical
+// write or delete, if multiple targets are affected.
+type DocumentRemove struct {
+	// Document: The resource name of the Document that has gone out of
+	// view.
+	Document string `json:"document,omitempty"`
+
+	// ReadTime: The read timestamp at which the remove was
+	// observed.
+	//
+	// Greater or equal to the `commit_time` of the change/delete/remove.
+	ReadTime string `json:"readTime,omitempty"`
+
+	// RemovedTargetIds: A set of target IDs for targets that previously
+	// matched this document.
+	RemovedTargetIds []int64 `json:"removedTargetIds,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Document") 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. "Document") 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 *DocumentRemove) MarshalJSON() ([]byte, error) {
+	type NoMethod DocumentRemove
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// DocumentTransform: A transformation of a document.
+type DocumentTransform struct {
+	// Document: The name of the document to transform.
+	Document string `json:"document,omitempty"`
+
+	// FieldTransforms: The list of transformations to apply to the fields
+	// of the document, in
+	// order.
+	// This must not be empty.
+	FieldTransforms []*FieldTransform `json:"fieldTransforms,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Document") 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. "Document") 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 *DocumentTransform) MarshalJSON() ([]byte, error) {
+	type NoMethod DocumentTransform
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// DocumentsTarget: A target specified by a set of documents names.
+type DocumentsTarget struct {
+	// Documents: The names of the documents to retrieve. In the
+	// format:
+	// `projects/{project_id}/databases/{database_id}/documents/{docu
+	// ment_path}`.
+	// The request will fail if any of the document is not a child resource
+	// of
+	// the given `database`. Duplicate names will be elided.
+	Documents []string `json:"documents,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Documents") 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. "Documents") 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 *DocumentsTarget) MarshalJSON() ([]byte, error) {
+	type NoMethod DocumentsTarget
+	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
@@ -194,6 +931,230 @@
 	googleapi.ServerResponse `json:"-"`
 }
 
+// ExistenceFilter: A digest of all the documents that match a given
+// target.
+type ExistenceFilter struct {
+	// Count: The total count of documents that match target_id.
+	//
+	// If different from the count of documents in the client that match,
+	// the
+	// client must manually determine which documents no longer match the
+	// target.
+	Count int64 `json:"count,omitempty"`
+
+	// TargetId: The target ID to which this filter applies.
+	TargetId int64 `json:"targetId,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Count") 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. "Count") 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 *ExistenceFilter) MarshalJSON() ([]byte, error) {
+	type NoMethod ExistenceFilter
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// FieldFilter: A filter on a specific field.
+type FieldFilter struct {
+	// Field: The field to filter by.
+	Field *FieldReference `json:"field,omitempty"`
+
+	// Op: The operator to filter by.
+	//
+	// Possible values:
+	//   "OPERATOR_UNSPECIFIED" - Unspecified. This value must not be used.
+	//   "LESS_THAN" - Less than. Requires that the field come first in
+	// `order_by`.
+	//   "LESS_THAN_OR_EQUAL" - Less than or equal. Requires that the field
+	// come first in `order_by`.
+	//   "GREATER_THAN" - Greater than. Requires that the field come first
+	// in `order_by`.
+	//   "GREATER_THAN_OR_EQUAL" - Greater than or equal. Requires that the
+	// field come first in
+	// `order_by`.
+	//   "EQUAL" - Equal.
+	//   "ARRAY_CONTAINS" - Contains. Requires that the field is an array.
+	Op string `json:"op,omitempty"`
+
+	// Value: The value to compare to.
+	Value *Value `json:"value,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 *FieldFilter) MarshalJSON() ([]byte, error) {
+	type NoMethod FieldFilter
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// FieldReference: A reference to a field, such as `max(messages.time)
+// as max_time`.
+type FieldReference struct {
+	FieldPath string `json:"fieldPath,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "FieldPath") 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. "FieldPath") 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 *FieldReference) MarshalJSON() ([]byte, error) {
+	type NoMethod FieldReference
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// FieldTransform: A transformation of a field of the document.
+type FieldTransform struct {
+	// AppendMissingElements: Append the given elements in order if they are
+	// not already present in
+	// the current field value.
+	// If the field is not an array, or if the field does not yet exist, it
+	// is
+	// first set to the empty array.
+	//
+	// Equivalent numbers of different types (e.g. 3L and 3.0)
+	// are
+	// considered equal when checking if a value is missing.
+	// NaN is equal to NaN, and Null is equal to Null.
+	// If the input contains multiple equivalent values, only the first
+	// will
+	// be considered.
+	//
+	// The corresponding transform_result will be the null value.
+	AppendMissingElements *ArrayValue `json:"appendMissingElements,omitempty"`
+
+	// FieldPath: The path of the field. See Document.fields for the field
+	// path syntax
+	// reference.
+	FieldPath string `json:"fieldPath,omitempty"`
+
+	// RemoveAllFromArray: Remove all of the given elements from the array
+	// in the field.
+	// If the field is not an array, or if the field does not yet exist, it
+	// is
+	// set to the empty array.
+	//
+	// Equivalent numbers of the different types (e.g. 3L and 3.0)
+	// are
+	// considered equal when deciding whether an element should be
+	// removed.
+	// NaN is equal to NaN, and Null is equal to Null.
+	// This will remove all equivalent values if there are duplicates.
+	//
+	// The corresponding transform_result will be the null value.
+	RemoveAllFromArray *ArrayValue `json:"removeAllFromArray,omitempty"`
+
+	// SetToServerValue: Sets the field to the given server value.
+	//
+	// Possible values:
+	//   "SERVER_VALUE_UNSPECIFIED" - Unspecified. This value must not be
+	// used.
+	//   "REQUEST_TIME" - The time at which the server processed the
+	// request, with millisecond
+	// precision.
+	SetToServerValue string `json:"setToServerValue,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g.
+	// "AppendMissingElements") 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. "AppendMissingElements") 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 *FieldTransform) MarshalJSON() ([]byte, error) {
+	type NoMethod FieldTransform
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Filter: A filter.
+type Filter struct {
+	// CompositeFilter: A composite filter.
+	CompositeFilter *CompositeFilter `json:"compositeFilter,omitempty"`
+
+	// FieldFilter: A filter on a document field.
+	FieldFilter *FieldFilter `json:"fieldFilter,omitempty"`
+
+	// UnaryFilter: A filter that takes exactly one argument.
+	UnaryFilter *UnaryFilter `json:"unaryFilter,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "CompositeFilter") 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. "CompositeFilter") 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 *Filter) MarshalJSON() ([]byte, error) {
+	type NoMethod Filter
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // GoogleFirestoreAdminV1ExportDocumentsMetadata: Metadata for
 // google.longrunning.Operation results
 // from
@@ -1156,6 +2117,168 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// LatLng: An object representing a latitude/longitude pair. This is
+// expressed as a pair
+// of doubles representing degrees latitude and degrees longitude.
+// Unless
+// specified otherwise, this must conform to the
+// <a
+// href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
+// st
+// andard</a>. Values must be within normalized ranges.
+type LatLng struct {
+	// Latitude: The latitude in degrees. It must be in the range [-90.0,
+	// +90.0].
+	Latitude float64 `json:"latitude,omitempty"`
+
+	// Longitude: The longitude in degrees. It must be in the range [-180.0,
+	// +180.0].
+	Longitude float64 `json:"longitude,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Latitude") 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. "Latitude") 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 *LatLng) MarshalJSON() ([]byte, error) {
+	type NoMethod LatLng
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *LatLng) UnmarshalJSON(data []byte) error {
+	type NoMethod LatLng
+	var s1 struct {
+		Latitude  gensupport.JSONFloat64 `json:"latitude"`
+		Longitude gensupport.JSONFloat64 `json:"longitude"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.Latitude = float64(s1.Latitude)
+	s.Longitude = float64(s1.Longitude)
+	return nil
+}
+
+// ListCollectionIdsRequest: The request for
+// Firestore.ListCollectionIds.
+type ListCollectionIdsRequest struct {
+	// PageSize: The maximum number of results to return.
+	PageSize int64 `json:"pageSize,omitempty"`
+
+	// PageToken: A page token. Must be a value
+	// from
+	// ListCollectionIdsResponse.
+	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 *ListCollectionIdsRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod ListCollectionIdsRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ListCollectionIdsResponse: The response from
+// Firestore.ListCollectionIds.
+type ListCollectionIdsResponse struct {
+	// CollectionIds: The collection ids.
+	CollectionIds []string `json:"collectionIds,omitempty"`
+
+	// NextPageToken: A page token that may be used to continue the list.
+	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. "CollectionIds") 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. "CollectionIds") 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 *ListCollectionIdsResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod ListCollectionIdsResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ListDocumentsResponse: The response for Firestore.ListDocuments.
+type ListDocumentsResponse struct {
+	// Documents: The Documents found.
+	Documents []*Document `json:"documents,omitempty"`
+
+	// NextPageToken: The next page token.
+	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. "Documents") 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. "Documents") 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 *ListDocumentsResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod ListDocumentsResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // ListLocationsResponse: The response message for
 // Locations.ListLocations.
 type ListLocationsResponse struct {
@@ -1193,6 +2316,93 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// ListenRequest: A request for Firestore.Listen
+type ListenRequest struct {
+	// AddTarget: A target to add to this stream.
+	AddTarget *Target `json:"addTarget,omitempty"`
+
+	// Labels: Labels associated with this target change.
+	Labels map[string]string `json:"labels,omitempty"`
+
+	// RemoveTarget: The ID of a target to remove from this stream.
+	RemoveTarget int64 `json:"removeTarget,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "AddTarget") 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. "AddTarget") 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 *ListenRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod ListenRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ListenResponse: The response for Firestore.Listen.
+type ListenResponse struct {
+	// DocumentChange: A Document has changed.
+	DocumentChange *DocumentChange `json:"documentChange,omitempty"`
+
+	// DocumentDelete: A Document has been deleted.
+	DocumentDelete *DocumentDelete `json:"documentDelete,omitempty"`
+
+	// DocumentRemove: A Document has been removed from a target (because it
+	// is no longer
+	// relevant to that target).
+	DocumentRemove *DocumentRemove `json:"documentRemove,omitempty"`
+
+	// Filter: A filter to apply to the set of documents previously returned
+	// for the
+	// given target.
+	//
+	// Returned when documents may have been removed from the given target,
+	// but
+	// the exact documents are unknown.
+	Filter *ExistenceFilter `json:"filter,omitempty"`
+
+	// TargetChange: Targets have changed.
+	TargetChange *TargetChange `json:"targetChange,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "DocumentChange") 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. "DocumentChange") 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 *ListenResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod ListenResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // Location: A resource that represents Google Cloud Platform location.
 type Location struct {
 	// DisplayName: The friendly name for this location, typically a nearby
@@ -1246,6 +2456,377 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// MapValue: A map value.
+type MapValue struct {
+	// Fields: The map's fields.
+	//
+	// The map keys represent field names. Field names matching the
+	// regular
+	// expression `__.*__` are reserved. Reserved field names are forbidden
+	// except
+	// in certain documented contexts. The map keys, represented as UTF-8,
+	// must
+	// not exceed 1,500 bytes and cannot be empty.
+	Fields map[string]Value `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 *MapValue) MarshalJSON() ([]byte, error) {
+	type NoMethod MapValue
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Order: An order on a field.
+type Order struct {
+	// Direction: The direction to order by. Defaults to `ASCENDING`.
+	//
+	// Possible values:
+	//   "DIRECTION_UNSPECIFIED" - Unspecified.
+	//   "ASCENDING" - Ascending.
+	//   "DESCENDING" - Descending.
+	Direction string `json:"direction,omitempty"`
+
+	// Field: The field to order by.
+	Field *FieldReference `json:"field,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Direction") 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. "Direction") 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 *Order) MarshalJSON() ([]byte, error) {
+	type NoMethod Order
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Precondition: A precondition on a document, used for conditional
+// operations.
+type Precondition struct {
+	// Exists: When set to `true`, the target document must exist.
+	// When set to `false`, the target document must not exist.
+	Exists bool `json:"exists,omitempty"`
+
+	// UpdateTime: When set, the target document must exist and have been
+	// last updated at
+	// that time.
+	UpdateTime string `json:"updateTime,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Exists") 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. "Exists") 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 *Precondition) MarshalJSON() ([]byte, error) {
+	type NoMethod Precondition
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Projection: The projection of document's fields to return.
+type Projection struct {
+	// Fields: The fields to return.
+	//
+	// If empty, all fields are returned. To only return the name
+	// of the document, use `['__name__']`.
+	Fields []*FieldReference `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 *Projection) MarshalJSON() ([]byte, error) {
+	type NoMethod Projection
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// QueryTarget: A target specified by a query.
+type QueryTarget struct {
+	// Parent: The parent resource name. In the
+	// format:
+	// `projects/{project_id}/databases/{database_id}/documents`
+	// or
+	// `projects/{project_id}/databases/{database_id}/documents/{document_
+	// path}`.
+	// For example:
+	// `projects/my-project/databases/my-database/documents`
+	// or
+	// `projects/my-project/databases/my-database/documents/chatrooms/my-c
+	// hatroom`
+	Parent string `json:"parent,omitempty"`
+
+	// StructuredQuery: A structured query.
+	StructuredQuery *StructuredQuery `json:"structuredQuery,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Parent") 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. "Parent") 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 *QueryTarget) MarshalJSON() ([]byte, error) {
+	type NoMethod QueryTarget
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ReadOnly: Options for a transaction that can only be used to read
+// documents.
+type ReadOnly struct {
+	// ReadTime: Reads documents at the given time.
+	// This may not be older than 60 seconds.
+	ReadTime string `json:"readTime,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ReadTime") 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. "ReadTime") 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)
+}
+
+// ReadWrite: Options for a transaction that can be used to read and
+// write documents.
+type ReadWrite struct {
+	// RetryTransaction: An optional transaction to retry.
+	RetryTransaction string `json:"retryTransaction,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "RetryTransaction") 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. "RetryTransaction") 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 *ReadWrite) MarshalJSON() ([]byte, error) {
+	type NoMethod ReadWrite
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// RollbackRequest: The request for Firestore.Rollback.
+type RollbackRequest struct {
+	// Transaction: The transaction to roll back.
+	Transaction string `json:"transaction,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Transaction") 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. "Transaction") 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)
+}
+
+// RunQueryRequest: The request for Firestore.RunQuery.
+type RunQueryRequest struct {
+	// NewTransaction: Starts a new transaction and reads the
+	// documents.
+	// Defaults to a read-only transaction.
+	// The new transaction ID will be returned as the first response in
+	// the
+	// stream.
+	NewTransaction *TransactionOptions `json:"newTransaction,omitempty"`
+
+	// ReadTime: Reads documents as they were at the given time.
+	// This may not be older than 60 seconds.
+	ReadTime string `json:"readTime,omitempty"`
+
+	// StructuredQuery: A structured query.
+	StructuredQuery *StructuredQuery `json:"structuredQuery,omitempty"`
+
+	// Transaction: Reads documents in a transaction.
+	Transaction string `json:"transaction,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "NewTransaction") 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. "NewTransaction") 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 *RunQueryRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod RunQueryRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// RunQueryResponse: The response for Firestore.RunQuery.
+type RunQueryResponse struct {
+	// Document: A query result.
+	// Not set when reporting partial progress.
+	Document *Document `json:"document,omitempty"`
+
+	// ReadTime: The time at which the document was read. This may be
+	// monotonically
+	// increasing; in this case, the previous documents in the result stream
+	// are
+	// guaranteed not to have changed between their `read_time` and this
+	// one.
+	//
+	// If the query returns no results, a response with `read_time` and
+	// no
+	// `document` will be sent, and this represents the time at which the
+	// query
+	// was run.
+	ReadTime string `json:"readTime,omitempty"`
+
+	// SkippedResults: The number of results that have been skipped due to
+	// an offset between
+	// the last response and the current response.
+	SkippedResults int64 `json:"skippedResults,omitempty"`
+
+	// Transaction: The transaction that was started as part of this
+	// request.
+	// Can only be set in the first response, and only
+	// if
+	// RunQueryRequest.new_transaction was set in the request.
+	// If set, no other fields will be set in this response.
+	Transaction string `json:"transaction,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Document") 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. "Document") 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 *RunQueryResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod RunQueryResponse
+	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
@@ -1365,6 +2946,629 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// StructuredQuery: A Firestore query.
+type StructuredQuery struct {
+	// EndAt: A end point for the query results.
+	EndAt *Cursor `json:"endAt,omitempty"`
+
+	// From: The collections to query.
+	From []*CollectionSelector `json:"from,omitempty"`
+
+	// Limit: The maximum number of results to return.
+	//
+	// Applies after all other constraints.
+	// Must be >= 0 if specified.
+	Limit int64 `json:"limit,omitempty"`
+
+	// Offset: The number of results to skip.
+	//
+	// Applies before limit, but after all other constraints. Must be >= 0
+	// if
+	// specified.
+	Offset int64 `json:"offset,omitempty"`
+
+	// OrderBy: The order to apply to the query results.
+	//
+	// Firestore guarantees a stable ordering through the following rules:
+	//
+	//  * Any field required to appear in `order_by`, that is not already
+	//    specified in `order_by`, is appended to the order in field name
+	// order
+	//    by default.
+	//  * If an order on `__name__` is not specified, it is appended by
+	// default.
+	//
+	// Fields are appended with the same sort direction as the last
+	// order
+	// specified, or 'ASCENDING' if no order was specified. For example:
+	//
+	//  * `SELECT * FROM Foo ORDER BY A` becomes
+	//    `SELECT * FROM Foo ORDER BY A, __name__`
+	//  * `SELECT * FROM Foo ORDER BY A DESC` becomes
+	//    `SELECT * FROM Foo ORDER BY A DESC, __name__ DESC`
+	//  * `SELECT * FROM Foo WHERE A > 1` becomes
+	//    `SELECT * FROM Foo WHERE A > 1 ORDER BY A, __name__`
+	OrderBy []*Order `json:"orderBy,omitempty"`
+
+	// Select: The projection to return.
+	Select *Projection `json:"select,omitempty"`
+
+	// StartAt: A starting point for the query results.
+	StartAt *Cursor `json:"startAt,omitempty"`
+
+	// Where: The filter to apply.
+	Where *Filter `json:"where,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "EndAt") 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. "EndAt") 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 *StructuredQuery) MarshalJSON() ([]byte, error) {
+	type NoMethod StructuredQuery
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Target: A specification of a set of documents to listen to.
+type Target struct {
+	// Documents: A target specified by a set of document names.
+	Documents *DocumentsTarget `json:"documents,omitempty"`
+
+	// Once: If the target should be removed once it is current and
+	// consistent.
+	Once bool `json:"once,omitempty"`
+
+	// Query: A target specified by a query.
+	Query *QueryTarget `json:"query,omitempty"`
+
+	// ReadTime: Start listening after a specific `read_time`.
+	//
+	// The client must know the state of matching documents at this time.
+	ReadTime string `json:"readTime,omitempty"`
+
+	// ResumeToken: A resume token from a prior TargetChange for an
+	// identical target.
+	//
+	// Using a resume token with a different target is unsupported and may
+	// fail.
+	ResumeToken string `json:"resumeToken,omitempty"`
+
+	// TargetId: A client provided target ID.
+	//
+	// If not set, the server will assign an ID for the target.
+	//
+	// Used for resuming a target without changing IDs. The IDs can either
+	// be
+	// client-assigned or be server-assigned in a previous stream. All
+	// targets
+	// with client provided IDs must be added before adding a target that
+	// needs
+	// a server-assigned id.
+	TargetId int64 `json:"targetId,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Documents") 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. "Documents") 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 *Target) MarshalJSON() ([]byte, error) {
+	type NoMethod Target
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// TargetChange: Targets being watched have changed.
+type TargetChange struct {
+	// Cause: The error that resulted in this change, if applicable.
+	Cause *Status `json:"cause,omitempty"`
+
+	// ReadTime: The consistent `read_time` for the given `target_ids`
+	// (omitted when the
+	// target_ids are not at a consistent snapshot).
+	//
+	// The stream is guaranteed to send a `read_time` with `target_ids`
+	// empty
+	// whenever the entire stream reaches a new consistent snapshot.
+	// ADD,
+	// CURRENT, and RESET messages are guaranteed to (eventually) result in
+	// a
+	// new consistent snapshot (while NO_CHANGE and REMOVE messages are
+	// not).
+	//
+	// For a given stream, `read_time` is guaranteed to be
+	// monotonically
+	// increasing.
+	ReadTime string `json:"readTime,omitempty"`
+
+	// ResumeToken: A token that can be used to resume the stream for the
+	// given `target_ids`,
+	// or all targets if `target_ids` is empty.
+	//
+	// Not set on every target change.
+	ResumeToken string `json:"resumeToken,omitempty"`
+
+	// TargetChangeType: The type of change that occurred.
+	//
+	// Possible values:
+	//   "NO_CHANGE" - No change has occurred. Used only to send an updated
+	// `resume_token`.
+	//   "ADD" - The targets have been added.
+	//   "REMOVE" - The targets have been removed.
+	//   "CURRENT" - The targets reflect all changes committed before the
+	// targets were added
+	// to the stream.
+	//
+	// This will be sent after or with a `read_time` that is greater than
+	// or
+	// equal to the time at which the targets were added.
+	//
+	// Listeners can wait for this change if read-after-write semantics
+	// are desired.
+	//   "RESET" - The targets have been reset, and a new initial state for
+	// the targets
+	// will be returned in subsequent changes.
+	//
+	// After the initial state is complete, `CURRENT` will be returned
+	// even
+	// if the target was previously indicated to be `CURRENT`.
+	TargetChangeType string `json:"targetChangeType,omitempty"`
+
+	// TargetIds: The target IDs of targets that have changed.
+	//
+	// If empty, the change applies to all targets.
+	//
+	// For `target_change_type=ADD`, the order of the target IDs matches the
+	// order
+	// of the requests to add the targets. This allows clients to
+	// unambiguously
+	// associate server-assigned target IDs with added targets.
+	//
+	// For other states, the order of the target IDs is not defined.
+	TargetIds []int64 `json:"targetIds,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Cause") 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. "Cause") 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 *TargetChange) MarshalJSON() ([]byte, error) {
+	type NoMethod TargetChange
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// TransactionOptions: Options for creating a new transaction.
+type TransactionOptions struct {
+	// ReadOnly: The transaction can only be used for read operations.
+	ReadOnly *ReadOnly `json:"readOnly,omitempty"`
+
+	// ReadWrite: The transaction can be used for both read and write
+	// operations.
+	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)
+}
+
+// UnaryFilter: A filter with a single operand.
+type UnaryFilter struct {
+	// Field: The field to which to apply the operator.
+	Field *FieldReference `json:"field,omitempty"`
+
+	// Op: The unary operator to apply.
+	//
+	// Possible values:
+	//   "OPERATOR_UNSPECIFIED" - Unspecified. This value must not be used.
+	//   "IS_NAN" - Test if a field is equal to NaN.
+	//   "IS_NULL" - Test if an exprestion evaluates to Null.
+	Op string `json:"op,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 *UnaryFilter) MarshalJSON() ([]byte, error) {
+	type NoMethod UnaryFilter
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Value: A message that can hold any of the supported value types.
+type Value struct {
+	// ArrayValue: An array value.
+	//
+	// Cannot directly contain another array value, though can contain
+	// an
+	// map which contains another array.
+	ArrayValue *ArrayValue `json:"arrayValue,omitempty"`
+
+	// BooleanValue: A boolean value.
+	BooleanValue bool `json:"booleanValue,omitempty"`
+
+	// BytesValue: A bytes value.
+	//
+	// Must not exceed 1 MiB - 89 bytes.
+	// Only the first 1,500 bytes are considered by queries.
+	BytesValue string `json:"bytesValue,omitempty"`
+
+	// DoubleValue: A double value.
+	DoubleValue float64 `json:"doubleValue,omitempty"`
+
+	// GeoPointValue: A geo point value representing a point on the surface
+	// of Earth.
+	GeoPointValue *LatLng `json:"geoPointValue,omitempty"`
+
+	// IntegerValue: An integer value.
+	IntegerValue int64 `json:"integerValue,omitempty,string"`
+
+	// MapValue: A map value.
+	MapValue *MapValue `json:"mapValue,omitempty"`
+
+	// NullValue: A null value.
+	//
+	// Possible values:
+	//   "NULL_VALUE" - Null value.
+	NullValue string `json:"nullValue,omitempty"`
+
+	// ReferenceValue: A reference to a document. For
+	// example:
+	// `projects/{project_id}/databases/{database_id}/documents/{doc
+	// ument_path}`.
+	ReferenceValue string `json:"referenceValue,omitempty"`
+
+	// StringValue: A string value.
+	//
+	// The string, represented as UTF-8, must not exceed 1 MiB - 89
+	// bytes.
+	// Only the first 1,500 bytes of the UTF-8 representation are considered
+	// by
+	// queries.
+	StringValue string `json:"stringValue,omitempty"`
+
+	// TimestampValue: A timestamp value.
+	//
+	// Precise only to microseconds. When stored, any additional precision
+	// is
+	// rounded down.
+	TimestampValue string `json:"timestampValue,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ArrayValue") 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. "ArrayValue") 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 *Value) MarshalJSON() ([]byte, error) {
+	type NoMethod Value
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *Value) UnmarshalJSON(data []byte) error {
+	type NoMethod Value
+	var s1 struct {
+		DoubleValue gensupport.JSONFloat64 `json:"doubleValue"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.DoubleValue = float64(s1.DoubleValue)
+	return nil
+}
+
+// Write: A write on a document.
+type Write struct {
+	// CurrentDocument: An optional precondition on the document.
+	//
+	// The write will fail if this is set and not met by the target
+	// document.
+	CurrentDocument *Precondition `json:"currentDocument,omitempty"`
+
+	// Delete: A document name to delete. In the
+	// format:
+	// `projects/{project_id}/databases/{database_id}/documents/{docu
+	// ment_path}`.
+	Delete string `json:"delete,omitempty"`
+
+	// Transform: Applies a tranformation to a document.
+	// At most one `transform` per document is allowed in a given
+	// request.
+	// An `update` cannot follow a `transform` on the same document in a
+	// given
+	// request.
+	Transform *DocumentTransform `json:"transform,omitempty"`
+
+	// Update: A document to write.
+	Update *Document `json:"update,omitempty"`
+
+	// UpdateMask: The fields to update in this write.
+	//
+	// This field can be set only when the operation is `update`.
+	// If the mask is not set for an `update` and the document exists,
+	// any
+	// existing data will be overwritten.
+	// If the mask is set and the document on the server has fields not
+	// covered by
+	// the mask, they are left unchanged.
+	// Fields referenced in the mask, but not present in the input document,
+	// are
+	// deleted from the document on the server.
+	// The field paths in this mask must not contain a reserved field name.
+	UpdateMask *DocumentMask `json:"updateMask,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "CurrentDocument") 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. "CurrentDocument") 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)
+}
+
+// WriteRequest: The request for Firestore.Write.
+//
+// The first request creates a stream, or resumes an existing one from a
+// token.
+//
+// When creating a new stream, the server replies with a response
+// containing
+// only an ID and a token, to use in the next request.
+//
+// When resuming a stream, the server first streams any responses later
+// than the
+// given token, then a response containing only an up-to-date token, to
+// use in
+// the next request.
+type WriteRequest struct {
+	// Labels: Labels associated with this write request.
+	Labels map[string]string `json:"labels,omitempty"`
+
+	// StreamId: The ID of the write stream to resume.
+	// This may only be set in the first message. When left empty, a new
+	// write
+	// stream will be created.
+	StreamId string `json:"streamId,omitempty"`
+
+	// StreamToken: A stream token that was previously sent by the
+	// server.
+	//
+	// The client should set this field to the token from the most
+	// recent
+	// WriteResponse it has received. This acknowledges that the client
+	// has
+	// received responses up to this token. After sending this token,
+	// earlier
+	// tokens may not be used anymore.
+	//
+	// The server may close the stream if there are too many
+	// unacknowledged
+	// responses.
+	//
+	// Leave this field unset when creating a new stream. To resume a stream
+	// at
+	// a specific point, set this field and the `stream_id` field.
+	//
+	// Leave this field unset when creating a new stream.
+	StreamToken string `json:"streamToken,omitempty"`
+
+	// Writes: The writes to apply.
+	//
+	// Always executed atomically and in order.
+	// This must be empty on the first request.
+	// This may be empty on the last request.
+	// This must not be empty on all other requests.
+	Writes []*Write `json:"writes,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Labels") 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. "Labels") 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 *WriteRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod WriteRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// WriteResponse: The response for Firestore.Write.
+type WriteResponse struct {
+	// CommitTime: The time at which the commit occurred.
+	CommitTime string `json:"commitTime,omitempty"`
+
+	// StreamId: The ID of the stream.
+	// Only set on the first message, when a new stream was created.
+	StreamId string `json:"streamId,omitempty"`
+
+	// StreamToken: A token that represents the position of this response in
+	// the stream.
+	// This can be used by a client to resume the stream at this
+	// point.
+	//
+	// This field is always set.
+	StreamToken string `json:"streamToken,omitempty"`
+
+	// WriteResults: The result of applying the writes.
+	//
+	// This i-th write result corresponds to the i-th write in the
+	// request.
+	WriteResults []*WriteResult `json:"writeResults,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "CommitTime") 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. "CommitTime") 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 *WriteResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod WriteResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// WriteResult: The result of applying a write.
+type WriteResult struct {
+	// TransformResults: The results of applying each
+	// DocumentTransform.FieldTransform, in the
+	// same order.
+	TransformResults []*Value `json:"transformResults,omitempty"`
+
+	// UpdateTime: The last update time of the document after applying the
+	// write. Not set
+	// after a `delete`.
+	//
+	// If the write did not actually change the document, this will be
+	// the
+	// previous update_time.
+	UpdateTime string `json:"updateTime,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "TransformResults") 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. "TransformResults") 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 *WriteResult) MarshalJSON() ([]byte, error) {
+	type NoMethod WriteResult
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // method id "firestore.projects.databases.exportDocuments":
 
 type ProjectsDatabasesExportDocumentsCall struct {
@@ -2830,6 +5034,2146 @@
 	}
 }
 
+// method id "firestore.projects.databases.documents.batchGet":
+
+type ProjectsDatabasesDocumentsBatchGetCall struct {
+	s                        *Service
+	database                 string
+	batchgetdocumentsrequest *BatchGetDocumentsRequest
+	urlParams_               gensupport.URLParams
+	ctx_                     context.Context
+	header_                  http.Header
+}
+
+// BatchGet: Gets multiple documents.
+//
+// Documents returned by this method are not guaranteed to be returned
+// in the
+// same order that they were requested.
+func (r *ProjectsDatabasesDocumentsService) BatchGet(database string, batchgetdocumentsrequest *BatchGetDocumentsRequest) *ProjectsDatabasesDocumentsBatchGetCall {
+	c := &ProjectsDatabasesDocumentsBatchGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.database = database
+	c.batchgetdocumentsrequest = batchgetdocumentsrequest
+	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 *ProjectsDatabasesDocumentsBatchGetCall) Fields(s ...googleapi.Field) *ProjectsDatabasesDocumentsBatchGetCall {
+	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 *ProjectsDatabasesDocumentsBatchGetCall) Context(ctx context.Context) *ProjectsDatabasesDocumentsBatchGetCall {
+	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 *ProjectsDatabasesDocumentsBatchGetCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsDatabasesDocumentsBatchGetCall) 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.batchgetdocumentsrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+database}/documents:batchGet")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "firestore.projects.databases.documents.batchGet" call.
+// Exactly one of *BatchGetDocumentsResponse or error will be non-nil.
+// Any non-2xx status code is an error. Response headers are in either
+// *BatchGetDocumentsResponse.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 *ProjectsDatabasesDocumentsBatchGetCall) Do(opts ...googleapi.CallOption) (*BatchGetDocumentsResponse, 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 := &BatchGetDocumentsResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets multiple documents.\n\nDocuments returned by this method are not guaranteed to be returned in the\nsame order that they were requested.",
+	//   "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/documents:batchGet",
+	//   "httpMethod": "POST",
+	//   "id": "firestore.projects.databases.documents.batchGet",
+	//   "parameterOrder": [
+	//     "database"
+	//   ],
+	//   "parameters": {
+	//     "database": {
+	//       "description": "The database name. In the format:\n`projects/{project_id}/databases/{database_id}`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/databases/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+database}/documents:batchGet",
+	//   "request": {
+	//     "$ref": "BatchGetDocumentsRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "BatchGetDocumentsResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/datastore"
+	//   ]
+	// }
+
+}
+
+// method id "firestore.projects.databases.documents.beginTransaction":
+
+type ProjectsDatabasesDocumentsBeginTransactionCall struct {
+	s                       *Service
+	database                string
+	begintransactionrequest *BeginTransactionRequest
+	urlParams_              gensupport.URLParams
+	ctx_                    context.Context
+	header_                 http.Header
+}
+
+// BeginTransaction: Starts a new transaction.
+func (r *ProjectsDatabasesDocumentsService) BeginTransaction(database string, begintransactionrequest *BeginTransactionRequest) *ProjectsDatabasesDocumentsBeginTransactionCall {
+	c := &ProjectsDatabasesDocumentsBeginTransactionCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.database = database
+	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 *ProjectsDatabasesDocumentsBeginTransactionCall) Fields(s ...googleapi.Field) *ProjectsDatabasesDocumentsBeginTransactionCall {
+	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 *ProjectsDatabasesDocumentsBeginTransactionCall) Context(ctx context.Context) *ProjectsDatabasesDocumentsBeginTransactionCall {
+	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 *ProjectsDatabasesDocumentsBeginTransactionCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsDatabasesDocumentsBeginTransactionCall) 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)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+database}/documents:beginTransaction")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "firestore.projects.databases.documents.beginTransaction" call.
+// Exactly one of *BeginTransactionResponse or error will be non-nil.
+// Any non-2xx status code is an error. Response headers are in either
+// *BeginTransactionResponse.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 *ProjectsDatabasesDocumentsBeginTransactionCall) Do(opts ...googleapi.CallOption) (*BeginTransactionResponse, 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 := &BeginTransactionResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Starts a new transaction.",
+	//   "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/documents:beginTransaction",
+	//   "httpMethod": "POST",
+	//   "id": "firestore.projects.databases.documents.beginTransaction",
+	//   "parameterOrder": [
+	//     "database"
+	//   ],
+	//   "parameters": {
+	//     "database": {
+	//       "description": "The database name. In the format:\n`projects/{project_id}/databases/{database_id}`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/databases/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+database}/documents:beginTransaction",
+	//   "request": {
+	//     "$ref": "BeginTransactionRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "BeginTransactionResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/datastore"
+	//   ]
+	// }
+
+}
+
+// method id "firestore.projects.databases.documents.commit":
+
+type ProjectsDatabasesDocumentsCommitCall struct {
+	s             *Service
+	database      string
+	commitrequest *CommitRequest
+	urlParams_    gensupport.URLParams
+	ctx_          context.Context
+	header_       http.Header
+}
+
+// Commit: Commits a transaction, while optionally updating documents.
+func (r *ProjectsDatabasesDocumentsService) Commit(database string, commitrequest *CommitRequest) *ProjectsDatabasesDocumentsCommitCall {
+	c := &ProjectsDatabasesDocumentsCommitCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.database = database
+	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 *ProjectsDatabasesDocumentsCommitCall) Fields(s ...googleapi.Field) *ProjectsDatabasesDocumentsCommitCall {
+	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 *ProjectsDatabasesDocumentsCommitCall) Context(ctx context.Context) *ProjectsDatabasesDocumentsCommitCall {
+	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 *ProjectsDatabasesDocumentsCommitCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsDatabasesDocumentsCommitCall) 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)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+database}/documents:commit")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "firestore.projects.databases.documents.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 *ProjectsDatabasesDocumentsCommitCall) 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 := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Commits a transaction, while optionally updating documents.",
+	//   "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/documents:commit",
+	//   "httpMethod": "POST",
+	//   "id": "firestore.projects.databases.documents.commit",
+	//   "parameterOrder": [
+	//     "database"
+	//   ],
+	//   "parameters": {
+	//     "database": {
+	//       "description": "The database name. In the format:\n`projects/{project_id}/databases/{database_id}`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/databases/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+database}/documents:commit",
+	//   "request": {
+	//     "$ref": "CommitRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "CommitResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/datastore"
+	//   ]
+	// }
+
+}
+
+// method id "firestore.projects.databases.documents.createDocument":
+
+type ProjectsDatabasesDocumentsCreateDocumentCall struct {
+	s            *Service
+	parent       string
+	collectionId string
+	document     *Document
+	urlParams_   gensupport.URLParams
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// CreateDocument: Creates a new document.
+func (r *ProjectsDatabasesDocumentsService) CreateDocument(parent string, collectionId string, document *Document) *ProjectsDatabasesDocumentsCreateDocumentCall {
+	c := &ProjectsDatabasesDocumentsCreateDocumentCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.parent = parent
+	c.collectionId = collectionId
+	c.document = document
+	return c
+}
+
+// DocumentId sets the optional parameter "documentId": The
+// client-assigned document ID to use for this document.
+//
+//  If not specified, an ID will be assigned by the service.
+func (c *ProjectsDatabasesDocumentsCreateDocumentCall) DocumentId(documentId string) *ProjectsDatabasesDocumentsCreateDocumentCall {
+	c.urlParams_.Set("documentId", documentId)
+	return c
+}
+
+// MaskFieldPaths sets the optional parameter "mask.fieldPaths": The
+// list of field paths in the mask. See Document.fields for a field
+// path syntax reference.
+func (c *ProjectsDatabasesDocumentsCreateDocumentCall) MaskFieldPaths(maskFieldPaths ...string) *ProjectsDatabasesDocumentsCreateDocumentCall {
+	c.urlParams_.SetMulti("mask.fieldPaths", append([]string{}, maskFieldPaths...))
+	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 *ProjectsDatabasesDocumentsCreateDocumentCall) Fields(s ...googleapi.Field) *ProjectsDatabasesDocumentsCreateDocumentCall {
+	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 *ProjectsDatabasesDocumentsCreateDocumentCall) Context(ctx context.Context) *ProjectsDatabasesDocumentsCreateDocumentCall {
+	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 *ProjectsDatabasesDocumentsCreateDocumentCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsDatabasesDocumentsCreateDocumentCall) 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.document)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/{collectionId}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"parent":       c.parent,
+		"collectionId": c.collectionId,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "firestore.projects.databases.documents.createDocument" call.
+// Exactly one of *Document or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Document.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 *ProjectsDatabasesDocumentsCreateDocumentCall) Do(opts ...googleapi.CallOption) (*Document, 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 := &Document{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Creates a new document.",
+	//   "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/documents/{documentsId}/{collectionId}",
+	//   "httpMethod": "POST",
+	//   "id": "firestore.projects.databases.documents.createDocument",
+	//   "parameterOrder": [
+	//     "parent",
+	//     "collectionId"
+	//   ],
+	//   "parameters": {
+	//     "collectionId": {
+	//       "description": "The collection ID, relative to `parent`, to list. For example: `chatrooms`.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "documentId": {
+	//       "description": "The client-assigned document ID to use for this document.\n\nOptional. If not specified, an ID will be assigned by the service.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "mask.fieldPaths": {
+	//       "description": "The list of field paths in the mask. See Document.fields for a field\npath syntax reference.",
+	//       "location": "query",
+	//       "repeated": true,
+	//       "type": "string"
+	//     },
+	//     "parent": {
+	//       "description": "The parent resource. For example:\n`projects/{project_id}/databases/{database_id}/documents` or\n`projects/{project_id}/databases/{database_id}/documents/chatrooms/{chatroom_id}`",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/databases/[^/]+/documents/.+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+parent}/{collectionId}",
+	//   "request": {
+	//     "$ref": "Document"
+	//   },
+	//   "response": {
+	//     "$ref": "Document"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/datastore"
+	//   ]
+	// }
+
+}
+
+// method id "firestore.projects.databases.documents.delete":
+
+type ProjectsDatabasesDocumentsDeleteCall struct {
+	s          *Service
+	name       string
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// Delete: Deletes a document.
+func (r *ProjectsDatabasesDocumentsService) Delete(name string) *ProjectsDatabasesDocumentsDeleteCall {
+	c := &ProjectsDatabasesDocumentsDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// CurrentDocumentExists sets the optional parameter
+// "currentDocument.exists": When set to `true`, the target document
+// must exist.
+// When set to `false`, the target document must not exist.
+func (c *ProjectsDatabasesDocumentsDeleteCall) CurrentDocumentExists(currentDocumentExists bool) *ProjectsDatabasesDocumentsDeleteCall {
+	c.urlParams_.Set("currentDocument.exists", fmt.Sprint(currentDocumentExists))
+	return c
+}
+
+// CurrentDocumentUpdateTime sets the optional parameter
+// "currentDocument.updateTime": When set, the target document must
+// exist and have been last updated at
+// that time.
+func (c *ProjectsDatabasesDocumentsDeleteCall) CurrentDocumentUpdateTime(currentDocumentUpdateTime string) *ProjectsDatabasesDocumentsDeleteCall {
+	c.urlParams_.Set("currentDocument.updateTime", currentDocumentUpdateTime)
+	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 *ProjectsDatabasesDocumentsDeleteCall) Fields(s ...googleapi.Field) *ProjectsDatabasesDocumentsDeleteCall {
+	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 *ProjectsDatabasesDocumentsDeleteCall) Context(ctx context.Context) *ProjectsDatabasesDocumentsDeleteCall {
+	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 *ProjectsDatabasesDocumentsDeleteCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsDatabasesDocumentsDeleteCall) 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)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("DELETE", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "firestore.projects.databases.documents.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 *ProjectsDatabasesDocumentsDeleteCall) 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 := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Deletes a document.",
+	//   "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/documents/{documentsId}/{documentsId1}",
+	//   "httpMethod": "DELETE",
+	//   "id": "firestore.projects.databases.documents.delete",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "currentDocument.exists": {
+	//       "description": "When set to `true`, the target document must exist.\nWhen set to `false`, the target document must not exist.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     },
+	//     "currentDocument.updateTime": {
+	//       "description": "When set, the target document must exist and have been last updated at\nthat time.",
+	//       "format": "google-datetime",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "name": {
+	//       "description": "The resource name of the Document to delete. In the format:\n`projects/{project_id}/databases/{database_id}/documents/{document_path}`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/databases/[^/]+/documents/[^/]+/.+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}",
+	//   "response": {
+	//     "$ref": "Empty"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/datastore"
+	//   ]
+	// }
+
+}
+
+// method id "firestore.projects.databases.documents.get":
+
+type ProjectsDatabasesDocumentsGetCall struct {
+	s            *Service
+	name         string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// Get: Gets a single document.
+func (r *ProjectsDatabasesDocumentsService) Get(name string) *ProjectsDatabasesDocumentsGetCall {
+	c := &ProjectsDatabasesDocumentsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// MaskFieldPaths sets the optional parameter "mask.fieldPaths": The
+// list of field paths in the mask. See Document.fields for a field
+// path syntax reference.
+func (c *ProjectsDatabasesDocumentsGetCall) MaskFieldPaths(maskFieldPaths ...string) *ProjectsDatabasesDocumentsGetCall {
+	c.urlParams_.SetMulti("mask.fieldPaths", append([]string{}, maskFieldPaths...))
+	return c
+}
+
+// ReadTime sets the optional parameter "readTime": Reads the version of
+// the document at the given time.
+// This may not be older than 60 seconds.
+func (c *ProjectsDatabasesDocumentsGetCall) ReadTime(readTime string) *ProjectsDatabasesDocumentsGetCall {
+	c.urlParams_.Set("readTime", readTime)
+	return c
+}
+
+// Transaction sets the optional parameter "transaction": Reads the
+// document in a transaction.
+func (c *ProjectsDatabasesDocumentsGetCall) Transaction(transaction string) *ProjectsDatabasesDocumentsGetCall {
+	c.urlParams_.Set("transaction", transaction)
+	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 *ProjectsDatabasesDocumentsGetCall) Fields(s ...googleapi.Field) *ProjectsDatabasesDocumentsGetCall {
+	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 *ProjectsDatabasesDocumentsGetCall) IfNoneMatch(entityTag string) *ProjectsDatabasesDocumentsGetCall {
+	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 *ProjectsDatabasesDocumentsGetCall) Context(ctx context.Context) *ProjectsDatabasesDocumentsGetCall {
+	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 *ProjectsDatabasesDocumentsGetCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsDatabasesDocumentsGetCall) 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)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "firestore.projects.databases.documents.get" call.
+// Exactly one of *Document or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Document.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 *ProjectsDatabasesDocumentsGetCall) Do(opts ...googleapi.CallOption) (*Document, 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 := &Document{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets a single document.",
+	//   "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/documents/{documentsId}/{documentsId1}",
+	//   "httpMethod": "GET",
+	//   "id": "firestore.projects.databases.documents.get",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "mask.fieldPaths": {
+	//       "description": "The list of field paths in the mask. See Document.fields for a field\npath syntax reference.",
+	//       "location": "query",
+	//       "repeated": true,
+	//       "type": "string"
+	//     },
+	//     "name": {
+	//       "description": "The resource name of the Document to get. In the format:\n`projects/{project_id}/databases/{database_id}/documents/{document_path}`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/databases/[^/]+/documents/[^/]+/.+$",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "readTime": {
+	//       "description": "Reads the version of the document at the given time.\nThis may not be older than 60 seconds.",
+	//       "format": "google-datetime",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "transaction": {
+	//       "description": "Reads the document in a transaction.",
+	//       "format": "byte",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}",
+	//   "response": {
+	//     "$ref": "Document"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/datastore"
+	//   ]
+	// }
+
+}
+
+// method id "firestore.projects.databases.documents.list":
+
+type ProjectsDatabasesDocumentsListCall struct {
+	s            *Service
+	parent       string
+	collectionId string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// List: Lists documents.
+func (r *ProjectsDatabasesDocumentsService) List(parent string, collectionId string) *ProjectsDatabasesDocumentsListCall {
+	c := &ProjectsDatabasesDocumentsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.parent = parent
+	c.collectionId = collectionId
+	return c
+}
+
+// MaskFieldPaths sets the optional parameter "mask.fieldPaths": The
+// list of field paths in the mask. See Document.fields for a field
+// path syntax reference.
+func (c *ProjectsDatabasesDocumentsListCall) MaskFieldPaths(maskFieldPaths ...string) *ProjectsDatabasesDocumentsListCall {
+	c.urlParams_.SetMulti("mask.fieldPaths", append([]string{}, maskFieldPaths...))
+	return c
+}
+
+// OrderBy sets the optional parameter "orderBy": The order to sort
+// results by. For example: `priority desc, name`.
+func (c *ProjectsDatabasesDocumentsListCall) OrderBy(orderBy string) *ProjectsDatabasesDocumentsListCall {
+	c.urlParams_.Set("orderBy", orderBy)
+	return c
+}
+
+// PageSize sets the optional parameter "pageSize": The maximum number
+// of documents to return.
+func (c *ProjectsDatabasesDocumentsListCall) PageSize(pageSize int64) *ProjectsDatabasesDocumentsListCall {
+	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": The
+// `next_page_token` value returned from a previous List request, if
+// any.
+func (c *ProjectsDatabasesDocumentsListCall) PageToken(pageToken string) *ProjectsDatabasesDocumentsListCall {
+	c.urlParams_.Set("pageToken", pageToken)
+	return c
+}
+
+// ReadTime sets the optional parameter "readTime": Reads documents as
+// they were at the given time.
+// This may not be older than 60 seconds.
+func (c *ProjectsDatabasesDocumentsListCall) ReadTime(readTime string) *ProjectsDatabasesDocumentsListCall {
+	c.urlParams_.Set("readTime", readTime)
+	return c
+}
+
+// ShowMissing sets the optional parameter "showMissing": If the list
+// should show missing documents. A missing document is a
+// document that does not exist but has sub-documents. These documents
+// will
+// be returned with a key but will not have fields,
+// Document.create_time,
+// or Document.update_time set.
+//
+// Requests with `show_missing` may not specify `where` or
+// `order_by`.
+func (c *ProjectsDatabasesDocumentsListCall) ShowMissing(showMissing bool) *ProjectsDatabasesDocumentsListCall {
+	c.urlParams_.Set("showMissing", fmt.Sprint(showMissing))
+	return c
+}
+
+// Transaction sets the optional parameter "transaction": Reads
+// documents in a transaction.
+func (c *ProjectsDatabasesDocumentsListCall) Transaction(transaction string) *ProjectsDatabasesDocumentsListCall {
+	c.urlParams_.Set("transaction", transaction)
+	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 *ProjectsDatabasesDocumentsListCall) Fields(s ...googleapi.Field) *ProjectsDatabasesDocumentsListCall {
+	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 *ProjectsDatabasesDocumentsListCall) IfNoneMatch(entityTag string) *ProjectsDatabasesDocumentsListCall {
+	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 *ProjectsDatabasesDocumentsListCall) Context(ctx context.Context) *ProjectsDatabasesDocumentsListCall {
+	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 *ProjectsDatabasesDocumentsListCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsDatabasesDocumentsListCall) 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)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/{collectionId}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"parent":       c.parent,
+		"collectionId": c.collectionId,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "firestore.projects.databases.documents.list" call.
+// Exactly one of *ListDocumentsResponse or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *ListDocumentsResponse.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 *ProjectsDatabasesDocumentsListCall) Do(opts ...googleapi.CallOption) (*ListDocumentsResponse, 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 := &ListDocumentsResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists documents.",
+	//   "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/documents/{documentsId}/{documentsId1}/{collectionId}",
+	//   "httpMethod": "GET",
+	//   "id": "firestore.projects.databases.documents.list",
+	//   "parameterOrder": [
+	//     "parent",
+	//     "collectionId"
+	//   ],
+	//   "parameters": {
+	//     "collectionId": {
+	//       "description": "The collection ID, relative to `parent`, to list. For example: `chatrooms`\nor `messages`.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "mask.fieldPaths": {
+	//       "description": "The list of field paths in the mask. See Document.fields for a field\npath syntax reference.",
+	//       "location": "query",
+	//       "repeated": true,
+	//       "type": "string"
+	//     },
+	//     "orderBy": {
+	//       "description": "The order to sort results by. For example: `priority desc, name`.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "pageSize": {
+	//       "description": "The maximum number of documents to return.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "The `next_page_token` value returned from a previous List request, if any.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "parent": {
+	//       "description": "The parent resource name. In the format:\n`projects/{project_id}/databases/{database_id}/documents` or\n`projects/{project_id}/databases/{database_id}/documents/{document_path}`.\nFor example:\n`projects/my-project/databases/my-database/documents` or\n`projects/my-project/databases/my-database/documents/chatrooms/my-chatroom`",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/databases/[^/]+/documents/[^/]+/.+$",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "readTime": {
+	//       "description": "Reads documents as they were at the given time.\nThis may not be older than 60 seconds.",
+	//       "format": "google-datetime",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "showMissing": {
+	//       "description": "If the list should show missing documents. A missing document is a\ndocument that does not exist but has sub-documents. These documents will\nbe returned with a key but will not have fields, Document.create_time,\nor Document.update_time set.\n\nRequests with `show_missing` may not specify `where` or\n`order_by`.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     },
+	//     "transaction": {
+	//       "description": "Reads documents in a transaction.",
+	//       "format": "byte",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+parent}/{collectionId}",
+	//   "response": {
+	//     "$ref": "ListDocumentsResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/datastore"
+	//   ]
+	// }
+
+}
+
+// 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 *ProjectsDatabasesDocumentsListCall) Pages(ctx context.Context, f func(*ListDocumentsResponse) 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 "firestore.projects.databases.documents.listCollectionIds":
+
+type ProjectsDatabasesDocumentsListCollectionIdsCall struct {
+	s                        *Service
+	parent                   string
+	listcollectionidsrequest *ListCollectionIdsRequest
+	urlParams_               gensupport.URLParams
+	ctx_                     context.Context
+	header_                  http.Header
+}
+
+// ListCollectionIds: Lists all the collection IDs underneath a
+// document.
+func (r *ProjectsDatabasesDocumentsService) ListCollectionIds(parent string, listcollectionidsrequest *ListCollectionIdsRequest) *ProjectsDatabasesDocumentsListCollectionIdsCall {
+	c := &ProjectsDatabasesDocumentsListCollectionIdsCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.parent = parent
+	c.listcollectionidsrequest = listcollectionidsrequest
+	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 *ProjectsDatabasesDocumentsListCollectionIdsCall) Fields(s ...googleapi.Field) *ProjectsDatabasesDocumentsListCollectionIdsCall {
+	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 *ProjectsDatabasesDocumentsListCollectionIdsCall) Context(ctx context.Context) *ProjectsDatabasesDocumentsListCollectionIdsCall {
+	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 *ProjectsDatabasesDocumentsListCollectionIdsCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsDatabasesDocumentsListCollectionIdsCall) 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.listcollectionidsrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}:listCollectionIds")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "firestore.projects.databases.documents.listCollectionIds" call.
+// Exactly one of *ListCollectionIdsResponse or error will be non-nil.
+// Any non-2xx status code is an error. Response headers are in either
+// *ListCollectionIdsResponse.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 *ProjectsDatabasesDocumentsListCollectionIdsCall) Do(opts ...googleapi.CallOption) (*ListCollectionIdsResponse, 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 := &ListCollectionIdsResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists all the collection IDs underneath a document.",
+	//   "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/documents/{documentsId}/{documentsId1}:listCollectionIds",
+	//   "httpMethod": "POST",
+	//   "id": "firestore.projects.databases.documents.listCollectionIds",
+	//   "parameterOrder": [
+	//     "parent"
+	//   ],
+	//   "parameters": {
+	//     "parent": {
+	//       "description": "The parent document. In the format:\n`projects/{project_id}/databases/{database_id}/documents/{document_path}`.\nFor example:\n`projects/my-project/databases/my-database/documents/chatrooms/my-chatroom`",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/databases/[^/]+/documents/[^/]+/.+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+parent}:listCollectionIds",
+	//   "request": {
+	//     "$ref": "ListCollectionIdsRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "ListCollectionIdsResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/datastore"
+	//   ]
+	// }
+
+}
+
+// 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 *ProjectsDatabasesDocumentsListCollectionIdsCall) Pages(ctx context.Context, f func(*ListCollectionIdsResponse) error) error {
+	c.ctx_ = ctx
+	defer func(pt string) { c.listcollectionidsrequest.PageToken = pt }(c.listcollectionidsrequest.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.listcollectionidsrequest.PageToken = x.NextPageToken
+	}
+}
+
+// method id "firestore.projects.databases.documents.listen":
+
+type ProjectsDatabasesDocumentsListenCall struct {
+	s             *Service
+	database      string
+	listenrequest *ListenRequest
+	urlParams_    gensupport.URLParams
+	ctx_          context.Context
+	header_       http.Header
+}
+
+// Listen: Listens to changes.
+func (r *ProjectsDatabasesDocumentsService) Listen(database string, listenrequest *ListenRequest) *ProjectsDatabasesDocumentsListenCall {
+	c := &ProjectsDatabasesDocumentsListenCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.database = database
+	c.listenrequest = listenrequest
+	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 *ProjectsDatabasesDocumentsListenCall) Fields(s ...googleapi.Field) *ProjectsDatabasesDocumentsListenCall {
+	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 *ProjectsDatabasesDocumentsListenCall) Context(ctx context.Context) *ProjectsDatabasesDocumentsListenCall {
+	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 *ProjectsDatabasesDocumentsListenCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsDatabasesDocumentsListenCall) 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.listenrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+database}/documents:listen")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "firestore.projects.databases.documents.listen" call.
+// Exactly one of *ListenResponse or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *ListenResponse.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 *ProjectsDatabasesDocumentsListenCall) Do(opts ...googleapi.CallOption) (*ListenResponse, 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 := &ListenResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Listens to changes.",
+	//   "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/documents:listen",
+	//   "httpMethod": "POST",
+	//   "id": "firestore.projects.databases.documents.listen",
+	//   "parameterOrder": [
+	//     "database"
+	//   ],
+	//   "parameters": {
+	//     "database": {
+	//       "description": "The database name. In the format:\n`projects/{project_id}/databases/{database_id}`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/databases/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+database}/documents:listen",
+	//   "request": {
+	//     "$ref": "ListenRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "ListenResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/datastore"
+	//   ]
+	// }
+
+}
+
+// method id "firestore.projects.databases.documents.patch":
+
+type ProjectsDatabasesDocumentsPatchCall struct {
+	s          *Service
+	name       string
+	document   *Document
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// Patch: Updates or inserts a document.
+func (r *ProjectsDatabasesDocumentsService) Patch(name string, document *Document) *ProjectsDatabasesDocumentsPatchCall {
+	c := &ProjectsDatabasesDocumentsPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	c.document = document
+	return c
+}
+
+// CurrentDocumentExists sets the optional parameter
+// "currentDocument.exists": When set to `true`, the target document
+// must exist.
+// When set to `false`, the target document must not exist.
+func (c *ProjectsDatabasesDocumentsPatchCall) CurrentDocumentExists(currentDocumentExists bool) *ProjectsDatabasesDocumentsPatchCall {
+	c.urlParams_.Set("currentDocument.exists", fmt.Sprint(currentDocumentExists))
+	return c
+}
+
+// CurrentDocumentUpdateTime sets the optional parameter
+// "currentDocument.updateTime": When set, the target document must
+// exist and have been last updated at
+// that time.
+func (c *ProjectsDatabasesDocumentsPatchCall) CurrentDocumentUpdateTime(currentDocumentUpdateTime string) *ProjectsDatabasesDocumentsPatchCall {
+	c.urlParams_.Set("currentDocument.updateTime", currentDocumentUpdateTime)
+	return c
+}
+
+// MaskFieldPaths sets the optional parameter "mask.fieldPaths": The
+// list of field paths in the mask. See Document.fields for a field
+// path syntax reference.
+func (c *ProjectsDatabasesDocumentsPatchCall) MaskFieldPaths(maskFieldPaths ...string) *ProjectsDatabasesDocumentsPatchCall {
+	c.urlParams_.SetMulti("mask.fieldPaths", append([]string{}, maskFieldPaths...))
+	return c
+}
+
+// UpdateMaskFieldPaths sets the optional parameter
+// "updateMask.fieldPaths": The list of field paths in the mask. See
+// Document.fields for a field
+// path syntax reference.
+func (c *ProjectsDatabasesDocumentsPatchCall) UpdateMaskFieldPaths(updateMaskFieldPaths ...string) *ProjectsDatabasesDocumentsPatchCall {
+	c.urlParams_.SetMulti("updateMask.fieldPaths", append([]string{}, updateMaskFieldPaths...))
+	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 *ProjectsDatabasesDocumentsPatchCall) Fields(s ...googleapi.Field) *ProjectsDatabasesDocumentsPatchCall {
+	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 *ProjectsDatabasesDocumentsPatchCall) Context(ctx context.Context) *ProjectsDatabasesDocumentsPatchCall {
+	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 *ProjectsDatabasesDocumentsPatchCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsDatabasesDocumentsPatchCall) 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.document)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("PATCH", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "firestore.projects.databases.documents.patch" call.
+// Exactly one of *Document or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Document.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 *ProjectsDatabasesDocumentsPatchCall) Do(opts ...googleapi.CallOption) (*Document, 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 := &Document{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates or inserts a document.",
+	//   "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/documents/{documentsId}/{documentsId1}",
+	//   "httpMethod": "PATCH",
+	//   "id": "firestore.projects.databases.documents.patch",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "currentDocument.exists": {
+	//       "description": "When set to `true`, the target document must exist.\nWhen set to `false`, the target document must not exist.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     },
+	//     "currentDocument.updateTime": {
+	//       "description": "When set, the target document must exist and have been last updated at\nthat time.",
+	//       "format": "google-datetime",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "mask.fieldPaths": {
+	//       "description": "The list of field paths in the mask. See Document.fields for a field\npath syntax reference.",
+	//       "location": "query",
+	//       "repeated": true,
+	//       "type": "string"
+	//     },
+	//     "name": {
+	//       "description": "The resource name of the document, for example\n`projects/{project_id}/databases/{database_id}/documents/{document_path}`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/databases/[^/]+/documents/[^/]+/.+$",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "updateMask.fieldPaths": {
+	//       "description": "The list of field paths in the mask. See Document.fields for a field\npath syntax reference.",
+	//       "location": "query",
+	//       "repeated": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}",
+	//   "request": {
+	//     "$ref": "Document"
+	//   },
+	//   "response": {
+	//     "$ref": "Document"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/datastore"
+	//   ]
+	// }
+
+}
+
+// method id "firestore.projects.databases.documents.rollback":
+
+type ProjectsDatabasesDocumentsRollbackCall struct {
+	s               *Service
+	database        string
+	rollbackrequest *RollbackRequest
+	urlParams_      gensupport.URLParams
+	ctx_            context.Context
+	header_         http.Header
+}
+
+// Rollback: Rolls back a transaction.
+func (r *ProjectsDatabasesDocumentsService) Rollback(database string, rollbackrequest *RollbackRequest) *ProjectsDatabasesDocumentsRollbackCall {
+	c := &ProjectsDatabasesDocumentsRollbackCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.database = database
+	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 *ProjectsDatabasesDocumentsRollbackCall) Fields(s ...googleapi.Field) *ProjectsDatabasesDocumentsRollbackCall {
+	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 *ProjectsDatabasesDocumentsRollbackCall) Context(ctx context.Context) *ProjectsDatabasesDocumentsRollbackCall {
+	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 *ProjectsDatabasesDocumentsRollbackCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsDatabasesDocumentsRollbackCall) 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)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+database}/documents:rollback")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "firestore.projects.databases.documents.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 *ProjectsDatabasesDocumentsRollbackCall) 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 := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Rolls back a transaction.",
+	//   "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/documents:rollback",
+	//   "httpMethod": "POST",
+	//   "id": "firestore.projects.databases.documents.rollback",
+	//   "parameterOrder": [
+	//     "database"
+	//   ],
+	//   "parameters": {
+	//     "database": {
+	//       "description": "The database name. In the format:\n`projects/{project_id}/databases/{database_id}`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/databases/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+database}/documents:rollback",
+	//   "request": {
+	//     "$ref": "RollbackRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Empty"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/datastore"
+	//   ]
+	// }
+
+}
+
+// method id "firestore.projects.databases.documents.runQuery":
+
+type ProjectsDatabasesDocumentsRunQueryCall struct {
+	s               *Service
+	parent          string
+	runqueryrequest *RunQueryRequest
+	urlParams_      gensupport.URLParams
+	ctx_            context.Context
+	header_         http.Header
+}
+
+// RunQuery: Runs a query.
+func (r *ProjectsDatabasesDocumentsService) RunQuery(parent string, runqueryrequest *RunQueryRequest) *ProjectsDatabasesDocumentsRunQueryCall {
+	c := &ProjectsDatabasesDocumentsRunQueryCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.parent = parent
+	c.runqueryrequest = runqueryrequest
+	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 *ProjectsDatabasesDocumentsRunQueryCall) Fields(s ...googleapi.Field) *ProjectsDatabasesDocumentsRunQueryCall {
+	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 *ProjectsDatabasesDocumentsRunQueryCall) Context(ctx context.Context) *ProjectsDatabasesDocumentsRunQueryCall {
+	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 *ProjectsDatabasesDocumentsRunQueryCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsDatabasesDocumentsRunQueryCall) 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.runqueryrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}:runQuery")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "firestore.projects.databases.documents.runQuery" call.
+// Exactly one of *RunQueryResponse or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *RunQueryResponse.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 *ProjectsDatabasesDocumentsRunQueryCall) Do(opts ...googleapi.CallOption) (*RunQueryResponse, 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 := &RunQueryResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Runs a query.",
+	//   "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/documents/{documentsId}/{documentsId1}:runQuery",
+	//   "httpMethod": "POST",
+	//   "id": "firestore.projects.databases.documents.runQuery",
+	//   "parameterOrder": [
+	//     "parent"
+	//   ],
+	//   "parameters": {
+	//     "parent": {
+	//       "description": "The parent resource name. In the format:\n`projects/{project_id}/databases/{database_id}/documents` or\n`projects/{project_id}/databases/{database_id}/documents/{document_path}`.\nFor example:\n`projects/my-project/databases/my-database/documents` or\n`projects/my-project/databases/my-database/documents/chatrooms/my-chatroom`",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/databases/[^/]+/documents/[^/]+/.+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+parent}:runQuery",
+	//   "request": {
+	//     "$ref": "RunQueryRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "RunQueryResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/datastore"
+	//   ]
+	// }
+
+}
+
+// method id "firestore.projects.databases.documents.write":
+
+type ProjectsDatabasesDocumentsWriteCall struct {
+	s            *Service
+	database     string
+	writerequest *WriteRequest
+	urlParams_   gensupport.URLParams
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// Write: Streams batches of document updates and deletes, in order.
+func (r *ProjectsDatabasesDocumentsService) Write(database string, writerequest *WriteRequest) *ProjectsDatabasesDocumentsWriteCall {
+	c := &ProjectsDatabasesDocumentsWriteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.database = database
+	c.writerequest = writerequest
+	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 *ProjectsDatabasesDocumentsWriteCall) Fields(s ...googleapi.Field) *ProjectsDatabasesDocumentsWriteCall {
+	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 *ProjectsDatabasesDocumentsWriteCall) Context(ctx context.Context) *ProjectsDatabasesDocumentsWriteCall {
+	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 *ProjectsDatabasesDocumentsWriteCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsDatabasesDocumentsWriteCall) 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.writerequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+database}/documents:write")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "firestore.projects.databases.documents.write" call.
+// Exactly one of *WriteResponse or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *WriteResponse.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 *ProjectsDatabasesDocumentsWriteCall) Do(opts ...googleapi.CallOption) (*WriteResponse, 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 := &WriteResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Streams batches of document updates and deletes, in order.",
+	//   "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/documents:write",
+	//   "httpMethod": "POST",
+	//   "id": "firestore.projects.databases.documents.write",
+	//   "parameterOrder": [
+	//     "database"
+	//   ],
+	//   "parameters": {
+	//     "database": {
+	//       "description": "The database name. In the format:\n`projects/{project_id}/databases/{database_id}`.\nThis is only required in the first message.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/databases/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+database}/documents:write",
+	//   "request": {
+	//     "$ref": "WriteRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "WriteResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/datastore"
+	//   ]
+	// }
+
+}
+
 // method id "firestore.projects.databases.operations.cancel":
 
 type ProjectsDatabasesOperationsCancelCall struct {
diff --git a/fitness/v1/fitness-api.json b/fitness/v1/fitness-api.json
index 0169c1f..8f2543c 100644
--- a/fitness/v1/fitness-api.json
+++ b/fitness/v1/fitness-api.json
@@ -65,7 +65,7 @@
   "description": "Stores and accesses user data in the fitness store from apps on any platform.",
   "discoveryVersion": "v1",
   "documentationLink": "https://developers.google.com/fit/rest/",
-  "etag": "\"Zkyw9ACJZUvcYmlFaKGChzhmtnE/LrHl832jGdFhMW8MGSdDnCVIH0w\"",
+  "etag": "\"J3WqvAcMk4eQjJXvfSI4Yr8VouA/lp7DlB6vWEZC2K8hvUac-f_sVvc\"",
   "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"
@@ -717,7 +717,7 @@
                   "type": "boolean"
                 },
                 "pageToken": {
-                  "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.",
+                  "description": "The continuation token, which is used for incremental syncing. To get the next batch of changes, set this parameter to the value of nextPageToken from the previous response. This token is treated as a timestamp (in millis since epoch). If specified, the API returns sessions modified since this time. The page token is ignored if either start or end time is specified. If none of start time, end time, and the page token is specified, sessions modified in the last 7 days are returned.",
                   "location": "query",
                   "type": "string"
                 },
@@ -802,7 +802,7 @@
       }
     }
   },
-  "revision": "20170922",
+  "revision": "20181129",
   "rootUrl": "https://www.googleapis.com/",
   "schemas": {
     "AggregateBucket": {
@@ -1071,7 +1071,7 @@
       "id": "DataPoint",
       "properties": {
         "computationTimeMillis": {
-          "description": "Used for version checking during transformation; that is, a datapoint can only replace another datapoint that has an older computation time stamp.",
+          "description": "DO NOT USE THIS FIELD. It is ignored, and not stored.",
           "format": "int64",
           "type": "string"
         },
diff --git a/fitness/v1/fitness-gen.go b/fitness/v1/fitness-gen.go
index f5184f3..40af08c 100644
--- a/fitness/v1/fitness-gen.go
+++ b/fitness/v1/fitness-gen.go
@@ -607,9 +607,8 @@
 //
 // Data points always contain one value for each field of the data type.
 type DataPoint struct {
-	// ComputationTimeMillis: Used for version checking during
-	// transformation; that is, a datapoint can only replace another
-	// datapoint that has an older computation time stamp.
+	// ComputationTimeMillis: DO NOT USE THIS FIELD. It is ignored, and not
+	// stored.
 	ComputationTimeMillis int64 `json:"computationTimeMillis,omitempty,string"`
 
 	// DataTypeName: The data type defining the format of the values in this
@@ -3422,9 +3421,13 @@
 }
 
 // PageToken sets the optional parameter "pageToken": The continuation
-// token, which is used to page through large result sets. To get the
-// next page of results, set this parameter to the value of
-// nextPageToken from the previous response.
+// token, which is used for incremental syncing. To get the next batch
+// of changes, set this parameter to the value of nextPageToken from the
+// previous response. This token is treated as a timestamp (in millis
+// since epoch). If specified, the API returns sessions modified since
+// this time. The page token is ignored if either start or end time is
+// specified. If none of start time, end time, and the page token is
+// specified, sessions modified in the last 7 days are returned.
 func (c *UsersSessionsListCall) PageToken(pageToken string) *UsersSessionsListCall {
 	c.urlParams_.Set("pageToken", pageToken)
 	return c
@@ -3554,7 +3557,7 @@
 	//       "type": "boolean"
 	//     },
 	//     "pageToken": {
-	//       "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.",
+	//       "description": "The continuation token, which is used for incremental syncing. To get the next batch of changes, set this parameter to the value of nextPageToken from the previous response. This token is treated as a timestamp (in millis since epoch). If specified, the API returns sessions modified since this time. The page token is ignored if either start or end time is specified. If none of start time, end time, and the page token is specified, sessions modified in the last 7 days are returned.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
diff --git a/games/v1/games-api.json b/games/v1/games-api.json
index 7f9bb2d..96b7682 100644
--- a/games/v1/games-api.json
+++ b/games/v1/games-api.json
@@ -7,9 +7,6 @@
         },
         "https://www.googleapis.com/auth/games": {
           "description": "Share your Google+ profile information and view and manage your game activity"
-        },
-        "https://www.googleapis.com/auth/plus.login": {
-          "description": "Know the list of people in your circles, your age range, and language"
         }
       }
     }
@@ -21,7 +18,7 @@
   "description": "The API for Google Play Game Services.",
   "discoveryVersion": "v1",
   "documentationLink": "https://developers.google.com/games/services/",
-  "etag": "\"J3WqvAcMk4eQjJXvfSI4Yr8VouA/el_WawMX_oUkMEJV7rCL4-wLX54\"",
+  "etag": "\"J3WqvAcMk4eQjJXvfSI4Yr8VouA/vVPYLWqLeM0tDot5C3vRSkQIwvo\"",
   "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"
@@ -109,8 +106,7 @@
             "$ref": "AchievementDefinitionsListResponse"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         }
       }
@@ -152,8 +148,7 @@
             "$ref": "AchievementIncrementResponse"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "list": {
@@ -211,8 +206,7 @@
             "$ref": "PlayerAchievementListResponse"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "reveal": {
@@ -235,8 +229,7 @@
             "$ref": "AchievementRevealResponse"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "setStepsAtLeast": {
@@ -268,8 +261,7 @@
             "$ref": "AchievementSetStepsAtLeastResponse"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "unlock": {
@@ -297,8 +289,7 @@
             "$ref": "AchievementUnlockResponse"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "updateMultiple": {
@@ -320,8 +311,7 @@
             "$ref": "AchievementUpdateMultipleResponse"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         }
       }
@@ -368,8 +358,7 @@
             "$ref": "Application"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "played": {
@@ -385,8 +374,7 @@
           },
           "path": "applications/played",
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "verify": {
@@ -409,8 +397,7 @@
             "$ref": "ApplicationVerifyResponse"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         }
       }
@@ -446,8 +433,7 @@
             "$ref": "PlayerEventListResponse"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "listDefinitions": {
@@ -479,8 +465,7 @@
             "$ref": "EventDefinitionListResponse"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "record": {
@@ -502,8 +487,7 @@
             "$ref": "EventUpdateResponse"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         }
       }
@@ -535,8 +519,7 @@
             "$ref": "Leaderboard"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "list": {
@@ -568,8 +551,7 @@
             "$ref": "LeaderboardListResponse"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         }
       }
@@ -585,8 +567,7 @@
             "$ref": "MetagameConfig"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "listCategoriesByPlayer": {
@@ -640,8 +621,7 @@
             "$ref": "CategoryListResponse"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         }
       }
@@ -673,8 +653,7 @@
             "$ref": "Player"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "list": {
@@ -727,8 +706,7 @@
             "$ref": "PlayerListResponse"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         }
       }
@@ -744,8 +722,7 @@
             "$ref": "PushTokenId"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "update": {
@@ -757,8 +734,7 @@
             "$ref": "PushToken"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         }
       }
@@ -797,8 +773,7 @@
           },
           "path": "quests/{questId}/milestones/{milestoneId}/claim",
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         }
       }
@@ -830,8 +805,7 @@
             "$ref": "Quest"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "list": {
@@ -872,8 +846,7 @@
             "$ref": "QuestListResponse"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         }
       }
@@ -900,8 +873,7 @@
             "$ref": "RevisionCheckResponse"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         }
       }
@@ -927,8 +899,7 @@
             "$ref": "Room"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "decline": {
@@ -956,8 +927,7 @@
             "$ref": "Room"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "dismiss": {
@@ -977,8 +947,7 @@
           },
           "path": "rooms/{roomId}/dismiss",
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "get": {
@@ -1006,8 +975,7 @@
             "$ref": "Room"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "join": {
@@ -1038,8 +1006,7 @@
             "$ref": "Room"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "leave": {
@@ -1070,8 +1037,7 @@
             "$ref": "Room"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "list": {
@@ -1103,8 +1069,7 @@
             "$ref": "RoomList"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "reportStatus": {
@@ -1135,8 +1100,7 @@
             "$ref": "RoomStatus"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         }
       }
@@ -1222,8 +1186,7 @@
             "$ref": "PlayerLeaderboardScoreListResponse"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "list": {
@@ -1298,8 +1261,7 @@
             "$ref": "LeaderboardScores"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "listWindow": {
@@ -1385,8 +1347,7 @@
             "$ref": "LeaderboardScores"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "submit": {
@@ -1428,8 +1389,7 @@
             "$ref": "PlayerScoreResponse"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "submitMultiple": {
@@ -1451,8 +1411,7 @@
             "$ref": "PlayerScoreListResponse"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         }
       }
@@ -1485,8 +1444,7 @@
           },
           "scopes": [
             "https://www.googleapis.com/auth/drive.appdata",
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "list": {
@@ -1528,8 +1486,7 @@
           },
           "scopes": [
             "https://www.googleapis.com/auth/drive.appdata",
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         }
       }
@@ -1553,8 +1510,7 @@
           },
           "path": "turnbasedmatches/{matchId}/cancel",
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "create": {
@@ -1576,8 +1532,7 @@
             "$ref": "TurnBasedMatch"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "decline": {
@@ -1605,8 +1560,7 @@
             "$ref": "TurnBasedMatch"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "dismiss": {
@@ -1626,8 +1580,7 @@
           },
           "path": "turnbasedmatches/{matchId}/dismiss",
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "finish": {
@@ -1658,8 +1611,7 @@
             "$ref": "TurnBasedMatch"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "get": {
@@ -1692,8 +1644,7 @@
             "$ref": "TurnBasedMatch"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "join": {
@@ -1721,8 +1672,7 @@
             "$ref": "TurnBasedMatch"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "leave": {
@@ -1750,8 +1700,7 @@
             "$ref": "TurnBasedMatch"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "leaveTurn": {
@@ -1792,8 +1741,7 @@
             "$ref": "TurnBasedMatch"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "list": {
@@ -1838,8 +1786,7 @@
             "$ref": "TurnBasedMatchList"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "rematch": {
@@ -1873,8 +1820,7 @@
             "$ref": "TurnBasedMatchRematch"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "sync": {
@@ -1919,8 +1865,7 @@
             "$ref": "TurnBasedMatchSync"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "takeTurn": {
@@ -1951,14 +1896,13 @@
             "$ref": "TurnBasedMatch"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         }
       }
     }
   },
-  "revision": "20180920",
+  "revision": "20181127",
   "rootUrl": "https://www.googleapis.com/",
   "schemas": {
     "AchievementDefinition": {
diff --git a/games/v1/games-gen.go b/games/v1/games-gen.go
index 2d26cfb..2350e47 100644
--- a/games/v1/games-gen.go
+++ b/games/v1/games-gen.go
@@ -68,9 +68,6 @@
 	// Share your Google+ profile information and view and manage your game
 	// activity
 	GamesScope = "https://www.googleapis.com/auth/games"
-
-	// Know the list of people in your circles, your age range, and language
-	PlusLoginScope = "https://www.googleapis.com/auth/plus.login"
 )
 
 func New(client *http.Client) (*Service, error) {
@@ -5208,8 +5205,7 @@
 	//     "$ref": "AchievementDefinitionsListResponse"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -5383,8 +5379,7 @@
 	//     "$ref": "AchievementIncrementResponse"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -5598,8 +5593,7 @@
 	//     "$ref": "PlayerAchievementListResponse"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -5748,8 +5742,7 @@
 	//     "$ref": "AchievementRevealResponse"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -5890,8 +5883,7 @@
 	//     "$ref": "AchievementSetStepsAtLeastResponse"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -6031,8 +6023,7 @@
 	//     "$ref": "AchievementUnlockResponse"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -6169,8 +6160,7 @@
 	//     "$ref": "AchievementUpdateMultipleResponse"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -6354,8 +6344,7 @@
 	//     "$ref": "Application"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -6453,8 +6442,7 @@
 	//   },
 	//   "path": "applications/played",
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -6597,8 +6585,7 @@
 	//     "$ref": "ApplicationVerifyResponse"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -6767,8 +6754,7 @@
 	//     "$ref": "PlayerEventListResponse"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -6958,8 +6944,7 @@
 	//     "$ref": "EventDefinitionListResponse"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -7116,8 +7101,7 @@
 	//     "$ref": "EventUpdateResponse"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -7270,8 +7254,7 @@
 	//     "$ref": "Leaderboard"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -7439,8 +7422,7 @@
 	//     "$ref": "LeaderboardListResponse"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -7587,8 +7569,7 @@
 	//     "$ref": "MetagameConfig"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -7787,8 +7768,7 @@
 	//     "$ref": "CategoryListResponse"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -7963,8 +7943,7 @@
 	//     "$ref": "Player"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -8159,8 +8138,7 @@
 	//     "$ref": "PlayerListResponse"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -8275,8 +8253,7 @@
 	//     "$ref": "PushTokenId"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -8369,8 +8346,7 @@
 	//     "$ref": "PushToken"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -8490,8 +8466,7 @@
 	//   },
 	//   "path": "quests/{questId}/milestones/{milestoneId}/claim",
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -8631,8 +8606,7 @@
 	//     "$ref": "Quest"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -8816,8 +8790,7 @@
 	//     "$ref": "QuestListResponse"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -8975,8 +8948,7 @@
 	//     "$ref": "RevisionCheckResponse"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -9112,8 +9084,7 @@
 	//     "$ref": "Room"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -9253,8 +9224,7 @@
 	//     "$ref": "Room"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -9354,8 +9324,7 @@
 	//   },
 	//   "path": "rooms/{roomId}/dismiss",
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -9508,8 +9477,7 @@
 	//     "$ref": "Room"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -9659,8 +9627,7 @@
 	//     "$ref": "Room"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -9810,8 +9777,7 @@
 	//     "$ref": "Room"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -9979,8 +9945,7 @@
 	//     "$ref": "RoomList"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -10152,8 +10117,7 @@
 	//     "$ref": "RoomStatus"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -10402,8 +10366,7 @@
 	//     "$ref": "PlayerLeaderboardScoreListResponse"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -10644,8 +10607,7 @@
 	//     "$ref": "LeaderboardScores"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -10916,8 +10878,7 @@
 	//     "$ref": "LeaderboardScores"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -11101,8 +11062,7 @@
 	//     "$ref": "PlayerScoreResponse"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -11237,8 +11197,7 @@
 	//     "$ref": "PlayerScoreListResponse"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -11392,8 +11351,7 @@
 	//   },
 	//   "scopes": [
 	//     "https://www.googleapis.com/auth/drive.appdata",
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -11577,8 +11535,7 @@
 	//   },
 	//   "scopes": [
 	//     "https://www.googleapis.com/auth/drive.appdata",
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -11698,8 +11655,7 @@
 	//   },
 	//   "path": "turnbasedmatches/{matchId}/cancel",
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -11834,8 +11790,7 @@
 	//     "$ref": "TurnBasedMatch"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -11974,8 +11929,7 @@
 	//     "$ref": "TurnBasedMatch"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -12076,8 +12030,7 @@
 	//   },
 	//   "path": "turnbasedmatches/{matchId}/dismiss",
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -12228,8 +12181,7 @@
 	//     "$ref": "TurnBasedMatch"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -12394,8 +12346,7 @@
 	//     "$ref": "TurnBasedMatch"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -12534,8 +12485,7 @@
 	//     "$ref": "TurnBasedMatch"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -12675,8 +12625,7 @@
 	//     "$ref": "TurnBasedMatch"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -12840,8 +12789,7 @@
 	//     "$ref": "TurnBasedMatch"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -13042,8 +12990,7 @@
 	//     "$ref": "TurnBasedMatchList"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -13221,8 +13168,7 @@
 	//     "$ref": "TurnBasedMatchRematch"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -13426,8 +13372,7 @@
 	//     "$ref": "TurnBasedMatchSync"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -13597,8 +13542,7 @@
 	//     "$ref": "TurnBasedMatch"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
diff --git a/gamesmanagement/v1management/gamesmanagement-api.json b/gamesmanagement/v1management/gamesmanagement-api.json
index c342a65..cfc6408 100644
--- a/gamesmanagement/v1management/gamesmanagement-api.json
+++ b/gamesmanagement/v1management/gamesmanagement-api.json
@@ -4,9 +4,6 @@
       "scopes": {
         "https://www.googleapis.com/auth/games": {
           "description": "Share your Google+ profile information and view and manage your game activity"
-        },
-        "https://www.googleapis.com/auth/plus.login": {
-          "description": "Know the list of people in your circles, your age range, and language"
         }
       }
     }
@@ -18,7 +15,7 @@
   "description": "The Management API for Google Play Game Services.",
   "discoveryVersion": "v1",
   "documentationLink": "https://developers.google.com/games/services",
-  "etag": "\"Zkyw9ACJZUvcYmlFaKGChzhmtnE/P50b5Cp0Ehm94vMte123y-qgocs\"",
+  "etag": "\"J3WqvAcMk4eQjJXvfSI4Yr8VouA/poB0tb00ydtiMy_UtAQZQ1HLNfo\"",
   "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"
@@ -97,8 +94,7 @@
             "$ref": "AchievementResetResponse"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "resetAll": {
@@ -110,8 +106,7 @@
             "$ref": "AchievementResetAllResponse"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "resetAllForAllPlayers": {
@@ -120,8 +115,7 @@
           "id": "gamesManagement.achievements.resetAllForAllPlayers",
           "path": "achievements/resetAllForAllPlayers",
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "resetForAllPlayers": {
@@ -141,8 +135,7 @@
           },
           "path": "achievements/{achievementId}/resetForAllPlayers",
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "resetMultipleForAllPlayers": {
@@ -154,8 +147,7 @@
             "$ref": "AchievementResetMultipleForAllRequest"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         }
       }
@@ -195,8 +187,7 @@
             "$ref": "HiddenPlayerList"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         }
       }
@@ -220,8 +211,7 @@
           },
           "path": "events/{eventId}/reset",
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "resetAll": {
@@ -230,8 +220,7 @@
           "id": "gamesManagement.events.resetAll",
           "path": "events/reset",
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "resetAllForAllPlayers": {
@@ -240,8 +229,7 @@
           "id": "gamesManagement.events.resetAllForAllPlayers",
           "path": "events/resetAllForAllPlayers",
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "resetForAllPlayers": {
@@ -261,8 +249,7 @@
           },
           "path": "events/{eventId}/resetForAllPlayers",
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "resetMultipleForAllPlayers": {
@@ -274,8 +261,7 @@
             "$ref": "EventsResetMultipleForAllRequest"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         }
       }
@@ -306,8 +292,7 @@
           },
           "path": "applications/{applicationId}/players/hidden/{playerId}",
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "unhide": {
@@ -334,8 +319,7 @@
           },
           "path": "applications/{applicationId}/players/hidden/{playerId}",
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         }
       }
@@ -359,8 +343,7 @@
           },
           "path": "quests/{questId}/reset",
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "resetAll": {
@@ -369,8 +352,7 @@
           "id": "gamesManagement.quests.resetAll",
           "path": "quests/reset",
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "resetAllForAllPlayers": {
@@ -379,8 +361,7 @@
           "id": "gamesManagement.quests.resetAllForAllPlayers",
           "path": "quests/resetAllForAllPlayers",
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "resetForAllPlayers": {
@@ -400,8 +381,7 @@
           },
           "path": "quests/{questId}/resetForAllPlayers",
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "resetMultipleForAllPlayers": {
@@ -413,8 +393,7 @@
             "$ref": "QuestsResetMultipleForAllRequest"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         }
       }
@@ -427,8 +406,7 @@
           "id": "gamesManagement.rooms.reset",
           "path": "rooms/reset",
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "resetForAllPlayers": {
@@ -437,8 +415,7 @@
           "id": "gamesManagement.rooms.resetForAllPlayers",
           "path": "rooms/resetForAllPlayers",
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         }
       }
@@ -465,8 +442,7 @@
             "$ref": "PlayerScoreResetResponse"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "resetAll": {
@@ -478,8 +454,7 @@
             "$ref": "PlayerScoreResetAllResponse"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "resetAllForAllPlayers": {
@@ -488,8 +463,7 @@
           "id": "gamesManagement.scores.resetAllForAllPlayers",
           "path": "scores/resetAllForAllPlayers",
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "resetForAllPlayers": {
@@ -509,8 +483,7 @@
           },
           "path": "leaderboards/{leaderboardId}/scores/resetForAllPlayers",
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "resetMultipleForAllPlayers": {
@@ -522,8 +495,7 @@
             "$ref": "ScoresResetMultipleForAllRequest"
           },
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         }
       }
@@ -536,8 +508,7 @@
           "id": "gamesManagement.turnBasedMatches.reset",
           "path": "turnbasedmatches/reset",
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         },
         "resetForAllPlayers": {
@@ -546,14 +517,13 @@
           "id": "gamesManagement.turnBasedMatches.resetForAllPlayers",
           "path": "turnbasedmatches/resetForAllPlayers",
           "scopes": [
-            "https://www.googleapis.com/auth/games",
-            "https://www.googleapis.com/auth/plus.login"
+            "https://www.googleapis.com/auth/games"
           ]
         }
       }
     }
   },
-  "revision": "20180417",
+  "revision": "20181127",
   "rootUrl": "https://www.googleapis.com/",
   "schemas": {
     "AchievementResetAllResponse": {
diff --git a/gamesmanagement/v1management/gamesmanagement-gen.go b/gamesmanagement/v1management/gamesmanagement-gen.go
index 8b65cea..a3da9de 100644
--- a/gamesmanagement/v1management/gamesmanagement-gen.go
+++ b/gamesmanagement/v1management/gamesmanagement-gen.go
@@ -65,9 +65,6 @@
 	// Share your Google+ profile information and view and manage your game
 	// activity
 	GamesScope = "https://www.googleapis.com/auth/games"
-
-	// Know the list of people in your circles, your age range, and language
-	PlusLoginScope = "https://www.googleapis.com/auth/plus.login"
 )
 
 func New(client *http.Client) (*Service, error) {
@@ -942,8 +939,7 @@
 	//     "$ref": "AchievementResetResponse"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -1056,8 +1052,7 @@
 	//     "$ref": "AchievementResetAllResponse"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -1142,8 +1137,7 @@
 	//   "id": "gamesManagement.achievements.resetAllForAllPlayers",
 	//   "path": "achievements/resetAllForAllPlayers",
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -1244,8 +1238,7 @@
 	//   },
 	//   "path": "achievements/{achievementId}/resetForAllPlayers",
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -1340,8 +1333,7 @@
 	//     "$ref": "AchievementResetMultipleForAllRequest"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -1513,8 +1505,7 @@
 	//     "$ref": "HiddenPlayerList"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -1637,8 +1628,7 @@
 	//   },
 	//   "path": "events/{eventId}/reset",
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -1724,8 +1714,7 @@
 	//   "id": "gamesManagement.events.resetAll",
 	//   "path": "events/reset",
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -1810,8 +1799,7 @@
 	//   "id": "gamesManagement.events.resetAllForAllPlayers",
 	//   "path": "events/resetAllForAllPlayers",
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -1913,8 +1901,7 @@
 	//   },
 	//   "path": "events/{eventId}/resetForAllPlayers",
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -2010,8 +1997,7 @@
 	//     "$ref": "EventsResetMultipleForAllRequest"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -2122,8 +2108,7 @@
 	//   },
 	//   "path": "applications/{applicationId}/players/hidden/{playerId}",
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -2234,8 +2219,7 @@
 	//   },
 	//   "path": "applications/{applicationId}/players/hidden/{playerId}",
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -2336,8 +2320,7 @@
 	//   },
 	//   "path": "quests/{questId}/reset",
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -2422,8 +2405,7 @@
 	//   "id": "gamesManagement.quests.resetAll",
 	//   "path": "quests/reset",
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -2507,8 +2489,7 @@
 	//   "id": "gamesManagement.quests.resetAllForAllPlayers",
 	//   "path": "quests/resetAllForAllPlayers",
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -2609,8 +2590,7 @@
 	//   },
 	//   "path": "quests/{questId}/resetForAllPlayers",
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -2705,8 +2685,7 @@
 	//     "$ref": "QuestsResetMultipleForAllRequest"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -2791,8 +2770,7 @@
 	//   "id": "gamesManagement.rooms.reset",
 	//   "path": "rooms/reset",
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -2877,8 +2855,7 @@
 	//   "id": "gamesManagement.rooms.resetForAllPlayers",
 	//   "path": "rooms/resetForAllPlayers",
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -3007,8 +2984,7 @@
 	//     "$ref": "PlayerScoreResetResponse"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -3121,8 +3097,7 @@
 	//     "$ref": "PlayerScoreResetAllResponse"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -3207,8 +3182,7 @@
 	//   "id": "gamesManagement.scores.resetAllForAllPlayers",
 	//   "path": "scores/resetAllForAllPlayers",
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -3309,8 +3283,7 @@
 	//   },
 	//   "path": "leaderboards/{leaderboardId}/scores/resetForAllPlayers",
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -3406,8 +3379,7 @@
 	//     "$ref": "ScoresResetMultipleForAllRequest"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -3491,8 +3463,7 @@
 	//   "id": "gamesManagement.turnBasedMatches.reset",
 	//   "path": "turnbasedmatches/reset",
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
@@ -3578,8 +3549,7 @@
 	//   "id": "gamesManagement.turnBasedMatches.resetForAllPlayers",
 	//   "path": "turnbasedmatches/resetForAllPlayers",
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/games",
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/games"
 	//   ]
 	// }
 
diff --git a/genomics/v2alpha1/genomics-api.json b/genomics/v2alpha1/genomics-api.json
index 9945c84..8b5aedb 100644
--- a/genomics/v2alpha1/genomics-api.json
+++ b/genomics/v2alpha1/genomics-api.json
@@ -267,7 +267,7 @@
       }
     }
   },
-  "revision": "20181017",
+  "revision": "20181127",
   "rootUrl": "https://genomics.googleapis.com/",
   "schemas": {
     "Accelerator": {
@@ -1131,7 +1131,7 @@
           "type": "object"
         },
         "machineType": {
-          "description": "The machine type of the virtual machine to create. Must be the short name\nof a standard machine type (such as \"n1-standard-1\") or a custom machine\ntype (such as \"custom-1-4096\").",
+          "description": "The machine type of the virtual machine to create. Must be the short name\nof a standard machine type (such as \"n1-standard-1\") or a custom machine\ntype (such as \"custom-1-4096\", where \"1\" indicates the number of vCPUs and\n\"4096\" indicates the memory in MB). See\n[Creating an instance with a custom machine\ntype](https://cloud.google.com/compute/docs/instances/creating-instance-with-custom-machine-type#create)\nfor more specifications on creating a custom machine type.",
           "type": "string"
         },
         "network": {
diff --git a/genomics/v2alpha1/genomics-gen.go b/genomics/v2alpha1/genomics-gen.go
index 189e136..5bd6b9a 100644
--- a/genomics/v2alpha1/genomics-gen.go
+++ b/genomics/v2alpha1/genomics-gen.go
@@ -1956,7 +1956,14 @@
 	// be the short name
 	// of a standard machine type (such as "n1-standard-1") or a custom
 	// machine
-	// type (such as "custom-1-4096").
+	// type (such as "custom-1-4096", where "1" indicates the number of
+	// vCPUs and
+	// "4096" indicates the memory in MB). See
+	// [Creating an instance with a custom
+	// machine
+	// type](https://cloud.google.com/compute/docs/instances/creating
+	// -instance-with-custom-machine-type#create)
+	// for more specifications on creating a custom machine type.
 	MachineType string `json:"machineType,omitempty"`
 
 	// Network: The VM network configuration.
diff --git a/jobs/v2/jobs-api.json b/jobs/v2/jobs-api.json
index 57be494..54ea7e6 100644
--- a/jobs/v2/jobs-api.json
+++ b/jobs/v2/jobs-api.json
@@ -614,7 +614,7 @@
       }
     }
   },
-  "revision": "20181011",
+  "revision": "20181126",
   "rootUrl": "https://jobs.googleapis.com/",
   "schemas": {
     "BatchDeleteJobsRequest": {
@@ -705,7 +705,7 @@
           "type": "string"
         },
         "roadTraffic": {
-          "description": "Optional.\n\nSpecifies the traffic density to use when caculating commute time.\nMust not be present if departure_hour_local is specified.",
+          "description": "Optional.\n\nSpecifies the traffic density to use when calculating commute time.\nMust not be present if departure_hour_local is specified.",
           "enum": [
             "ROAD_TRAFFIC_UNSPECIFIED",
             "TRAFFIC_FREE",
@@ -2416,7 +2416,7 @@
           "type": "array"
         },
         "locationFilters": {
-          "description": "Optional.\n\nThe location filter specifies geo-regions containing the jobs to\nsearch against. See LocationFilter for more information.\n\nIf a location value is not specified, jobs are be retrieved\nfrom all locations.\n\nIf multiple values are specified, jobs are retrieved from any of the\nspecified locations, and, if different values are specified\nfor the LocationFilter.distance_in_miles parameter, the maximum\nprovided distance is used for all locations.\n\nAt most 5 location filters are allowed.",
+          "description": "Optional.\n\nThe location filter specifies geo-regions containing the jobs to\nsearch against. See LocationFilter for more information.\n\nIf a location value is not specified, jobs are retrieved\nfrom all locations.\n\nIf multiple values are specified, jobs are retrieved from any of the\nspecified locations. If different values are specified for the\nLocationFilter.distance_in_miles parameter, the maximum provided\ndistance is used for all locations.\n\nAt most 5 location filters are allowed.",
           "items": {
             "$ref": "LocationFilter"
           },
@@ -2676,7 +2676,7 @@
           "type": "array"
         },
         "locationFilters": {
-          "description": "Optional.\n\nThe location filter specifies geo-regions containing the jobs to\nsearch against. See LocationFilter for more information.\n\nIf a location value isn't specified, jobs fitting the other search\ncriteria are retrieved regardless of where they're located.\n\nIf multiple values are specified, jobs are retrieved from any of the\nspecified locations, and, if different values are specified\nfor the LocationFilter.distance_in_miles parameter, the maximum\nprovided distance is used for all locations.\n\nAt most 5 location filters are allowed.",
+          "description": "Optional.\n\nThe location filter specifies geo-regions containing the jobs to\nsearch against. See LocationFilter for more information.\n\nIf a location value isn't specified, jobs fitting the other search\ncriteria are retrieved regardless of where they're located.\n\nIf multiple values are specified, jobs are retrieved from any of the\nspecified locations. If different values are specified for the\nLocationFilter.distance_in_miles parameter, the maximum provided\ndistance is used for all locations.\n\nAt most 5 location filters are allowed.",
           "items": {
             "$ref": "LocationFilter"
           },
@@ -3037,7 +3037,7 @@
       "id": "SearchJobsRequest",
       "properties": {
         "disableRelevanceThresholding": {
-          "description": "Deprecated. Any value provided in this field is ignored.\n\nOptional.\n\nControls whether to disable relevance thresholding. Relevance\nthresholding removes jobs that have low relevance in search results,\nfor example, removing \"Assistant to the CEO\" positions from the search\nresults of a search for \"CEO\".\n\nDisabling relevance thresholding improves the accuracy of subsequent\nsearch requests.\n\nDefaults to false.",
+          "description": "Optional.\n\nControls whether to disable relevance thresholding. Relevance\nthresholding removes jobs that have low relevance in search results,\nfor example, removing \"Assistant to the CEO\" positions from the search\nresults of a search for \"CEO\".\n\nDisabling relevance thresholding improves the accuracy of subsequent\nsearch requests.\n\nDefaults to false.",
           "type": "boolean"
         },
         "enableBroadening": {
diff --git a/jobs/v2/jobs-gen.go b/jobs/v2/jobs-gen.go
index d239434..11ffeec 100644
--- a/jobs/v2/jobs-gen.go
+++ b/jobs/v2/jobs-gen.go
@@ -339,7 +339,7 @@
 
 	// RoadTraffic: Optional.
 	//
-	// Specifies the traffic density to use when caculating commute
+	// Specifies the traffic density to use when calculating commute
 	// time.
 	// Must not be present if departure_hour_local is specified.
 	//
@@ -3520,15 +3520,16 @@
 	// to
 	// search against. See LocationFilter for more information.
 	//
-	// If a location value is not specified, jobs are be retrieved
+	// If a location value is not specified, jobs are retrieved
 	// from all locations.
 	//
 	// If multiple values are specified, jobs are retrieved from any of
 	// the
-	// specified locations, and, if different values are specified
-	// for the LocationFilter.distance_in_miles parameter, the
-	// maximum
-	// provided distance is used for all locations.
+	// specified locations. If different values are specified for
+	// the
+	// LocationFilter.distance_in_miles parameter, the maximum
+	// provided
+	// distance is used for all locations.
 	//
 	// At most 5 location filters are allowed.
 	LocationFilters []*LocationFilter `json:"locationFilters,omitempty"`
@@ -4006,10 +4007,11 @@
 	//
 	// If multiple values are specified, jobs are retrieved from any of
 	// the
-	// specified locations, and, if different values are specified
-	// for the LocationFilter.distance_in_miles parameter, the
-	// maximum
-	// provided distance is used for all locations.
+	// specified locations. If different values are specified for
+	// the
+	// LocationFilter.distance_in_miles parameter, the maximum
+	// provided
+	// distance is used for all locations.
 	//
 	// At most 5 location filters are allowed.
 	LocationFilters []*LocationFilter `json:"locationFilters,omitempty"`
@@ -4911,10 +4913,7 @@
 //
 // The Request body of the `SearchJobs` call.
 type SearchJobsRequest struct {
-	// DisableRelevanceThresholding: Deprecated. Any value provided in this
-	// field is ignored.
-	//
-	// Optional.
+	// DisableRelevanceThresholding: Optional.
 	//
 	// Controls whether to disable relevance thresholding.
 	// Relevance
diff --git a/jobs/v3/jobs-api.json b/jobs/v3/jobs-api.json
index bdddd0f..8552d9a 100644
--- a/jobs/v3/jobs-api.json
+++ b/jobs/v3/jobs-api.json
@@ -124,12 +124,12 @@
               "type": "string"
             },
             "languageCode": {
-              "description": "Deprecated. Use language_codes instead.\n\nOptional.\n\nThe language of the query. This is\nthe BCP-47 language code, such as \"en-US\" or \"sr-Latn\".\nFor more information, see\n[Tags for Identifying Languages](https://tools.ietf.org/html/bcp47).\n\nFor CompletionType.JOB_TITLE type, only open jobs with same\nlanguage_code are returned.\n\nFor CompletionType.COMPANY_NAME type,\nonly companies having open jobs with same language_code are\nreturned.\n\nFor CompletionType.COMBINED type, only open jobs with same\nlanguage_code or companies having open jobs with same\nlanguage_code are returned.\n\nThe maximum number of allowed characters is 255.",
+              "description": "Deprecated. Use language_codes instead.\n\nOptional.\n\nThe language of the query. This is\nthe BCP-47 language code, such as \"en-US\" or \"sr-Latn\".\nFor more information, see\n[Tags for Identifying Languages](https://tools.ietf.org/html/bcp47).\n\nFor CompletionType.JOB_TITLE type, only open jobs with the same\nlanguage_code are returned.\n\nFor CompletionType.COMPANY_NAME type,\nonly companies having open jobs with the same language_code are\nreturned.\n\nFor CompletionType.COMBINED type, only open jobs with the same\nlanguage_code or companies having open jobs with the same\nlanguage_code are returned.\n\nThe maximum number of allowed characters is 255.",
               "location": "query",
               "type": "string"
             },
             "languageCodes": {
-              "description": "Optional.\n\nThe list of languages of the query. This is\nthe BCP-47 language code, such as \"en-US\" or \"sr-Latn\".\nFor more information, see\n[Tags for Identifying Languages](https://tools.ietf.org/html/bcp47).\n\nFor CompletionType.JOB_TITLE type, only open jobs with same\nlanguage_codes are returned.\n\nFor CompletionType.COMPANY_NAME type,\nonly companies having open jobs with same language_codes are\nreturned.\n\nFor CompletionType.COMBINED type, only open jobs with same\nlanguage_codes or companies having open jobs with same\nlanguage_codes are returned.\n\nThe maximum number of allowed characters is 255.",
+              "description": "Optional.\n\nThe list of languages of the query. This is\nthe BCP-47 language code, such as \"en-US\" or \"sr-Latn\".\nFor more information, see\n[Tags for Identifying Languages](https://tools.ietf.org/html/bcp47).\n\nFor CompletionType.JOB_TITLE type, only open jobs with the same\nlanguage_codes are returned.\n\nFor CompletionType.COMPANY_NAME type,\nonly companies having open jobs with the same language_codes are\nreturned.\n\nFor CompletionType.COMBINED type, only open jobs with the same\nlanguage_codes or companies having open jobs with the same\nlanguage_codes are returned.\n\nThe maximum number of allowed characters is 255.",
               "location": "query",
               "repeated": true,
               "type": "string"
@@ -599,7 +599,7 @@
       }
     }
   },
-  "revision": "20181029",
+  "revision": "20181126",
   "rootUrl": "https://jobs.googleapis.com/",
   "schemas": {
     "ApplicationInfo": {
@@ -698,7 +698,7 @@
           "description": "Optional.\n\nThe departure time used to calculate traffic impact, represented as\n.google.type.TimeOfDay in local time zone.\n\nCurrently traffic model is restricted to hour level resolution."
         },
         "roadTraffic": {
-          "description": "Optional.\n\nSpecifies the traffic density to use when caculating commute time.",
+          "description": "Optional.\n\nSpecifies the traffic density to use when calculating commute time.",
           "enum": [
             "ROAD_TRAFFIC_UNSPECIFIED",
             "TRAFFIC_FREE",
@@ -1886,7 +1886,7 @@
           "type": "array"
         },
         "locationFilters": {
-          "description": "Optional.\n\nThe location filter specifies geo-regions containing the jobs to\nsearch against. See LocationFilter for more information.\n\nIf a location value isn't specified, jobs fitting the other search\ncriteria are retrieved regardless of where they're located.\n\nIf multiple values are specified, jobs are retrieved from any of the\nspecified locations, and, if different values are specified\nfor the LocationFilter.distance_in_miles parameter, the maximum\nprovided distance is used for all locations.\n\nAt most 5 location filters are allowed.",
+          "description": "Optional.\n\nThe location filter specifies geo-regions containing the jobs to\nsearch against. See LocationFilter for more information.\n\nIf a location value isn't specified, jobs fitting the other search\ncriteria are retrieved regardless of where they're located.\n\nIf multiple values are specified, jobs are retrieved from any of the\nspecified locations. If different values are specified for the\nLocationFilter.distance_in_miles parameter, the maximum provided\ndistance is used for all locations.\n\nAt most 5 location filters are allowed.",
           "items": {
             "$ref": "LocationFilter"
           },
@@ -2007,7 +2007,7 @@
           "description": "Postal address of the location that includes human readable information,\nsuch as postal delivery and payments addresses. Given a postal address,\na postal service can deliver items to a premises, P.O. Box, or other\ndelivery location."
         },
         "radiusInMiles": {
-          "description": "Radius in miles of the job location. This value is derived from the\nlocation bounding box in which a circle with the specified radius\ncentered from LatLng coves the area associated with the job location.\nFor example, currently, \"Mountain View, CA, USA\" has a radius of\n6.17 miles.",
+          "description": "Radius in miles of the job location. This value is derived from the\nlocation bounding box in which a circle with the specified radius\ncentered from LatLng covers the area associated with the job location.\nFor example, currently, \"Mountain View, CA, USA\" has a radius of\n6.17 miles.",
           "format": "double",
           "type": "number"
         }
@@ -2386,7 +2386,7 @@
           "description": "The spell checking result, and correction."
         },
         "totalSize": {
-          "description": "The precise result count, which is available only if the client set\nenable_precise_result_size to `true` or if the response\nis the last page of results. Otherwise, the value is `-1`.",
+          "description": "The precise result count, which is available only if the client set\nenable_precise_result_size to `true`, or if the response\nis the last page of results. Otherwise, the value is `-1`.",
           "format": "int32",
           "type": "integer"
         }
diff --git a/jobs/v3/jobs-gen.go b/jobs/v3/jobs-gen.go
index 06d0aa8..bcbba38 100644
--- a/jobs/v3/jobs-gen.go
+++ b/jobs/v3/jobs-gen.go
@@ -349,7 +349,7 @@
 
 	// RoadTraffic: Optional.
 	//
-	// Specifies the traffic density to use when caculating commute time.
+	// Specifies the traffic density to use when calculating commute time.
 	//
 	// Possible values:
 	//   "ROAD_TRAFFIC_UNSPECIFIED" - Road traffic situation is not
@@ -2575,10 +2575,11 @@
 	//
 	// If multiple values are specified, jobs are retrieved from any of
 	// the
-	// specified locations, and, if different values are specified
-	// for the LocationFilter.distance_in_miles parameter, the
-	// maximum
-	// provided distance is used for all locations.
+	// specified locations. If different values are specified for
+	// the
+	// LocationFilter.distance_in_miles parameter, the maximum
+	// provided
+	// distance is used for all locations.
 	//
 	// At most 5 location filters are allowed.
 	LocationFilters []*LocationFilter `json:"locationFilters,omitempty"`
@@ -2819,7 +2820,7 @@
 	// derived from the
 	// location bounding box in which a circle with the specified
 	// radius
-	// centered from LatLng coves the area associated with the job
+	// centered from LatLng covers the area associated with the job
 	// location.
 	// For example, currently, "Mountain View, CA, USA" has a radius of
 	// 6.17 miles.
@@ -3844,7 +3845,7 @@
 
 	// TotalSize: The precise result count, which is available only if the
 	// client set
-	// enable_precise_result_size to `true` or if the response
+	// enable_precise_result_size to `true`, or if the response
 	// is the last page of results. Otherwise, the value is `-1`.
 	TotalSize int64 `json:"totalSize,omitempty"`
 
@@ -4118,18 +4119,19 @@
 // [Tags for Identifying
 // Languages](https://tools.ietf.org/html/bcp47).
 //
-// For CompletionType.JOB_TITLE type, only open jobs with
+// For CompletionType.JOB_TITLE type, only open jobs with the
 // same
 // language_code are returned.
 //
 // For CompletionType.COMPANY_NAME type,
-// only companies having open jobs with same language_code
+// only companies having open jobs with the same language_code
 // are
 // returned.
 //
-// For CompletionType.COMBINED type, only open jobs with
+// For CompletionType.COMBINED type, only open jobs with the
 // same
-// language_code or companies having open jobs with same
+// language_code or companies having open jobs with the
+// same
 // language_code are returned.
 //
 // The maximum number of allowed characters is 255.
@@ -4145,18 +4147,19 @@
 // [Tags for Identifying
 // Languages](https://tools.ietf.org/html/bcp47).
 //
-// For CompletionType.JOB_TITLE type, only open jobs with
+// For CompletionType.JOB_TITLE type, only open jobs with the
 // same
 // language_codes are returned.
 //
 // For CompletionType.COMPANY_NAME type,
-// only companies having open jobs with same language_codes
+// only companies having open jobs with the same language_codes
 // are
 // returned.
 //
-// For CompletionType.COMBINED type, only open jobs with
+// For CompletionType.COMBINED type, only open jobs with the
 // same
-// language_codes or companies having open jobs with same
+// language_codes or companies having open jobs with the
+// same
 // language_codes are returned.
 //
 // The maximum number of allowed characters is 255.
@@ -4323,12 +4326,12 @@
 	//       "type": "string"
 	//     },
 	//     "languageCode": {
-	//       "description": "Deprecated. Use language_codes instead.\n\nOptional.\n\nThe language of the query. This is\nthe BCP-47 language code, such as \"en-US\" or \"sr-Latn\".\nFor more information, see\n[Tags for Identifying Languages](https://tools.ietf.org/html/bcp47).\n\nFor CompletionType.JOB_TITLE type, only open jobs with same\nlanguage_code are returned.\n\nFor CompletionType.COMPANY_NAME type,\nonly companies having open jobs with same language_code are\nreturned.\n\nFor CompletionType.COMBINED type, only open jobs with same\nlanguage_code or companies having open jobs with same\nlanguage_code are returned.\n\nThe maximum number of allowed characters is 255.",
+	//       "description": "Deprecated. Use language_codes instead.\n\nOptional.\n\nThe language of the query. This is\nthe BCP-47 language code, such as \"en-US\" or \"sr-Latn\".\nFor more information, see\n[Tags for Identifying Languages](https://tools.ietf.org/html/bcp47).\n\nFor CompletionType.JOB_TITLE type, only open jobs with the same\nlanguage_code are returned.\n\nFor CompletionType.COMPANY_NAME type,\nonly companies having open jobs with the same language_code are\nreturned.\n\nFor CompletionType.COMBINED type, only open jobs with the same\nlanguage_code or companies having open jobs with the same\nlanguage_code are returned.\n\nThe maximum number of allowed characters is 255.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
 	//     "languageCodes": {
-	//       "description": "Optional.\n\nThe list of languages of the query. This is\nthe BCP-47 language code, such as \"en-US\" or \"sr-Latn\".\nFor more information, see\n[Tags for Identifying Languages](https://tools.ietf.org/html/bcp47).\n\nFor CompletionType.JOB_TITLE type, only open jobs with same\nlanguage_codes are returned.\n\nFor CompletionType.COMPANY_NAME type,\nonly companies having open jobs with same language_codes are\nreturned.\n\nFor CompletionType.COMBINED type, only open jobs with same\nlanguage_codes or companies having open jobs with same\nlanguage_codes are returned.\n\nThe maximum number of allowed characters is 255.",
+	//       "description": "Optional.\n\nThe list of languages of the query. This is\nthe BCP-47 language code, such as \"en-US\" or \"sr-Latn\".\nFor more information, see\n[Tags for Identifying Languages](https://tools.ietf.org/html/bcp47).\n\nFor CompletionType.JOB_TITLE type, only open jobs with the same\nlanguage_codes are returned.\n\nFor CompletionType.COMPANY_NAME type,\nonly companies having open jobs with the same language_codes are\nreturned.\n\nFor CompletionType.COMBINED type, only open jobs with the same\nlanguage_codes or companies having open jobs with the same\nlanguage_codes are returned.\n\nThe maximum number of allowed characters is 255.",
 	//       "location": "query",
 	//       "repeated": true,
 	//       "type": "string"
diff --git a/jobs/v3p1beta1/jobs-api.json b/jobs/v3p1beta1/jobs-api.json
index e8b5980..39d1d45 100644
--- a/jobs/v3p1beta1/jobs-api.json
+++ b/jobs/v3p1beta1/jobs-api.json
@@ -124,12 +124,12 @@
               "type": "string"
             },
             "languageCode": {
-              "description": "Deprecated. Use language_codes instead.\n\nOptional.\n\nThe language of the query. This is\nthe BCP-47 language code, such as \"en-US\" or \"sr-Latn\".\nFor more information, see\n[Tags for Identifying Languages](https://tools.ietf.org/html/bcp47).\n\nFor CompletionType.JOB_TITLE type, only open jobs with same\nlanguage_code are returned.\n\nFor CompletionType.COMPANY_NAME type,\nonly companies having open jobs with same language_code are\nreturned.\n\nFor CompletionType.COMBINED type, only open jobs with same\nlanguage_code or companies having open jobs with same\nlanguage_code are returned.\n\nThe maximum number of allowed characters is 255.",
+              "description": "Deprecated. Use language_codes instead.\n\nOptional.\n\nThe language of the query. This is\nthe BCP-47 language code, such as \"en-US\" or \"sr-Latn\".\nFor more information, see\n[Tags for Identifying Languages](https://tools.ietf.org/html/bcp47).\n\nFor CompletionType.JOB_TITLE type, only open jobs with the same\nlanguage_code are returned.\n\nFor CompletionType.COMPANY_NAME type,\nonly companies having open jobs with the same language_code are\nreturned.\n\nFor CompletionType.COMBINED type, only open jobs with the same\nlanguage_code or companies having open jobs with the same\nlanguage_code are returned.\n\nThe maximum number of allowed characters is 255.",
               "location": "query",
               "type": "string"
             },
             "languageCodes": {
-              "description": "Optional.\n\nThe list of languages of the query. This is\nthe BCP-47 language code, such as \"en-US\" or \"sr-Latn\".\nFor more information, see\n[Tags for Identifying Languages](https://tools.ietf.org/html/bcp47).\n\nFor CompletionType.JOB_TITLE type, only open jobs with same\nlanguage_codes are returned.\n\nFor CompletionType.COMPANY_NAME type,\nonly companies having open jobs with same language_codes are\nreturned.\n\nFor CompletionType.COMBINED type, only open jobs with same\nlanguage_codes or companies having open jobs with same\nlanguage_codes are returned.\n\nThe maximum number of allowed characters is 255.",
+              "description": "Optional.\n\nThe list of languages of the query. This is\nthe BCP-47 language code, such as \"en-US\" or \"sr-Latn\".\nFor more information, see\n[Tags for Identifying Languages](https://tools.ietf.org/html/bcp47).\n\nFor CompletionType.JOB_TITLE type, only open jobs with the same\nlanguage_codes are returned.\n\nFor CompletionType.COMPANY_NAME type,\nonly companies having open jobs with the same language_codes are\nreturned.\n\nFor CompletionType.COMBINED type, only open jobs with the same\nlanguage_codes or companies having open jobs with the same\nlanguage_codes are returned.\n\nThe maximum number of allowed characters is 255.",
               "location": "query",
               "repeated": true,
               "type": "string"
@@ -632,7 +632,7 @@
       }
     }
   },
-  "revision": "20181029",
+  "revision": "20181126",
   "rootUrl": "https://jobs.googleapis.com/",
   "schemas": {
     "ApplicationInfo": {
@@ -766,7 +766,7 @@
           "description": "Optional.\n\nThe departure time used to calculate traffic impact, represented as\n.google.type.TimeOfDay in local time zone.\n\nCurrently traffic model is restricted to hour level resolution."
         },
         "roadTraffic": {
-          "description": "Optional.\n\nSpecifies the traffic density to use when caculating commute time.",
+          "description": "Optional.\n\nSpecifies the traffic density to use when calculating commute time.",
           "enum": [
             "ROAD_TRAFFIC_UNSPECIFIED",
             "TRAFFIC_FREE",
@@ -2091,7 +2091,7 @@
           "type": "array"
         },
         "locationFilters": {
-          "description": "Optional.\n\nThe location filter specifies geo-regions containing the jobs to\nsearch against. See LocationFilter for more information.\n\nIf a location value isn't specified, jobs fitting the other search\ncriteria are retrieved regardless of where they're located.\n\nIf multiple values are specified, jobs are retrieved from any of the\nspecified locations, and, if different values are specified\nfor the LocationFilter.distance_in_miles parameter, the maximum\nprovided distance is used for all locations.\n\nAt most 5 location filters are allowed.",
+          "description": "Optional.\n\nThe location filter specifies geo-regions containing the jobs to\nsearch against. See LocationFilter for more information.\n\nIf a location value isn't specified, jobs fitting the other search\ncriteria are retrieved regardless of where they're located.\n\nIf multiple values are specified, jobs are retrieved from any of the\nspecified locations. If different values are specified for the\nLocationFilter.distance_in_miles parameter, the maximum provided\ndistance is used for all locations.\n\nAt most 5 location filters are allowed.",
           "items": {
             "$ref": "LocationFilter"
           },
@@ -2212,7 +2212,7 @@
           "description": "Postal address of the location that includes human readable information,\nsuch as postal delivery and payments addresses. Given a postal address,\na postal service can deliver items to a premises, P.O. Box, or other\ndelivery location."
         },
         "radiusInMiles": {
-          "description": "Radius in miles of the job location. This value is derived from the\nlocation bounding box in which a circle with the specified radius\ncentered from LatLng coves the area associated with the job location.\nFor example, currently, \"Mountain View, CA, USA\" has a radius of\n6.17 miles.",
+          "description": "Radius in miles of the job location. This value is derived from the\nlocation bounding box in which a circle with the specified radius\ncentered from LatLng covers the area associated with the job location.\nFor example, currently, \"Mountain View, CA, USA\" has a radius of\n6.17 miles.",
           "format": "double",
           "type": "number"
         }
@@ -2478,16 +2478,16 @@
           "type": "boolean"
         },
         "diversificationLevel": {
-          "description": "Optional.\n\nControls whether highly similar jobs are returned next to each other in\nthe search results. Jobs are determined to be highly similar based on\ntheir titles, job categories, and locations. Highly similar results will\nbe clustered so that only one representative job of the cluster will be\ndisplayed to the job seeker higher up in the results, with the other jobs\nbeing displayed lower down in the results.\n\nDefaults to DiversificationLevel.SIMPLE if no value\nis specified.",
+          "description": "Optional.\n\nControls whether highly similar jobs are returned next to each other in\nthe search results. Jobs are identified as highly similar based on\ntheir titles, job categories, and locations. Highly similar results are\nclustered so that only one representative job of the cluster is\ndisplayed to the job seeker higher up in the results, with the other jobs\nbeing displayed lower down in the results.\n\nDefaults to DiversificationLevel.SIMPLE if no value\nis specified.",
           "enum": [
             "DIVERSIFICATION_LEVEL_UNSPECIFIED",
             "DISABLED",
             "SIMPLE"
           ],
           "enumDescriptions": [
-            "",
+            "The diversification level isn't specified.",
             "Disables diversification. Jobs that would normally be pushed to the last\npage would not have their positions altered. This may result in highly\nsimilar jobs appearing in sequence in the search results.",
-            "Default diversifying behavior. The result list is ordered such that\nhighly similar results are pushed to the end of the last page of search\nresults."
+            "Default diversifying behavior. The result list is ordered so that\nhighly similar results are pushed to the end of the last page of search\nresults."
           ],
           "type": "string"
         },
@@ -2623,7 +2623,7 @@
           "description": "The spell checking result, and correction."
         },
         "totalSize": {
-          "description": "The precise result count, which is available only if the client set\nenable_precise_result_size to `true` or if the response\nis the last page of results. Otherwise, the value is `-1`.",
+          "description": "The precise result count, which is available only if the client set\nenable_precise_result_size to `true`, or if the response\nis the last page of results. Otherwise, the value is `-1`.",
           "format": "int32",
           "type": "integer"
         }
diff --git a/jobs/v3p1beta1/jobs-gen.go b/jobs/v3p1beta1/jobs-gen.go
index 41704e5..5d0ae74 100644
--- a/jobs/v3p1beta1/jobs-gen.go
+++ b/jobs/v3p1beta1/jobs-gen.go
@@ -449,7 +449,7 @@
 
 	// RoadTraffic: Optional.
 	//
-	// Specifies the traffic density to use when caculating commute time.
+	// Specifies the traffic density to use when calculating commute time.
 	//
 	// Possible values:
 	//   "ROAD_TRAFFIC_UNSPECIFIED" - Road traffic situation is not
@@ -3161,10 +3161,11 @@
 	//
 	// If multiple values are specified, jobs are retrieved from any of
 	// the
-	// specified locations, and, if different values are specified
-	// for the LocationFilter.distance_in_miles parameter, the
-	// maximum
-	// provided distance is used for all locations.
+	// specified locations. If different values are specified for
+	// the
+	// LocationFilter.distance_in_miles parameter, the maximum
+	// provided
+	// distance is used for all locations.
 	//
 	// At most 5 location filters are allowed.
 	LocationFilters []*LocationFilter `json:"locationFilters,omitempty"`
@@ -3405,7 +3406,7 @@
 	// derived from the
 	// location bounding box in which a circle with the specified
 	// radius
-	// centered from LatLng coves the area associated with the job
+	// centered from LatLng covers the area associated with the job
 	// location.
 	// For example, currently, "Mountain View, CA, USA" has a radius of
 	// 6.17 miles.
@@ -4181,12 +4182,12 @@
 	//
 	// Controls whether highly similar jobs are returned next to each other
 	// in
-	// the search results. Jobs are determined to be highly similar based
+	// the search results. Jobs are identified as highly similar based
 	// on
 	// their titles, job categories, and locations. Highly similar results
-	// will
-	// be clustered so that only one representative job of the cluster will
-	// be
+	// are
+	// clustered so that only one representative job of the cluster
+	// is
 	// displayed to the job seeker higher up in the results, with the other
 	// jobs
 	// being displayed lower down in the results.
@@ -4195,14 +4196,15 @@
 	// is specified.
 	//
 	// Possible values:
-	//   "DIVERSIFICATION_LEVEL_UNSPECIFIED"
+	//   "DIVERSIFICATION_LEVEL_UNSPECIFIED" - The diversification level
+	// isn't specified.
 	//   "DISABLED" - Disables diversification. Jobs that would normally be
 	// pushed to the last
 	// page would not have their positions altered. This may result in
 	// highly
 	// similar jobs appearing in sequence in the search results.
 	//   "SIMPLE" - Default diversifying behavior. The result list is
-	// ordered such that
+	// ordered so that
 	// highly similar results are pushed to the end of the last page of
 	// search
 	// results.
@@ -4487,7 +4489,7 @@
 
 	// TotalSize: The precise result count, which is available only if the
 	// client set
-	// enable_precise_result_size to `true` or if the response
+	// enable_precise_result_size to `true`, or if the response
 	// is the last page of results. Otherwise, the value is `-1`.
 	TotalSize int64 `json:"totalSize,omitempty"`
 
@@ -4761,18 +4763,19 @@
 // [Tags for Identifying
 // Languages](https://tools.ietf.org/html/bcp47).
 //
-// For CompletionType.JOB_TITLE type, only open jobs with
+// For CompletionType.JOB_TITLE type, only open jobs with the
 // same
 // language_code are returned.
 //
 // For CompletionType.COMPANY_NAME type,
-// only companies having open jobs with same language_code
+// only companies having open jobs with the same language_code
 // are
 // returned.
 //
-// For CompletionType.COMBINED type, only open jobs with
+// For CompletionType.COMBINED type, only open jobs with the
 // same
-// language_code or companies having open jobs with same
+// language_code or companies having open jobs with the
+// same
 // language_code are returned.
 //
 // The maximum number of allowed characters is 255.
@@ -4788,18 +4791,19 @@
 // [Tags for Identifying
 // Languages](https://tools.ietf.org/html/bcp47).
 //
-// For CompletionType.JOB_TITLE type, only open jobs with
+// For CompletionType.JOB_TITLE type, only open jobs with the
 // same
 // language_codes are returned.
 //
 // For CompletionType.COMPANY_NAME type,
-// only companies having open jobs with same language_codes
+// only companies having open jobs with the same language_codes
 // are
 // returned.
 //
-// For CompletionType.COMBINED type, only open jobs with
+// For CompletionType.COMBINED type, only open jobs with the
 // same
-// language_codes or companies having open jobs with same
+// language_codes or companies having open jobs with the
+// same
 // language_codes are returned.
 //
 // The maximum number of allowed characters is 255.
@@ -4966,12 +4970,12 @@
 	//       "type": "string"
 	//     },
 	//     "languageCode": {
-	//       "description": "Deprecated. Use language_codes instead.\n\nOptional.\n\nThe language of the query. This is\nthe BCP-47 language code, such as \"en-US\" or \"sr-Latn\".\nFor more information, see\n[Tags for Identifying Languages](https://tools.ietf.org/html/bcp47).\n\nFor CompletionType.JOB_TITLE type, only open jobs with same\nlanguage_code are returned.\n\nFor CompletionType.COMPANY_NAME type,\nonly companies having open jobs with same language_code are\nreturned.\n\nFor CompletionType.COMBINED type, only open jobs with same\nlanguage_code or companies having open jobs with same\nlanguage_code are returned.\n\nThe maximum number of allowed characters is 255.",
+	//       "description": "Deprecated. Use language_codes instead.\n\nOptional.\n\nThe language of the query. This is\nthe BCP-47 language code, such as \"en-US\" or \"sr-Latn\".\nFor more information, see\n[Tags for Identifying Languages](https://tools.ietf.org/html/bcp47).\n\nFor CompletionType.JOB_TITLE type, only open jobs with the same\nlanguage_code are returned.\n\nFor CompletionType.COMPANY_NAME type,\nonly companies having open jobs with the same language_code are\nreturned.\n\nFor CompletionType.COMBINED type, only open jobs with the same\nlanguage_code or companies having open jobs with the same\nlanguage_code are returned.\n\nThe maximum number of allowed characters is 255.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
 	//     "languageCodes": {
-	//       "description": "Optional.\n\nThe list of languages of the query. This is\nthe BCP-47 language code, such as \"en-US\" or \"sr-Latn\".\nFor more information, see\n[Tags for Identifying Languages](https://tools.ietf.org/html/bcp47).\n\nFor CompletionType.JOB_TITLE type, only open jobs with same\nlanguage_codes are returned.\n\nFor CompletionType.COMPANY_NAME type,\nonly companies having open jobs with same language_codes are\nreturned.\n\nFor CompletionType.COMBINED type, only open jobs with same\nlanguage_codes or companies having open jobs with same\nlanguage_codes are returned.\n\nThe maximum number of allowed characters is 255.",
+	//       "description": "Optional.\n\nThe list of languages of the query. This is\nthe BCP-47 language code, such as \"en-US\" or \"sr-Latn\".\nFor more information, see\n[Tags for Identifying Languages](https://tools.ietf.org/html/bcp47).\n\nFor CompletionType.JOB_TITLE type, only open jobs with the same\nlanguage_codes are returned.\n\nFor CompletionType.COMPANY_NAME type,\nonly companies having open jobs with the same language_codes are\nreturned.\n\nFor CompletionType.COMBINED type, only open jobs with the same\nlanguage_codes or companies having open jobs with the same\nlanguage_codes are returned.\n\nThe maximum number of allowed characters is 255.",
 	//       "location": "query",
 	//       "repeated": true,
 	//       "type": "string"
diff --git a/monitoring/v3/monitoring-api.json b/monitoring/v3/monitoring-api.json
index f05365e..e015c79 100644
--- a/monitoring/v3/monitoring-api.json
+++ b/monitoring/v3/monitoring-api.json
@@ -113,214 +113,6 @@
   },
   "protocol": "rest",
   "resources": {
-    "metricDescriptors": {
-      "methods": {
-        "create": {
-          "description": "Creates a new metric descriptor. User-created metric descriptors define custom metrics.",
-          "flatPath": "v3/{v3Id}/{v3Id1}/metricDescriptors",
-          "httpMethod": "POST",
-          "id": "monitoring.metricDescriptors.create",
-          "parameterOrder": [
-            "name"
-          ],
-          "parameters": {
-            "name": {
-              "description": "The project on which to execute the request. The format is \"projects/{project_id_or_number}\".",
-              "location": "path",
-              "pattern": "^[^/]+/[^/]+$",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "path": "v3/{+name}/metricDescriptors",
-          "request": {
-            "$ref": "MetricDescriptor"
-          },
-          "response": {
-            "$ref": "MetricDescriptor"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/monitoring",
-            "https://www.googleapis.com/auth/monitoring.write"
-          ]
-        },
-        "delete": {
-          "description": "Deletes a metric descriptor. Only user-created custom metrics can be deleted.",
-          "flatPath": "v3/{v3Id}/{v3Id1}/metricDescriptors/{metricDescriptorsId}",
-          "httpMethod": "DELETE",
-          "id": "monitoring.metricDescriptors.delete",
-          "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\".",
-              "location": "path",
-              "pattern": "^[^/]+/[^/]+/metricDescriptors/.+$",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "path": "v3/{+name}",
-          "response": {
-            "$ref": "Empty"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/monitoring"
-          ]
-        },
-        "get": {
-          "description": "Gets a single metric descriptor. This method does not require a Stackdriver account.",
-          "flatPath": "v3/{v3Id}/{v3Id1}/metricDescriptors/{metricDescriptorsId}",
-          "httpMethod": "GET",
-          "id": "monitoring.metricDescriptors.get",
-          "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 value of {metric_id} is \"compute.googleapis.com/instance/disk/read_bytes_count\".",
-              "location": "path",
-              "pattern": "^[^/]+/[^/]+/metricDescriptors/.+$",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "path": "v3/{+name}",
-          "response": {
-            "$ref": "MetricDescriptor"
-          },
-          "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"
-          ]
-        },
-        "list": {
-          "description": "Lists metric descriptors that match a filter. This method does not require a Stackdriver account.",
-          "flatPath": "v3/{v3Id}/{v3Id1}/metricDescriptors",
-          "httpMethod": "GET",
-          "id": "monitoring.metricDescriptors.list",
-          "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",
-              "location": "query",
-              "type": "string"
-            },
-            "name": {
-              "description": "The project on which to execute the request. The format is \"projects/{project_id_or_number}\".",
-              "location": "path",
-              "pattern": "^[^/]+/[^/]+$",
-              "required": true,
-              "type": "string"
-            },
-            "pageSize": {
-              "description": "A positive number that is the maximum number of results to return.",
-              "format": "int32",
-              "location": "query",
-              "type": "integer"
-            },
-            "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.",
-              "location": "query",
-              "type": "string"
-            }
-          },
-          "path": "v3/{+name}/metricDescriptors",
-          "response": {
-            "$ref": "ListMetricDescriptorsResponse"
-          },
-          "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"
-          ]
-        }
-      }
-    },
-    "monitoredResourceDescriptors": {
-      "methods": {
-        "get": {
-          "description": "Gets a single monitored resource descriptor. This method does not require a Stackdriver account.",
-          "flatPath": "v3/{v3Id}/{v3Id1}/monitoredResourceDescriptors/{monitoredResourceDescriptorsId}",
-          "httpMethod": "GET",
-          "id": "monitoring.monitoredResourceDescriptors.get",
-          "parameterOrder": [
-            "name"
-          ],
-          "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.",
-              "location": "path",
-              "pattern": "^[^/]+/[^/]+/monitoredResourceDescriptors/[^/]+$",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "path": "v3/{+name}",
-          "response": {
-            "$ref": "MonitoredResourceDescriptor"
-          },
-          "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"
-          ]
-        },
-        "list": {
-          "description": "Lists monitored resource descriptors that match a filter. This method does not require a Stackdriver account.",
-          "flatPath": "v3/{v3Id}/{v3Id1}/monitoredResourceDescriptors",
-          "httpMethod": "GET",
-          "id": "monitoring.monitoredResourceDescriptors.list",
-          "parameterOrder": [
-            "name"
-          ],
-          "parameters": {
-            "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",
-              "location": "query",
-              "type": "string"
-            },
-            "name": {
-              "description": "The project on which to execute the request. The format is \"projects/{project_id_or_number}\".",
-              "location": "path",
-              "pattern": "^[^/]+/[^/]+$",
-              "required": true,
-              "type": "string"
-            },
-            "pageSize": {
-              "description": "A positive number that is the maximum number of results to return.",
-              "format": "int32",
-              "location": "query",
-              "type": "integer"
-            },
-            "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.",
-              "location": "query",
-              "type": "string"
-            }
-          },
-          "path": "v3/{+name}/monitoredResourceDescriptors",
-          "response": {
-            "$ref": "ListMonitoredResourceDescriptorsResponse"
-          },
-          "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"
-          ]
-        }
-      }
-    },
     "projects": {
       "resources": {
         "alertPolicies": {
@@ -1626,168 +1418,6 @@
         }
       }
     },
-    "timeSeries": {
-      "methods": {
-        "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.",
-          "flatPath": "v3/{v3Id}/{v3Id1}/timeSeries",
-          "httpMethod": "POST",
-          "id": "monitoring.timeSeries.create",
-          "parameterOrder": [
-            "name"
-          ],
-          "parameters": {
-            "name": {
-              "description": "The project on which to execute the request. The format is \"projects/{project_id_or_number}\".",
-              "location": "path",
-              "pattern": "^[^/]+/[^/]+$",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "path": "v3/{+name}/timeSeries",
-          "request": {
-            "$ref": "CreateTimeSeriesRequest"
-          },
-          "response": {
-            "$ref": "Empty"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/monitoring",
-            "https://www.googleapis.com/auth/monitoring.write"
-          ]
-        },
-        "list": {
-          "description": "Lists time series that match a filter. This method does not require a Stackdriver account.",
-          "flatPath": "v3/{v3Id}/{v3Id1}/timeSeries",
-          "httpMethod": "GET",
-          "id": "monitoring.timeSeries.list",
-          "parameterOrder": [
-            "name"
-          ],
-          "parameters": {
-            "aggregation.alignmentPeriod": {
-              "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",
-              "location": "query",
-              "type": "string"
-            },
-            "aggregation.crossSeriesReducer": {
-              "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.",
-              "enum": [
-                "REDUCE_NONE",
-                "REDUCE_MEAN",
-                "REDUCE_MIN",
-                "REDUCE_MAX",
-                "REDUCE_SUM",
-                "REDUCE_STDDEV",
-                "REDUCE_COUNT",
-                "REDUCE_COUNT_TRUE",
-                "REDUCE_COUNT_FALSE",
-                "REDUCE_FRACTION_TRUE",
-                "REDUCE_PERCENTILE_99",
-                "REDUCE_PERCENTILE_95",
-                "REDUCE_PERCENTILE_50",
-                "REDUCE_PERCENTILE_05"
-              ],
-              "location": "query",
-              "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.",
-              "location": "query",
-              "repeated": true,
-              "type": "string"
-            },
-            "aggregation.perSeriesAligner": {
-              "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.",
-              "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_COUNT_FALSE",
-                "ALIGN_FRACTION_TRUE",
-                "ALIGN_PERCENTILE_99",
-                "ALIGN_PERCENTILE_95",
-                "ALIGN_PERCENTILE_50",
-                "ALIGN_PERCENTILE_05",
-                "ALIGN_PERCENT_CHANGE"
-              ],
-              "location": "query",
-              "type": "string"
-            },
-            "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",
-              "location": "query",
-              "type": "string"
-            },
-            "interval.endTime": {
-              "description": "Required. The end of the time interval.",
-              "format": "google-datetime",
-              "location": "query",
-              "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",
-              "location": "query",
-              "type": "string"
-            },
-            "name": {
-              "description": "The project on which to execute the request. The format is \"projects/{project_id_or_number}\".",
-              "location": "path",
-              "pattern": "^[^/]+/[^/]+$",
-              "required": true,
-              "type": "string"
-            },
-            "orderBy": {
-              "description": "Unsupported: must be left blank. The points in each time series are returned in reverse time order.",
-              "location": "query",
-              "type": "string"
-            },
-            "pageSize": {
-              "description": "A positive number that is the maximum number of results to return. If page_size is empty or more than 100,000 results, the effective page_size is 100,000 results. If view is set to FULL, this is the maximum number of Points returned. If view is set to HEADERS, this is the maximum number of TimeSeries returned.",
-              "format": "int32",
-              "location": "query",
-              "type": "integer"
-            },
-            "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.",
-              "location": "query",
-              "type": "string"
-            },
-            "view": {
-              "description": "Specifies which information is returned about the time series.",
-              "enum": [
-                "FULL",
-                "HEADERS"
-              ],
-              "location": "query",
-              "type": "string"
-            }
-          },
-          "path": "v3/{+name}/timeSeries",
-          "response": {
-            "$ref": "ListTimeSeriesResponse"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/monitoring",
-            "https://www.googleapis.com/auth/monitoring.read"
-          ]
-        }
-      }
-    },
     "uptimeCheckIps": {
       "methods": {
         "list": {
@@ -1822,7 +1452,7 @@
       }
     }
   },
-  "revision": "20181027",
+  "revision": "20181126",
   "rootUrl": "https://monitoring.googleapis.com/",
   "schemas": {
     "Aggregation": {
@@ -2222,7 +1852,7 @@
       "id": "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.",
+          "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.The maximum number of TimeSeries objects per Create request is 200.",
           "items": {
             "$ref": "TimeSeries"
           },
@@ -3402,7 +3032,7 @@
       "type": "object"
     },
     "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.",
+      "description": "A time interval extending just after a start time through an end time. The start time must not be later than the end time. The default start time is the end time, making the startTime value technically optional. Whether this is useful depends on the MetricKind. If the start and end times are the same, the interval represents a point in time. This is appropriate for GAUGE metrics, but not for DELTA and CUMULATIVE metrics, which cover a span of time.",
       "id": "TimeInterval",
       "properties": {
         "endTime": {
diff --git a/monitoring/v3/monitoring-gen.go b/monitoring/v3/monitoring-gen.go
index ed6ccd2..544a1cd 100644
--- a/monitoring/v3/monitoring-gen.go
+++ b/monitoring/v3/monitoring-gen.go
@@ -84,10 +84,7 @@
 		return nil, errors.New("client is nil")
 	}
 	s := &Service{client: client, BasePath: basePath}
-	s.MetricDescriptors = NewMetricDescriptorsService(s)
-	s.MonitoredResourceDescriptors = NewMonitoredResourceDescriptorsService(s)
 	s.Projects = NewProjectsService(s)
-	s.TimeSeries = NewTimeSeriesService(s)
 	s.UptimeCheckIps = NewUptimeCheckIpsService(s)
 	return s, nil
 }
@@ -97,14 +94,8 @@
 	BasePath  string // API endpoint base URL
 	UserAgent string // optional additional User-Agent fragment
 
-	MetricDescriptors *MetricDescriptorsService
-
-	MonitoredResourceDescriptors *MonitoredResourceDescriptorsService
-
 	Projects *ProjectsService
 
-	TimeSeries *TimeSeriesService
-
 	UptimeCheckIps *UptimeCheckIpsService
 }
 
@@ -115,24 +106,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func NewMetricDescriptorsService(s *Service) *MetricDescriptorsService {
-	rs := &MetricDescriptorsService{s: s}
-	return rs
-}
-
-type MetricDescriptorsService struct {
-	s *Service
-}
-
-func NewMonitoredResourceDescriptorsService(s *Service) *MonitoredResourceDescriptorsService {
-	rs := &MonitoredResourceDescriptorsService{s: s}
-	return rs
-}
-
-type MonitoredResourceDescriptorsService struct {
-	s *Service
-}
-
 func NewProjectsService(s *Service) *ProjectsService {
 	rs := &ProjectsService{s: s}
 	rs.AlertPolicies = NewProjectsAlertPoliciesService(s)
@@ -262,15 +235,6 @@
 	s *Service
 }
 
-func NewTimeSeriesService(s *Service) *TimeSeriesService {
-	rs := &TimeSeriesService{s: s}
-	return rs
-}
-
-type TimeSeriesService struct {
-	s *Service
-}
-
 func NewUptimeCheckIpsService(s *Service) *UptimeCheckIpsService {
 	rs := &UptimeCheckIpsService{s: s}
 	return rs
@@ -1061,7 +1025,9 @@
 	// 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.
+	// supplying all label values for the metric and the monitored
+	// resource.The maximum number of TimeSeries objects per Create request
+	// is 200.
 	TimeSeries []*TimeSeries `json:"timeSeries,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "TimeSeries") to
@@ -3446,8 +3412,12 @@
 }
 
 // TimeInterval: 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.
+// through an end time. The start time must not be later than the end
+// time. The default start time is the end time, making the startTime
+// value technically optional. Whether this is useful depends on the
+// MetricKind. If the start and end times are the same, the interval
+// represents a point in time. This is appropriate for GAUGE metrics,
+// but not for DELTA and CUMULATIVE metrics, which cover a span of time.
 type TimeInterval struct {
 	// EndTime: Required. The end of the time interval.
 	EndTime string `json:"endTime,omitempty"`
@@ -3927,997 +3897,6 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
-// method id "monitoring.metricDescriptors.create":
-
-type MetricDescriptorsCreateCall struct {
-	s                *Service
-	name             string
-	metricdescriptor *MetricDescriptor
-	urlParams_       gensupport.URLParams
-	ctx_             context.Context
-	header_          http.Header
-}
-
-// Create: Creates a new metric descriptor. User-created metric
-// descriptors define custom metrics.
-func (r *MetricDescriptorsService) Create(name string, metricdescriptor *MetricDescriptor) *MetricDescriptorsCreateCall {
-	c := &MetricDescriptorsCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
-	c.name = name
-	c.metricdescriptor = metricdescriptor
-	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 *MetricDescriptorsCreateCall) Fields(s ...googleapi.Field) *MetricDescriptorsCreateCall {
-	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 *MetricDescriptorsCreateCall) Context(ctx context.Context) *MetricDescriptorsCreateCall {
-	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 *MetricDescriptorsCreateCall) Header() http.Header {
-	if c.header_ == nil {
-		c.header_ = make(http.Header)
-	}
-	return c.header_
-}
-
-func (c *MetricDescriptorsCreateCall) 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.metricdescriptor)
-	if err != nil {
-		return nil, err
-	}
-	reqHeaders.Set("Content-Type", "application/json")
-	c.urlParams_.Set("alt", alt)
-	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}/metricDescriptors")
-	urls += "?" + c.urlParams_.Encode()
-	req, err := http.NewRequest("POST", urls, body)
-	if err != nil {
-		return nil, err
-	}
-	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 "monitoring.metricDescriptors.create" call.
-// Exactly one of *MetricDescriptor or error will be non-nil. Any
-// non-2xx status code is an error. Response headers are in either
-// *MetricDescriptor.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 *MetricDescriptorsCreateCall) Do(opts ...googleapi.CallOption) (*MetricDescriptor, 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 := &MetricDescriptor{
-		ServerResponse: googleapi.ServerResponse{
-			Header:         res.Header,
-			HTTPStatusCode: res.StatusCode,
-		},
-	}
-	target := &ret
-	if err := gensupport.DecodeResponse(target, res); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Creates a new metric descriptor. User-created metric descriptors define custom metrics.",
-	//   "flatPath": "v3/{v3Id}/{v3Id1}/metricDescriptors",
-	//   "httpMethod": "POST",
-	//   "id": "monitoring.metricDescriptors.create",
-	//   "parameterOrder": [
-	//     "name"
-	//   ],
-	//   "parameters": {
-	//     "name": {
-	//       "description": "The project on which to execute the request. The format is \"projects/{project_id_or_number}\".",
-	//       "location": "path",
-	//       "pattern": "^[^/]+/[^/]+$",
-	//       "required": true,
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "v3/{+name}/metricDescriptors",
-	//   "request": {
-	//     "$ref": "MetricDescriptor"
-	//   },
-	//   "response": {
-	//     "$ref": "MetricDescriptor"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/cloud-platform",
-	//     "https://www.googleapis.com/auth/monitoring",
-	//     "https://www.googleapis.com/auth/monitoring.write"
-	//   ]
-	// }
-
-}
-
-// method id "monitoring.metricDescriptors.delete":
-
-type MetricDescriptorsDeleteCall struct {
-	s          *Service
-	name       string
-	urlParams_ gensupport.URLParams
-	ctx_       context.Context
-	header_    http.Header
-}
-
-// Delete: Deletes a metric descriptor. Only user-created custom metrics
-// can be deleted.
-func (r *MetricDescriptorsService) Delete(name string) *MetricDescriptorsDeleteCall {
-	c := &MetricDescriptorsDeleteCall{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 *MetricDescriptorsDeleteCall) Fields(s ...googleapi.Field) *MetricDescriptorsDeleteCall {
-	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 *MetricDescriptorsDeleteCall) Context(ctx context.Context) *MetricDescriptorsDeleteCall {
-	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 *MetricDescriptorsDeleteCall) Header() http.Header {
-	if c.header_ == nil {
-		c.header_ = make(http.Header)
-	}
-	return c.header_
-}
-
-func (c *MetricDescriptorsDeleteCall) 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)
-	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}")
-	urls += "?" + c.urlParams_.Encode()
-	req, err := http.NewRequest("DELETE", urls, body)
-	if err != nil {
-		return nil, err
-	}
-	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 "monitoring.metricDescriptors.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 *MetricDescriptorsDeleteCall) 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 := gensupport.DecodeResponse(target, res); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Deletes a metric descriptor. Only user-created custom metrics can be deleted.",
-	//   "flatPath": "v3/{v3Id}/{v3Id1}/metricDescriptors/{metricDescriptorsId}",
-	//   "httpMethod": "DELETE",
-	//   "id": "monitoring.metricDescriptors.delete",
-	//   "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\".",
-	//       "location": "path",
-	//       "pattern": "^[^/]+/[^/]+/metricDescriptors/.+$",
-	//       "required": true,
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "v3/{+name}",
-	//   "response": {
-	//     "$ref": "Empty"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/cloud-platform",
-	//     "https://www.googleapis.com/auth/monitoring"
-	//   ]
-	// }
-
-}
-
-// method id "monitoring.metricDescriptors.get":
-
-type MetricDescriptorsGetCall struct {
-	s            *Service
-	name         string
-	urlParams_   gensupport.URLParams
-	ifNoneMatch_ string
-	ctx_         context.Context
-	header_      http.Header
-}
-
-// Get: Gets a single metric descriptor. This method does not require a
-// Stackdriver account.
-func (r *MetricDescriptorsService) Get(name string) *MetricDescriptorsGetCall {
-	c := &MetricDescriptorsGetCall{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 *MetricDescriptorsGetCall) Fields(s ...googleapi.Field) *MetricDescriptorsGetCall {
-	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 *MetricDescriptorsGetCall) IfNoneMatch(entityTag string) *MetricDescriptorsGetCall {
-	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 *MetricDescriptorsGetCall) Context(ctx context.Context) *MetricDescriptorsGetCall {
-	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 *MetricDescriptorsGetCall) Header() http.Header {
-	if c.header_ == nil {
-		c.header_ = make(http.Header)
-	}
-	return c.header_
-}
-
-func (c *MetricDescriptorsGetCall) 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)
-	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}")
-	urls += "?" + c.urlParams_.Encode()
-	req, err := http.NewRequest("GET", urls, body)
-	if err != nil {
-		return nil, err
-	}
-	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 "monitoring.metricDescriptors.get" call.
-// Exactly one of *MetricDescriptor or error will be non-nil. Any
-// non-2xx status code is an error. Response headers are in either
-// *MetricDescriptor.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 *MetricDescriptorsGetCall) Do(opts ...googleapi.CallOption) (*MetricDescriptor, 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 := &MetricDescriptor{
-		ServerResponse: googleapi.ServerResponse{
-			Header:         res.Header,
-			HTTPStatusCode: res.StatusCode,
-		},
-	}
-	target := &ret
-	if err := gensupport.DecodeResponse(target, res); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Gets a single metric descriptor. This method does not require a Stackdriver account.",
-	//   "flatPath": "v3/{v3Id}/{v3Id1}/metricDescriptors/{metricDescriptorsId}",
-	//   "httpMethod": "GET",
-	//   "id": "monitoring.metricDescriptors.get",
-	//   "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 value of {metric_id} is \"compute.googleapis.com/instance/disk/read_bytes_count\".",
-	//       "location": "path",
-	//       "pattern": "^[^/]+/[^/]+/metricDescriptors/.+$",
-	//       "required": true,
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "v3/{+name}",
-	//   "response": {
-	//     "$ref": "MetricDescriptor"
-	//   },
-	//   "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"
-	//   ]
-	// }
-
-}
-
-// method id "monitoring.metricDescriptors.list":
-
-type MetricDescriptorsListCall struct {
-	s            *Service
-	name         string
-	urlParams_   gensupport.URLParams
-	ifNoneMatch_ string
-	ctx_         context.Context
-	header_      http.Header
-}
-
-// List: Lists metric descriptors that match a filter. This method does
-// not require a Stackdriver account.
-func (r *MetricDescriptorsService) List(name string) *MetricDescriptorsListCall {
-	c := &MetricDescriptorsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
-	c.name = name
-	return c
-}
-
-// Filter sets the optional parameter "filter": 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:
-// metric.type = starts_with("custom.googleapis.com/")
-func (c *MetricDescriptorsListCall) Filter(filter string) *MetricDescriptorsListCall {
-	c.urlParams_.Set("filter", filter)
-	return c
-}
-
-// PageSize sets the optional parameter "pageSize": A positive number
-// that is the maximum number of results to return.
-func (c *MetricDescriptorsListCall) PageSize(pageSize int64) *MetricDescriptorsListCall {
-	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
-	return c
-}
-
-// PageToken sets the optional parameter "pageToken": 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.
-func (c *MetricDescriptorsListCall) PageToken(pageToken string) *MetricDescriptorsListCall {
-	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 *MetricDescriptorsListCall) Fields(s ...googleapi.Field) *MetricDescriptorsListCall {
-	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 *MetricDescriptorsListCall) IfNoneMatch(entityTag string) *MetricDescriptorsListCall {
-	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 *MetricDescriptorsListCall) Context(ctx context.Context) *MetricDescriptorsListCall {
-	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 *MetricDescriptorsListCall) Header() http.Header {
-	if c.header_ == nil {
-		c.header_ = make(http.Header)
-	}
-	return c.header_
-}
-
-func (c *MetricDescriptorsListCall) 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)
-	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}/metricDescriptors")
-	urls += "?" + c.urlParams_.Encode()
-	req, err := http.NewRequest("GET", urls, body)
-	if err != nil {
-		return nil, err
-	}
-	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 "monitoring.metricDescriptors.list" call.
-// Exactly one of *ListMetricDescriptorsResponse or error will be
-// non-nil. Any non-2xx status code is an error. Response headers are in
-// either *ListMetricDescriptorsResponse.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 *MetricDescriptorsListCall) Do(opts ...googleapi.CallOption) (*ListMetricDescriptorsResponse, 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 := &ListMetricDescriptorsResponse{
-		ServerResponse: googleapi.ServerResponse{
-			Header:         res.Header,
-			HTTPStatusCode: res.StatusCode,
-		},
-	}
-	target := &ret
-	if err := gensupport.DecodeResponse(target, res); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Lists metric descriptors that match a filter. This method does not require a Stackdriver account.",
-	//   "flatPath": "v3/{v3Id}/{v3Id1}/metricDescriptors",
-	//   "httpMethod": "GET",
-	//   "id": "monitoring.metricDescriptors.list",
-	//   "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",
-	//       "location": "query",
-	//       "type": "string"
-	//     },
-	//     "name": {
-	//       "description": "The project on which to execute the request. The format is \"projects/{project_id_or_number}\".",
-	//       "location": "path",
-	//       "pattern": "^[^/]+/[^/]+$",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "pageSize": {
-	//       "description": "A positive number that is the maximum number of results to return.",
-	//       "format": "int32",
-	//       "location": "query",
-	//       "type": "integer"
-	//     },
-	//     "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.",
-	//       "location": "query",
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "v3/{+name}/metricDescriptors",
-	//   "response": {
-	//     "$ref": "ListMetricDescriptorsResponse"
-	//   },
-	//   "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"
-	//   ]
-	// }
-
-}
-
-// 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 *MetricDescriptorsListCall) Pages(ctx context.Context, f func(*ListMetricDescriptorsResponse) 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 "monitoring.monitoredResourceDescriptors.get":
-
-type MonitoredResourceDescriptorsGetCall struct {
-	s            *Service
-	name         string
-	urlParams_   gensupport.URLParams
-	ifNoneMatch_ string
-	ctx_         context.Context
-	header_      http.Header
-}
-
-// Get: Gets a single monitored resource descriptor. This method does
-// not require a Stackdriver account.
-func (r *MonitoredResourceDescriptorsService) Get(name string) *MonitoredResourceDescriptorsGetCall {
-	c := &MonitoredResourceDescriptorsGetCall{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 *MonitoredResourceDescriptorsGetCall) Fields(s ...googleapi.Field) *MonitoredResourceDescriptorsGetCall {
-	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 *MonitoredResourceDescriptorsGetCall) IfNoneMatch(entityTag string) *MonitoredResourceDescriptorsGetCall {
-	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 *MonitoredResourceDescriptorsGetCall) Context(ctx context.Context) *MonitoredResourceDescriptorsGetCall {
-	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 *MonitoredResourceDescriptorsGetCall) Header() http.Header {
-	if c.header_ == nil {
-		c.header_ = make(http.Header)
-	}
-	return c.header_
-}
-
-func (c *MonitoredResourceDescriptorsGetCall) 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)
-	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}")
-	urls += "?" + c.urlParams_.Encode()
-	req, err := http.NewRequest("GET", urls, body)
-	if err != nil {
-		return nil, err
-	}
-	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 "monitoring.monitoredResourceDescriptors.get" call.
-// Exactly one of *MonitoredResourceDescriptor or error will be non-nil.
-// Any non-2xx status code is an error. Response headers are in either
-// *MonitoredResourceDescriptor.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 *MonitoredResourceDescriptorsGetCall) Do(opts ...googleapi.CallOption) (*MonitoredResourceDescriptor, 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 := &MonitoredResourceDescriptor{
-		ServerResponse: googleapi.ServerResponse{
-			Header:         res.Header,
-			HTTPStatusCode: res.StatusCode,
-		},
-	}
-	target := &ret
-	if err := gensupport.DecodeResponse(target, res); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Gets a single monitored resource descriptor. This method does not require a Stackdriver account.",
-	//   "flatPath": "v3/{v3Id}/{v3Id1}/monitoredResourceDescriptors/{monitoredResourceDescriptorsId}",
-	//   "httpMethod": "GET",
-	//   "id": "monitoring.monitoredResourceDescriptors.get",
-	//   "parameterOrder": [
-	//     "name"
-	//   ],
-	//   "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.",
-	//       "location": "path",
-	//       "pattern": "^[^/]+/[^/]+/monitoredResourceDescriptors/[^/]+$",
-	//       "required": true,
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "v3/{+name}",
-	//   "response": {
-	//     "$ref": "MonitoredResourceDescriptor"
-	//   },
-	//   "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"
-	//   ]
-	// }
-
-}
-
-// method id "monitoring.monitoredResourceDescriptors.list":
-
-type MonitoredResourceDescriptorsListCall struct {
-	s            *Service
-	name         string
-	urlParams_   gensupport.URLParams
-	ifNoneMatch_ string
-	ctx_         context.Context
-	header_      http.Header
-}
-
-// List: Lists monitored resource descriptors that match a filter. This
-// method does not require a Stackdriver account.
-func (r *MonitoredResourceDescriptorsService) List(name string) *MonitoredResourceDescriptorsListCall {
-	c := &MonitoredResourceDescriptorsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
-	c.name = name
-	return c
-}
-
-// Filter sets the optional parameter "filter": 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:
-// resource.type = starts_with("gce_") AND resource.label:id
-func (c *MonitoredResourceDescriptorsListCall) Filter(filter string) *MonitoredResourceDescriptorsListCall {
-	c.urlParams_.Set("filter", filter)
-	return c
-}
-
-// PageSize sets the optional parameter "pageSize": A positive number
-// that is the maximum number of results to return.
-func (c *MonitoredResourceDescriptorsListCall) PageSize(pageSize int64) *MonitoredResourceDescriptorsListCall {
-	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
-	return c
-}
-
-// PageToken sets the optional parameter "pageToken": 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.
-func (c *MonitoredResourceDescriptorsListCall) PageToken(pageToken string) *MonitoredResourceDescriptorsListCall {
-	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 *MonitoredResourceDescriptorsListCall) Fields(s ...googleapi.Field) *MonitoredResourceDescriptorsListCall {
-	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 *MonitoredResourceDescriptorsListCall) IfNoneMatch(entityTag string) *MonitoredResourceDescriptorsListCall {
-	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 *MonitoredResourceDescriptorsListCall) Context(ctx context.Context) *MonitoredResourceDescriptorsListCall {
-	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 *MonitoredResourceDescriptorsListCall) Header() http.Header {
-	if c.header_ == nil {
-		c.header_ = make(http.Header)
-	}
-	return c.header_
-}
-
-func (c *MonitoredResourceDescriptorsListCall) 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)
-	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}/monitoredResourceDescriptors")
-	urls += "?" + c.urlParams_.Encode()
-	req, err := http.NewRequest("GET", urls, body)
-	if err != nil {
-		return nil, err
-	}
-	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 "monitoring.monitoredResourceDescriptors.list" call.
-// Exactly one of *ListMonitoredResourceDescriptorsResponse or error
-// will be non-nil. Any non-2xx status code is an error. Response
-// headers are in either
-// *ListMonitoredResourceDescriptorsResponse.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 *MonitoredResourceDescriptorsListCall) Do(opts ...googleapi.CallOption) (*ListMonitoredResourceDescriptorsResponse, 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 := &ListMonitoredResourceDescriptorsResponse{
-		ServerResponse: googleapi.ServerResponse{
-			Header:         res.Header,
-			HTTPStatusCode: res.StatusCode,
-		},
-	}
-	target := &ret
-	if err := gensupport.DecodeResponse(target, res); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Lists monitored resource descriptors that match a filter. This method does not require a Stackdriver account.",
-	//   "flatPath": "v3/{v3Id}/{v3Id1}/monitoredResourceDescriptors",
-	//   "httpMethod": "GET",
-	//   "id": "monitoring.monitoredResourceDescriptors.list",
-	//   "parameterOrder": [
-	//     "name"
-	//   ],
-	//   "parameters": {
-	//     "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",
-	//       "location": "query",
-	//       "type": "string"
-	//     },
-	//     "name": {
-	//       "description": "The project on which to execute the request. The format is \"projects/{project_id_or_number}\".",
-	//       "location": "path",
-	//       "pattern": "^[^/]+/[^/]+$",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "pageSize": {
-	//       "description": "A positive number that is the maximum number of results to return.",
-	//       "format": "int32",
-	//       "location": "query",
-	//       "type": "integer"
-	//     },
-	//     "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.",
-	//       "location": "query",
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "v3/{+name}/monitoredResourceDescriptors",
-	//   "response": {
-	//     "$ref": "ListMonitoredResourceDescriptorsResponse"
-	//   },
-	//   "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"
-	//   ]
-	// }
-
-}
-
-// 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 *MonitoredResourceDescriptorsListCall) Pages(ctx context.Context, f func(*ListMonitoredResourceDescriptorsResponse) 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 "monitoring.projects.alertPolicies.create":
 
 type ProjectsAlertPoliciesCreateCall struct {
@@ -10873,584 +9852,6 @@
 
 }
 
-// method id "monitoring.timeSeries.create":
-
-type TimeSeriesCreateCall struct {
-	s                       *Service
-	name                    string
-	createtimeseriesrequest *CreateTimeSeriesRequest
-	urlParams_              gensupport.URLParams
-	ctx_                    context.Context
-	header_                 http.Header
-}
-
-// Create: 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.
-func (r *TimeSeriesService) Create(name string, createtimeseriesrequest *CreateTimeSeriesRequest) *TimeSeriesCreateCall {
-	c := &TimeSeriesCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
-	c.name = name
-	c.createtimeseriesrequest = createtimeseriesrequest
-	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 *TimeSeriesCreateCall) Fields(s ...googleapi.Field) *TimeSeriesCreateCall {
-	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 *TimeSeriesCreateCall) Context(ctx context.Context) *TimeSeriesCreateCall {
-	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 *TimeSeriesCreateCall) Header() http.Header {
-	if c.header_ == nil {
-		c.header_ = make(http.Header)
-	}
-	return c.header_
-}
-
-func (c *TimeSeriesCreateCall) 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.createtimeseriesrequest)
-	if err != nil {
-		return nil, err
-	}
-	reqHeaders.Set("Content-Type", "application/json")
-	c.urlParams_.Set("alt", alt)
-	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}/timeSeries")
-	urls += "?" + c.urlParams_.Encode()
-	req, err := http.NewRequest("POST", urls, body)
-	if err != nil {
-		return nil, err
-	}
-	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 "monitoring.timeSeries.create" 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 *TimeSeriesCreateCall) 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 := gensupport.DecodeResponse(target, res); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "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.",
-	//   "flatPath": "v3/{v3Id}/{v3Id1}/timeSeries",
-	//   "httpMethod": "POST",
-	//   "id": "monitoring.timeSeries.create",
-	//   "parameterOrder": [
-	//     "name"
-	//   ],
-	//   "parameters": {
-	//     "name": {
-	//       "description": "The project on which to execute the request. The format is \"projects/{project_id_or_number}\".",
-	//       "location": "path",
-	//       "pattern": "^[^/]+/[^/]+$",
-	//       "required": true,
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "v3/{+name}/timeSeries",
-	//   "request": {
-	//     "$ref": "CreateTimeSeriesRequest"
-	//   },
-	//   "response": {
-	//     "$ref": "Empty"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/cloud-platform",
-	//     "https://www.googleapis.com/auth/monitoring",
-	//     "https://www.googleapis.com/auth/monitoring.write"
-	//   ]
-	// }
-
-}
-
-// method id "monitoring.timeSeries.list":
-
-type TimeSeriesListCall struct {
-	s            *Service
-	name         string
-	urlParams_   gensupport.URLParams
-	ifNoneMatch_ string
-	ctx_         context.Context
-	header_      http.Header
-}
-
-// List: Lists time series that match a filter. This method does not
-// require a Stackdriver account.
-func (r *TimeSeriesService) List(name string) *TimeSeriesListCall {
-	c := &TimeSeriesListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
-	c.name = name
-	return c
-}
-
-// AggregationAlignmentPeriod sets the optional parameter
-// "aggregation.alignmentPeriod": 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.
-func (c *TimeSeriesListCall) AggregationAlignmentPeriod(aggregationAlignmentPeriod string) *TimeSeriesListCall {
-	c.urlParams_.Set("aggregation.alignmentPeriod", aggregationAlignmentPeriod)
-	return c
-}
-
-// AggregationCrossSeriesReducer sets the optional parameter
-// "aggregation.crossSeriesReducer": 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.
-//
-// Possible values:
-//   "REDUCE_NONE"
-//   "REDUCE_MEAN"
-//   "REDUCE_MIN"
-//   "REDUCE_MAX"
-//   "REDUCE_SUM"
-//   "REDUCE_STDDEV"
-//   "REDUCE_COUNT"
-//   "REDUCE_COUNT_TRUE"
-//   "REDUCE_COUNT_FALSE"
-//   "REDUCE_FRACTION_TRUE"
-//   "REDUCE_PERCENTILE_99"
-//   "REDUCE_PERCENTILE_95"
-//   "REDUCE_PERCENTILE_50"
-//   "REDUCE_PERCENTILE_05"
-func (c *TimeSeriesListCall) AggregationCrossSeriesReducer(aggregationCrossSeriesReducer string) *TimeSeriesListCall {
-	c.urlParams_.Set("aggregation.crossSeriesReducer", aggregationCrossSeriesReducer)
-	return c
-}
-
-// AggregationGroupByFields sets the optional parameter
-// "aggregation.groupByFields": 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.
-func (c *TimeSeriesListCall) AggregationGroupByFields(aggregationGroupByFields ...string) *TimeSeriesListCall {
-	c.urlParams_.SetMulti("aggregation.groupByFields", append([]string{}, aggregationGroupByFields...))
-	return c
-}
-
-// AggregationPerSeriesAligner sets the optional parameter
-// "aggregation.perSeriesAligner": 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.
-//
-// Possible values:
-//   "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_COUNT_FALSE"
-//   "ALIGN_FRACTION_TRUE"
-//   "ALIGN_PERCENTILE_99"
-//   "ALIGN_PERCENTILE_95"
-//   "ALIGN_PERCENTILE_50"
-//   "ALIGN_PERCENTILE_05"
-//   "ALIGN_PERCENT_CHANGE"
-func (c *TimeSeriesListCall) AggregationPerSeriesAligner(aggregationPerSeriesAligner string) *TimeSeriesListCall {
-	c.urlParams_.Set("aggregation.perSeriesAligner", aggregationPerSeriesAligner)
-	return c
-}
-
-// Filter sets the optional parameter "filter": 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:
-// metric.type = "compute.googleapis.com/instance/cpu/usage_time" AND
-//     metric.label.instance_name = "my-instance-name"
-func (c *TimeSeriesListCall) Filter(filter string) *TimeSeriesListCall {
-	c.urlParams_.Set("filter", filter)
-	return c
-}
-
-// IntervalEndTime sets the optional parameter "interval.endTime":
-// Required. The end of the time interval.
-func (c *TimeSeriesListCall) IntervalEndTime(intervalEndTime string) *TimeSeriesListCall {
-	c.urlParams_.Set("interval.endTime", intervalEndTime)
-	return c
-}
-
-// IntervalStartTime sets the optional parameter "interval.startTime":
-// 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.
-func (c *TimeSeriesListCall) IntervalStartTime(intervalStartTime string) *TimeSeriesListCall {
-	c.urlParams_.Set("interval.startTime", intervalStartTime)
-	return c
-}
-
-// OrderBy sets the optional parameter "orderBy": Unsupported: must be
-// left blank. The points in each time series are returned in reverse
-// time order.
-func (c *TimeSeriesListCall) OrderBy(orderBy string) *TimeSeriesListCall {
-	c.urlParams_.Set("orderBy", orderBy)
-	return c
-}
-
-// PageSize sets the optional parameter "pageSize": A positive number
-// that is the maximum number of results to return. If page_size is
-// empty or more than 100,000 results, the effective page_size is
-// 100,000 results. If view is set to FULL, this is the maximum number
-// of Points returned. If view is set to HEADERS, this is the maximum
-// number of TimeSeries returned.
-func (c *TimeSeriesListCall) PageSize(pageSize int64) *TimeSeriesListCall {
-	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
-	return c
-}
-
-// PageToken sets the optional parameter "pageToken": 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.
-func (c *TimeSeriesListCall) PageToken(pageToken string) *TimeSeriesListCall {
-	c.urlParams_.Set("pageToken", pageToken)
-	return c
-}
-
-// View sets the optional parameter "view": Specifies which information
-// is returned about the time series.
-//
-// Possible values:
-//   "FULL"
-//   "HEADERS"
-func (c *TimeSeriesListCall) View(view string) *TimeSeriesListCall {
-	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 *TimeSeriesListCall) Fields(s ...googleapi.Field) *TimeSeriesListCall {
-	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 *TimeSeriesListCall) IfNoneMatch(entityTag string) *TimeSeriesListCall {
-	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 *TimeSeriesListCall) Context(ctx context.Context) *TimeSeriesListCall {
-	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 *TimeSeriesListCall) Header() http.Header {
-	if c.header_ == nil {
-		c.header_ = make(http.Header)
-	}
-	return c.header_
-}
-
-func (c *TimeSeriesListCall) 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)
-	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}/timeSeries")
-	urls += "?" + c.urlParams_.Encode()
-	req, err := http.NewRequest("GET", urls, body)
-	if err != nil {
-		return nil, err
-	}
-	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 "monitoring.timeSeries.list" call.
-// Exactly one of *ListTimeSeriesResponse or error will be non-nil. Any
-// non-2xx status code is an error. Response headers are in either
-// *ListTimeSeriesResponse.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 *TimeSeriesListCall) Do(opts ...googleapi.CallOption) (*ListTimeSeriesResponse, 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 := &ListTimeSeriesResponse{
-		ServerResponse: googleapi.ServerResponse{
-			Header:         res.Header,
-			HTTPStatusCode: res.StatusCode,
-		},
-	}
-	target := &ret
-	if err := gensupport.DecodeResponse(target, res); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Lists time series that match a filter. This method does not require a Stackdriver account.",
-	//   "flatPath": "v3/{v3Id}/{v3Id1}/timeSeries",
-	//   "httpMethod": "GET",
-	//   "id": "monitoring.timeSeries.list",
-	//   "parameterOrder": [
-	//     "name"
-	//   ],
-	//   "parameters": {
-	//     "aggregation.alignmentPeriod": {
-	//       "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",
-	//       "location": "query",
-	//       "type": "string"
-	//     },
-	//     "aggregation.crossSeriesReducer": {
-	//       "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.",
-	//       "enum": [
-	//         "REDUCE_NONE",
-	//         "REDUCE_MEAN",
-	//         "REDUCE_MIN",
-	//         "REDUCE_MAX",
-	//         "REDUCE_SUM",
-	//         "REDUCE_STDDEV",
-	//         "REDUCE_COUNT",
-	//         "REDUCE_COUNT_TRUE",
-	//         "REDUCE_COUNT_FALSE",
-	//         "REDUCE_FRACTION_TRUE",
-	//         "REDUCE_PERCENTILE_99",
-	//         "REDUCE_PERCENTILE_95",
-	//         "REDUCE_PERCENTILE_50",
-	//         "REDUCE_PERCENTILE_05"
-	//       ],
-	//       "location": "query",
-	//       "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.",
-	//       "location": "query",
-	//       "repeated": true,
-	//       "type": "string"
-	//     },
-	//     "aggregation.perSeriesAligner": {
-	//       "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.",
-	//       "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_COUNT_FALSE",
-	//         "ALIGN_FRACTION_TRUE",
-	//         "ALIGN_PERCENTILE_99",
-	//         "ALIGN_PERCENTILE_95",
-	//         "ALIGN_PERCENTILE_50",
-	//         "ALIGN_PERCENTILE_05",
-	//         "ALIGN_PERCENT_CHANGE"
-	//       ],
-	//       "location": "query",
-	//       "type": "string"
-	//     },
-	//     "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",
-	//       "location": "query",
-	//       "type": "string"
-	//     },
-	//     "interval.endTime": {
-	//       "description": "Required. The end of the time interval.",
-	//       "format": "google-datetime",
-	//       "location": "query",
-	//       "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",
-	//       "location": "query",
-	//       "type": "string"
-	//     },
-	//     "name": {
-	//       "description": "The project on which to execute the request. The format is \"projects/{project_id_or_number}\".",
-	//       "location": "path",
-	//       "pattern": "^[^/]+/[^/]+$",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "orderBy": {
-	//       "description": "Unsupported: must be left blank. The points in each time series are returned in reverse time order.",
-	//       "location": "query",
-	//       "type": "string"
-	//     },
-	//     "pageSize": {
-	//       "description": "A positive number that is the maximum number of results to return. If page_size is empty or more than 100,000 results, the effective page_size is 100,000 results. If view is set to FULL, this is the maximum number of Points returned. If view is set to HEADERS, this is the maximum number of TimeSeries returned.",
-	//       "format": "int32",
-	//       "location": "query",
-	//       "type": "integer"
-	//     },
-	//     "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.",
-	//       "location": "query",
-	//       "type": "string"
-	//     },
-	//     "view": {
-	//       "description": "Specifies which information is returned about the time series.",
-	//       "enum": [
-	//         "FULL",
-	//         "HEADERS"
-	//       ],
-	//       "location": "query",
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "v3/{+name}/timeSeries",
-	//   "response": {
-	//     "$ref": "ListTimeSeriesResponse"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/cloud-platform",
-	//     "https://www.googleapis.com/auth/monitoring",
-	//     "https://www.googleapis.com/auth/monitoring.read"
-	//   ]
-	// }
-
-}
-
-// 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 *TimeSeriesListCall) Pages(ctx context.Context, f func(*ListTimeSeriesResponse) 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 "monitoring.uptimeCheckIps.list":
 
 type UptimeCheckIpsListCall struct {
diff --git a/pagespeedonline/v5/pagespeedonline-api.json b/pagespeedonline/v5/pagespeedonline-api.json
new file mode 100644
index 0000000..2b70352
--- /dev/null
+++ b/pagespeedonline/v5/pagespeedonline-api.json
@@ -0,0 +1,552 @@
+{
+  "basePath": "/pagespeedonline/v5/",
+  "baseUrl": "https://www.googleapis.com/pagespeedonline/v5/",
+  "batchPath": "batch/pagespeedonline/v5",
+  "description": "Analyzes the performance of a web page and provides tailored suggestions to make that page faster.",
+  "discoveryVersion": "v1",
+  "documentationLink": "https://developers.google.com/speed/docs/insights/v5/get-started",
+  "etag": "\"J3WqvAcMk4eQjJXvfSI4Yr8VouA/TcQxi2v-Wt2cGft_7rpYVhPQGtA\"",
+  "icons": {
+    "x16": "https://www.google.com/images/icons/product/pagespeed-16.png",
+    "x32": "https://www.google.com/images/icons/product/pagespeed-32.png"
+  },
+  "id": "pagespeedonline:v5",
+  "kind": "discovery#restDescription",
+  "name": "pagespeedonline",
+  "ownerDomain": "google.com",
+  "ownerName": "Google",
+  "parameters": {
+    "alt": {
+      "default": "json",
+      "description": "Data format for the response.",
+      "enum": [
+        "json"
+      ],
+      "enumDescriptions": [
+        "Responses with Content-Type of application/json"
+      ],
+      "location": "query",
+      "type": "string"
+    },
+    "fields": {
+      "description": "Selector specifying which fields to include in a partial response.",
+      "location": "query",
+      "type": "string"
+    },
+    "key": {
+      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+      "location": "query",
+      "type": "string"
+    },
+    "oauth_token": {
+      "description": "OAuth 2.0 token for the current user.",
+      "location": "query",
+      "type": "string"
+    },
+    "prettyPrint": {
+      "default": "true",
+      "description": "Returns response with indentations and line breaks.",
+      "location": "query",
+      "type": "boolean"
+    },
+    "quotaUser": {
+      "description": "An opaque string that represents a user for quota purposes. Must not exceed 40 characters.",
+      "location": "query",
+      "type": "string"
+    },
+    "userIp": {
+      "description": "Deprecated. Please use quotaUser instead.",
+      "location": "query",
+      "type": "string"
+    }
+  },
+  "protocol": "rest",
+  "resources": {
+    "pagespeedapi": {
+      "methods": {
+        "runpagespeed": {
+          "description": "Runs PageSpeed analysis on the page at the specified URL, and returns PageSpeed scores, a list of suggestions to make that page faster, and other information.",
+          "httpMethod": "GET",
+          "id": "pagespeedonline.pagespeedapi.runpagespeed",
+          "parameterOrder": [
+            "url"
+          ],
+          "parameters": {
+            "category": {
+              "description": "A Lighthouse category to run; if none are given, only Performance category will be run",
+              "enum": [
+                "accessibility",
+                "best-practices",
+                "performance",
+                "pwa",
+                "seo"
+              ],
+              "enumDescriptions": [
+                "",
+                "",
+                "",
+                "",
+                ""
+              ],
+              "location": "query",
+              "repeated": true,
+              "type": "string"
+            },
+            "locale": {
+              "description": "The locale used to localize formatted results",
+              "location": "query",
+              "pattern": "[a-zA-Z]+((_|-)[a-zA-Z]+)?",
+              "type": "string"
+            },
+            "strategy": {
+              "description": "The analysis strategy (desktop or mobile) to use, and desktop is the default",
+              "enum": [
+                "desktop",
+                "mobile"
+              ],
+              "enumDescriptions": [
+                "Fetch and analyze the URL for desktop browsers",
+                "Fetch and analyze the URL for mobile devices"
+              ],
+              "location": "query",
+              "type": "string"
+            },
+            "url": {
+              "description": "The URL to fetch and analyze",
+              "location": "query",
+              "pattern": "(?i)http(s)?://.*",
+              "required": true,
+              "type": "string"
+            },
+            "utm_campaign": {
+              "description": "Campaign name for analytics.",
+              "location": "query",
+              "type": "string"
+            },
+            "utm_source": {
+              "description": "Campaign source for analytics.",
+              "location": "query",
+              "type": "string"
+            }
+          },
+          "path": "runPagespeed",
+          "response": {
+            "$ref": "PagespeedApiPagespeedResponseV5"
+          }
+        }
+      }
+    }
+  },
+  "revision": "20181120",
+  "rootUrl": "https://www.googleapis.com/",
+  "schemas": {
+    "GoogleprotobufValue": {
+      "id": "GoogleprotobufValue",
+      "type": "any"
+    },
+    "LighthouseAuditResultV5": {
+      "id": "LighthouseAuditResultV5",
+      "properties": {
+        "description": {
+          "description": "The description of the audit.",
+          "type": "string"
+        },
+        "details": {
+          "additionalProperties": {
+            "type": "any"
+          },
+          "description": "Freeform details section of the audit.",
+          "type": "object"
+        },
+        "displayValue": {
+          "description": "The value that should be displayed on the UI for this audit.",
+          "type": "string"
+        },
+        "errorMessage": {
+          "description": "An error message from a thrown error inside the audit.",
+          "type": "string"
+        },
+        "explanation": {
+          "description": "An explanation of the errors in the audit.",
+          "type": "string"
+        },
+        "id": {
+          "description": "The audit's id.",
+          "type": "string"
+        },
+        "score": {
+          "type": "any"
+        },
+        "scoreDisplayMode": {
+          "description": "The enumerated score display mode.",
+          "type": "string"
+        },
+        "title": {
+          "description": "The human readable title.",
+          "type": "string"
+        },
+        "warnings": {
+          "type": "any"
+        }
+      },
+      "type": "object"
+    },
+    "LighthouseCategoryV5": {
+      "id": "LighthouseCategoryV5",
+      "properties": {
+        "auditRefs": {
+          "description": "An array of references to all the audit members of this category.",
+          "items": {
+            "properties": {
+              "group": {
+                "description": "The category group that the audit belongs to (optional).",
+                "type": "string"
+              },
+              "id": {
+                "description": "The audit ref id.",
+                "type": "string"
+              },
+              "weight": {
+                "description": "The weight this audit's score has on the overall category score.",
+                "format": "double",
+                "type": "number"
+              }
+            },
+            "type": "object"
+          },
+          "type": "array"
+        },
+        "description": {
+          "description": "A more detailed description of the category and its importance.",
+          "type": "string"
+        },
+        "id": {
+          "description": "The string identifier of the category.",
+          "type": "string"
+        },
+        "manualDescription": {
+          "description": "A description for the manual audits in the category.",
+          "type": "string"
+        },
+        "score": {
+          "type": "any"
+        },
+        "title": {
+          "description": "The human-friendly name of the category.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "LighthouseResultV5": {
+      "id": "LighthouseResultV5",
+      "properties": {
+        "audits": {
+          "additionalProperties": {
+            "$ref": "LighthouseAuditResultV5",
+            "description": "An audit that was performed in this run. Keyed by audit id."
+          },
+          "description": "Map of audits in the LHR.",
+          "type": "object"
+        },
+        "categories": {
+          "additionalProperties": {
+            "$ref": "LighthouseCategoryV5",
+            "description": "A category of audits and their combined weighted score. Keyed by category id."
+          },
+          "description": "Map of categories in the LHR.",
+          "type": "object"
+        },
+        "categoryGroups": {
+          "additionalProperties": {
+            "description": "A grouping contained in a category that groups similar audits together.",
+            "properties": {
+              "description": {
+                "description": "An optional human readable description of the category group.",
+                "type": "string"
+              },
+              "title": {
+                "description": "The title of the category group.",
+                "type": "string"
+              }
+            },
+            "type": "object"
+          },
+          "description": "Map of category groups in the LHR.",
+          "type": "object"
+        },
+        "configSettings": {
+          "description": "The configuration settings for this LHR.",
+          "properties": {
+            "emulatedFormFactor": {
+              "description": "The form factor the emulation should use.",
+              "type": "string"
+            },
+            "locale": {
+              "description": "The locale setting.",
+              "type": "string"
+            },
+            "onlyCategories": {
+              "type": "any"
+            }
+          },
+          "type": "object"
+        },
+        "environment": {
+          "description": "Environment settings that were used when making this LHR.",
+          "properties": {
+            "benchmarkIndex": {
+              "description": "The benchmark index number that indicates rough device class.",
+              "format": "double",
+              "type": "number"
+            },
+            "hostUserAgent": {
+              "description": "The user agent string of the version of Chrome used.",
+              "type": "string"
+            },
+            "networkUserAgent": {
+              "description": "The user agent string that was sent over the network.",
+              "type": "string"
+            }
+          },
+          "type": "object"
+        },
+        "fetchTime": {
+          "description": "The time that this run was fetched.",
+          "type": "string"
+        },
+        "finalUrl": {
+          "description": "The final resolved url that was audited.",
+          "type": "string"
+        },
+        "i18n": {
+          "description": "The internationalization strings that are required to render the LHR.",
+          "properties": {
+            "rendererFormattedStrings": {
+              "description": "Internationalized strings that are formatted to the locale in configSettings.",
+              "properties": {
+                "auditGroupExpandTooltip": {
+                  "description": "The tooltip text on an expandable chevron icon.",
+                  "type": "string"
+                },
+                "crcInitialNavigation": {
+                  "description": "The label for the initial request in a critical request chain.",
+                  "type": "string"
+                },
+                "crcLongestDurationLabel": {
+                  "description": "The label for values shown in the summary of critical request chains.",
+                  "type": "string"
+                },
+                "errorLabel": {
+                  "description": "The label shown next to an audit or metric that has had an error.",
+                  "type": "string"
+                },
+                "errorMissingAuditInfo": {
+                  "description": "The error string shown next to an erroring audit.",
+                  "type": "string"
+                },
+                "labDataTitle": {
+                  "description": "The title of the lab data performance category.",
+                  "type": "string"
+                },
+                "lsPerformanceCategoryDescription": {
+                  "description": "The disclaimer shown under performance explaning that the network can vary.",
+                  "type": "string"
+                },
+                "manualAuditsGroupTitle": {
+                  "description": "The heading shown above a list of audits that were not computerd in the run.",
+                  "type": "string"
+                },
+                "notApplicableAuditsGroupTitle": {
+                  "description": "The heading shown above a list of audits that do not apply to a page.",
+                  "type": "string"
+                },
+                "opportunityResourceColumnLabel": {
+                  "description": "The heading for the estimated page load savings opportunity of an audit.",
+                  "type": "string"
+                },
+                "opportunitySavingsColumnLabel": {
+                  "description": "The heading for the estimated page load savings of opportunity audits.",
+                  "type": "string"
+                },
+                "passedAuditsGroupTitle": {
+                  "description": "The heading that is shown above a list of audits that are passing.",
+                  "type": "string"
+                },
+                "scorescaleLabel": {
+                  "description": "The label that explains the score gauges scale (0-49, 50-89, 90-100).",
+                  "type": "string"
+                },
+                "toplevelWarningsMessage": {
+                  "description": "The label shown preceding important warnings that may have invalidated an entire report.",
+                  "type": "string"
+                },
+                "varianceDisclaimer": {
+                  "description": "The disclaimer shown below a performance metric value.",
+                  "type": "string"
+                },
+                "warningHeader": {
+                  "description": "The label shown above a bulleted list of warnings.",
+                  "type": "string"
+                }
+              },
+              "type": "object"
+            }
+          },
+          "type": "object"
+        },
+        "lighthouseVersion": {
+          "description": "The lighthouse version that was used to generate this LHR.",
+          "type": "string"
+        },
+        "requestedUrl": {
+          "description": "The original requested url.",
+          "type": "string"
+        },
+        "runWarnings": {
+          "description": "List of all run warnings in the LHR. Will always output to at least `[]`.",
+          "items": {
+            "type": "any"
+          },
+          "type": "array"
+        },
+        "runtimeError": {
+          "description": "A top-level error message that, if present, indicates a serious enough problem that this Lighthouse result may need to be discarded.",
+          "properties": {
+            "code": {
+              "description": "The enumerated Lighthouse Error code.",
+              "type": "string"
+            },
+            "message": {
+              "description": "A human readable message explaining the error code.",
+              "type": "string"
+            }
+          },
+          "type": "object"
+        },
+        "timing": {
+          "description": "Timing information for this LHR.",
+          "properties": {
+            "total": {
+              "description": "The total duration of Lighthouse's run.",
+              "format": "double",
+              "type": "number"
+            }
+          },
+          "type": "object"
+        },
+        "userAgent": {
+          "description": "The user agent that was used to run this LHR.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "PagespeedApiLoadingExperienceV5": {
+      "id": "PagespeedApiLoadingExperienceV5",
+      "properties": {
+        "id": {
+          "description": "The url, pattern or origin which the metrics are on.",
+          "type": "string"
+        },
+        "initial_url": {
+          "type": "string"
+        },
+        "metrics": {
+          "additionalProperties": {
+            "description": "The type of the metric.",
+            "properties": {
+              "category": {
+                "type": "string"
+              },
+              "distributions": {
+                "items": {
+                  "properties": {
+                    "max": {
+                      "format": "int32",
+                      "type": "integer"
+                    },
+                    "min": {
+                      "format": "int32",
+                      "type": "integer"
+                    },
+                    "proportion": {
+                      "format": "double",
+                      "type": "number"
+                    }
+                  },
+                  "type": "object"
+                },
+                "type": "array"
+              },
+              "percentile": {
+                "format": "int32",
+                "type": "integer"
+              }
+            },
+            "type": "object"
+          },
+          "type": "object"
+        },
+        "overall_category": {
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "PagespeedApiPagespeedResponseV5": {
+      "id": "PagespeedApiPagespeedResponseV5",
+      "properties": {
+        "analysisUTCTimestamp": {
+          "description": "The UTC timestamp of this analysis.",
+          "type": "string"
+        },
+        "captchaResult": {
+          "description": "The captcha verify result",
+          "type": "string"
+        },
+        "id": {
+          "description": "Canonicalized and final URL for the document, after following page redirects (if any).",
+          "type": "string"
+        },
+        "kind": {
+          "default": "pagespeedonline#result",
+          "description": "Kind of result.",
+          "type": "string"
+        },
+        "lighthouseResult": {
+          "$ref": "LighthouseResultV5",
+          "description": "Lighthouse response for the audit url as an object."
+        },
+        "loadingExperience": {
+          "$ref": "PagespeedApiLoadingExperienceV5",
+          "description": "Metrics of end users' page loading experience."
+        },
+        "originLoadingExperience": {
+          "$ref": "PagespeedApiLoadingExperienceV5",
+          "description": "Metrics of the aggregated page loading experience of the origin"
+        },
+        "version": {
+          "description": "The version of PageSpeed used to generate these results.",
+          "properties": {
+            "major": {
+              "description": "The major version number of PageSpeed used to generate these results.",
+              "format": "int32",
+              "type": "integer"
+            },
+            "minor": {
+              "description": "The minor version number of PageSpeed used to generate these results.",
+              "format": "int32",
+              "type": "integer"
+            }
+          },
+          "type": "object"
+        }
+      },
+      "type": "object"
+    }
+  },
+  "servicePath": "pagespeedonline/v5/",
+  "title": "PageSpeed Insights API",
+  "version": "v5"
+}
\ No newline at end of file
diff --git a/pagespeedonline/v5/pagespeedonline-gen.go b/pagespeedonline/v5/pagespeedonline-gen.go
new file mode 100644
index 0000000..a2eaef6
--- /dev/null
+++ b/pagespeedonline/v5/pagespeedonline-gen.go
@@ -0,0 +1,1061 @@
+// Copyright 2018 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// AUTO-GENERATED CODE. DO NOT EDIT.
+
+// Package pagespeedonline provides access to the PageSpeed Insights API.
+//
+// See https://developers.google.com/speed/docs/insights/v5/get-started
+//
+// Usage example:
+//
+//   import "google.golang.org/api/pagespeedonline/v5"
+//   ...
+//   pagespeedonlineService, err := pagespeedonline.New(oauthHttpClient)
+package pagespeedonline // import "google.golang.org/api/pagespeedonline/v5"
+
+import (
+	"bytes"
+	"context"
+	"encoding/json"
+	"errors"
+	"fmt"
+	"io"
+	"net/http"
+	"net/url"
+	"strconv"
+	"strings"
+
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
+)
+
+// 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
+
+const apiId = "pagespeedonline:v5"
+const apiName = "pagespeedonline"
+const apiVersion = "v5"
+const basePath = "https://www.googleapis.com/pagespeedonline/v5/"
+
+func New(client *http.Client) (*Service, error) {
+	if client == nil {
+		return nil, errors.New("client is nil")
+	}
+	s := &Service{client: client, BasePath: basePath}
+	s.Pagespeedapi = NewPagespeedapiService(s)
+	return s, nil
+}
+
+type Service struct {
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
+
+	Pagespeedapi *PagespeedapiService
+}
+
+func (s *Service) userAgent() string {
+	if s.UserAgent == "" {
+		return googleapi.UserAgent
+	}
+	return googleapi.UserAgent + " " + s.UserAgent
+}
+
+func NewPagespeedapiService(s *Service) *PagespeedapiService {
+	rs := &PagespeedapiService{s: s}
+	return rs
+}
+
+type PagespeedapiService struct {
+	s *Service
+}
+
+type GoogleprotobufValue interface{}
+
+type LighthouseAuditResultV5 struct {
+	// Description: The description of the audit.
+	Description string `json:"description,omitempty"`
+
+	// Details: Freeform details section of the audit.
+	Details googleapi.RawMessage `json:"details,omitempty"`
+
+	// DisplayValue: The value that should be displayed on the UI for this
+	// audit.
+	DisplayValue string `json:"displayValue,omitempty"`
+
+	// ErrorMessage: An error message from a thrown error inside the audit.
+	ErrorMessage string `json:"errorMessage,omitempty"`
+
+	// Explanation: An explanation of the errors in the audit.
+	Explanation string `json:"explanation,omitempty"`
+
+	// Id: The audit's id.
+	Id string `json:"id,omitempty"`
+
+	Score interface{} `json:"score,omitempty"`
+
+	// ScoreDisplayMode: The enumerated score display mode.
+	ScoreDisplayMode string `json:"scoreDisplayMode,omitempty"`
+
+	// Title: The human readable title.
+	Title string `json:"title,omitempty"`
+
+	Warnings interface{} `json:"warnings,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 *LighthouseAuditResultV5) MarshalJSON() ([]byte, error) {
+	type NoMethod LighthouseAuditResultV5
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type LighthouseCategoryV5 struct {
+	// AuditRefs: An array of references to all the audit members of this
+	// category.
+	AuditRefs []*LighthouseCategoryV5AuditRefs `json:"auditRefs,omitempty"`
+
+	// Description: A more detailed description of the category and its
+	// importance.
+	Description string `json:"description,omitempty"`
+
+	// Id: The string identifier of the category.
+	Id string `json:"id,omitempty"`
+
+	// ManualDescription: A description for the manual audits in the
+	// category.
+	ManualDescription string `json:"manualDescription,omitempty"`
+
+	Score interface{} `json:"score,omitempty"`
+
+	// Title: The human-friendly name of the category.
+	Title string `json:"title,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "AuditRefs") 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. "AuditRefs") 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 *LighthouseCategoryV5) MarshalJSON() ([]byte, error) {
+	type NoMethod LighthouseCategoryV5
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type LighthouseCategoryV5AuditRefs struct {
+	// Group: The category group that the audit belongs to (optional).
+	Group string `json:"group,omitempty"`
+
+	// Id: The audit ref id.
+	Id string `json:"id,omitempty"`
+
+	// Weight: The weight this audit's score has on the overall category
+	// score.
+	Weight float64 `json:"weight,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Group") 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. "Group") 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 *LighthouseCategoryV5AuditRefs) MarshalJSON() ([]byte, error) {
+	type NoMethod LighthouseCategoryV5AuditRefs
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *LighthouseCategoryV5AuditRefs) UnmarshalJSON(data []byte) error {
+	type NoMethod LighthouseCategoryV5AuditRefs
+	var s1 struct {
+		Weight gensupport.JSONFloat64 `json:"weight"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.Weight = float64(s1.Weight)
+	return nil
+}
+
+type LighthouseResultV5 struct {
+	// Audits: Map of audits in the LHR.
+	Audits map[string]LighthouseAuditResultV5 `json:"audits,omitempty"`
+
+	// Categories: Map of categories in the LHR.
+	Categories map[string]LighthouseCategoryV5 `json:"categories,omitempty"`
+
+	// CategoryGroups: Map of category groups in the LHR.
+	CategoryGroups map[string]LighthouseResultV5CategoryGroups `json:"categoryGroups,omitempty"`
+
+	// ConfigSettings: The configuration settings for this LHR.
+	ConfigSettings *LighthouseResultV5ConfigSettings `json:"configSettings,omitempty"`
+
+	// Environment: Environment settings that were used when making this
+	// LHR.
+	Environment *LighthouseResultV5Environment `json:"environment,omitempty"`
+
+	// FetchTime: The time that this run was fetched.
+	FetchTime string `json:"fetchTime,omitempty"`
+
+	// FinalUrl: The final resolved url that was audited.
+	FinalUrl string `json:"finalUrl,omitempty"`
+
+	// I18n: The internationalization strings that are required to render
+	// the LHR.
+	I18n *LighthouseResultV5I18n `json:"i18n,omitempty"`
+
+	// LighthouseVersion: The lighthouse version that was used to generate
+	// this LHR.
+	LighthouseVersion string `json:"lighthouseVersion,omitempty"`
+
+	// RequestedUrl: The original requested url.
+	RequestedUrl string `json:"requestedUrl,omitempty"`
+
+	// RunWarnings: List of all run warnings in the LHR. Will always output
+	// to at least `[]`.
+	RunWarnings []interface{} `json:"runWarnings,omitempty"`
+
+	// RuntimeError: A top-level error message that, if present, indicates a
+	// serious enough problem that this Lighthouse result may need to be
+	// discarded.
+	RuntimeError *LighthouseResultV5RuntimeError `json:"runtimeError,omitempty"`
+
+	// Timing: Timing information for this LHR.
+	Timing *LighthouseResultV5Timing `json:"timing,omitempty"`
+
+	// UserAgent: The user agent that was used to run this LHR.
+	UserAgent string `json:"userAgent,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Audits") 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. "Audits") 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 *LighthouseResultV5) MarshalJSON() ([]byte, error) {
+	type NoMethod LighthouseResultV5
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// LighthouseResultV5CategoryGroups: A grouping contained in a category
+// that groups similar audits together.
+type LighthouseResultV5CategoryGroups struct {
+	// Description: An optional human readable description of the category
+	// group.
+	Description string `json:"description,omitempty"`
+
+	// Title: The title of the category group.
+	Title string `json:"title,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 *LighthouseResultV5CategoryGroups) MarshalJSON() ([]byte, error) {
+	type NoMethod LighthouseResultV5CategoryGroups
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// LighthouseResultV5ConfigSettings: The configuration settings for this
+// LHR.
+type LighthouseResultV5ConfigSettings struct {
+	// EmulatedFormFactor: The form factor the emulation should use.
+	EmulatedFormFactor string `json:"emulatedFormFactor,omitempty"`
+
+	// Locale: The locale setting.
+	Locale string `json:"locale,omitempty"`
+
+	OnlyCategories interface{} `json:"onlyCategories,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "EmulatedFormFactor")
+	// 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. "EmulatedFormFactor") 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 *LighthouseResultV5ConfigSettings) MarshalJSON() ([]byte, error) {
+	type NoMethod LighthouseResultV5ConfigSettings
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// LighthouseResultV5Environment: Environment settings that were used
+// when making this LHR.
+type LighthouseResultV5Environment struct {
+	// BenchmarkIndex: The benchmark index number that indicates rough
+	// device class.
+	BenchmarkIndex float64 `json:"benchmarkIndex,omitempty"`
+
+	// HostUserAgent: The user agent string of the version of Chrome used.
+	HostUserAgent string `json:"hostUserAgent,omitempty"`
+
+	// NetworkUserAgent: The user agent string that was sent over the
+	// network.
+	NetworkUserAgent string `json:"networkUserAgent,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "BenchmarkIndex") 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. "BenchmarkIndex") 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 *LighthouseResultV5Environment) MarshalJSON() ([]byte, error) {
+	type NoMethod LighthouseResultV5Environment
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *LighthouseResultV5Environment) UnmarshalJSON(data []byte) error {
+	type NoMethod LighthouseResultV5Environment
+	var s1 struct {
+		BenchmarkIndex gensupport.JSONFloat64 `json:"benchmarkIndex"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.BenchmarkIndex = float64(s1.BenchmarkIndex)
+	return nil
+}
+
+// LighthouseResultV5I18n: The internationalization strings that are
+// required to render the LHR.
+type LighthouseResultV5I18n struct {
+	// RendererFormattedStrings: Internationalized strings that are
+	// formatted to the locale in configSettings.
+	RendererFormattedStrings *LighthouseResultV5I18nRendererFormattedStrings `json:"rendererFormattedStrings,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g.
+	// "RendererFormattedStrings") 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. "RendererFormattedStrings")
+	// 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 *LighthouseResultV5I18n) MarshalJSON() ([]byte, error) {
+	type NoMethod LighthouseResultV5I18n
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// LighthouseResultV5I18nRendererFormattedStrings: Internationalized
+// strings that are formatted to the locale in configSettings.
+type LighthouseResultV5I18nRendererFormattedStrings struct {
+	// AuditGroupExpandTooltip: The tooltip text on an expandable chevron
+	// icon.
+	AuditGroupExpandTooltip string `json:"auditGroupExpandTooltip,omitempty"`
+
+	// CrcInitialNavigation: The label for the initial request in a critical
+	// request chain.
+	CrcInitialNavigation string `json:"crcInitialNavigation,omitempty"`
+
+	// CrcLongestDurationLabel: The label for values shown in the summary of
+	// critical request chains.
+	CrcLongestDurationLabel string `json:"crcLongestDurationLabel,omitempty"`
+
+	// ErrorLabel: The label shown next to an audit or metric that has had
+	// an error.
+	ErrorLabel string `json:"errorLabel,omitempty"`
+
+	// ErrorMissingAuditInfo: The error string shown next to an erroring
+	// audit.
+	ErrorMissingAuditInfo string `json:"errorMissingAuditInfo,omitempty"`
+
+	// LabDataTitle: The title of the lab data performance category.
+	LabDataTitle string `json:"labDataTitle,omitempty"`
+
+	// LsPerformanceCategoryDescription: The disclaimer shown under
+	// performance explaning that the network can vary.
+	LsPerformanceCategoryDescription string `json:"lsPerformanceCategoryDescription,omitempty"`
+
+	// ManualAuditsGroupTitle: The heading shown above a list of audits that
+	// were not computerd in the run.
+	ManualAuditsGroupTitle string `json:"manualAuditsGroupTitle,omitempty"`
+
+	// NotApplicableAuditsGroupTitle: The heading shown above a list of
+	// audits that do not apply to a page.
+	NotApplicableAuditsGroupTitle string `json:"notApplicableAuditsGroupTitle,omitempty"`
+
+	// OpportunityResourceColumnLabel: The heading for the estimated page
+	// load savings opportunity of an audit.
+	OpportunityResourceColumnLabel string `json:"opportunityResourceColumnLabel,omitempty"`
+
+	// OpportunitySavingsColumnLabel: The heading for the estimated page
+	// load savings of opportunity audits.
+	OpportunitySavingsColumnLabel string `json:"opportunitySavingsColumnLabel,omitempty"`
+
+	// PassedAuditsGroupTitle: The heading that is shown above a list of
+	// audits that are passing.
+	PassedAuditsGroupTitle string `json:"passedAuditsGroupTitle,omitempty"`
+
+	// ScorescaleLabel: The label that explains the score gauges scale
+	// (0-49, 50-89, 90-100).
+	ScorescaleLabel string `json:"scorescaleLabel,omitempty"`
+
+	// ToplevelWarningsMessage: The label shown preceding important warnings
+	// that may have invalidated an entire report.
+	ToplevelWarningsMessage string `json:"toplevelWarningsMessage,omitempty"`
+
+	// VarianceDisclaimer: The disclaimer shown below a performance metric
+	// value.
+	VarianceDisclaimer string `json:"varianceDisclaimer,omitempty"`
+
+	// WarningHeader: The label shown above a bulleted list of warnings.
+	WarningHeader string `json:"warningHeader,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g.
+	// "AuditGroupExpandTooltip") 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. "AuditGroupExpandTooltip")
+	// 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 *LighthouseResultV5I18nRendererFormattedStrings) MarshalJSON() ([]byte, error) {
+	type NoMethod LighthouseResultV5I18nRendererFormattedStrings
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// LighthouseResultV5RuntimeError: A top-level error message that, if
+// present, indicates a serious enough problem that this Lighthouse
+// result may need to be discarded.
+type LighthouseResultV5RuntimeError struct {
+	// Code: The enumerated Lighthouse Error code.
+	Code string `json:"code,omitempty"`
+
+	// Message: A human readable message explaining the error code.
+	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 *LighthouseResultV5RuntimeError) MarshalJSON() ([]byte, error) {
+	type NoMethod LighthouseResultV5RuntimeError
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// LighthouseResultV5Timing: Timing information for this LHR.
+type LighthouseResultV5Timing struct {
+	// Total: The total duration of Lighthouse's run.
+	Total float64 `json:"total,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Total") 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. "Total") 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 *LighthouseResultV5Timing) MarshalJSON() ([]byte, error) {
+	type NoMethod LighthouseResultV5Timing
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *LighthouseResultV5Timing) UnmarshalJSON(data []byte) error {
+	type NoMethod LighthouseResultV5Timing
+	var s1 struct {
+		Total gensupport.JSONFloat64 `json:"total"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.Total = float64(s1.Total)
+	return nil
+}
+
+type PagespeedApiLoadingExperienceV5 struct {
+	// Id: The url, pattern or origin which the metrics are on.
+	Id string `json:"id,omitempty"`
+
+	InitialUrl string `json:"initial_url,omitempty"`
+
+	Metrics map[string]PagespeedApiLoadingExperienceV5Metrics `json:"metrics,omitempty"`
+
+	OverallCategory string `json:"overall_category,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 *PagespeedApiLoadingExperienceV5) MarshalJSON() ([]byte, error) {
+	type NoMethod PagespeedApiLoadingExperienceV5
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// PagespeedApiLoadingExperienceV5Metrics: The type of the metric.
+type PagespeedApiLoadingExperienceV5Metrics struct {
+	Category string `json:"category,omitempty"`
+
+	Distributions []*PagespeedApiLoadingExperienceV5MetricsDistributions `json:"distributions,omitempty"`
+
+	Percentile int64 `json:"percentile,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Category") 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. "Category") 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 *PagespeedApiLoadingExperienceV5Metrics) MarshalJSON() ([]byte, error) {
+	type NoMethod PagespeedApiLoadingExperienceV5Metrics
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type PagespeedApiLoadingExperienceV5MetricsDistributions struct {
+	Max int64 `json:"max,omitempty"`
+
+	Min int64 `json:"min,omitempty"`
+
+	Proportion float64 `json:"proportion,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Max") 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. "Max") 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 *PagespeedApiLoadingExperienceV5MetricsDistributions) MarshalJSON() ([]byte, error) {
+	type NoMethod PagespeedApiLoadingExperienceV5MetricsDistributions
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *PagespeedApiLoadingExperienceV5MetricsDistributions) UnmarshalJSON(data []byte) error {
+	type NoMethod PagespeedApiLoadingExperienceV5MetricsDistributions
+	var s1 struct {
+		Proportion gensupport.JSONFloat64 `json:"proportion"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.Proportion = float64(s1.Proportion)
+	return nil
+}
+
+type PagespeedApiPagespeedResponseV5 struct {
+	// AnalysisUTCTimestamp: The UTC timestamp of this analysis.
+	AnalysisUTCTimestamp string `json:"analysisUTCTimestamp,omitempty"`
+
+	// CaptchaResult: The captcha verify result
+	CaptchaResult string `json:"captchaResult,omitempty"`
+
+	// Id: Canonicalized and final URL for the document, after following
+	// page redirects (if any).
+	Id string `json:"id,omitempty"`
+
+	// Kind: Kind of result.
+	Kind string `json:"kind,omitempty"`
+
+	// LighthouseResult: Lighthouse response for the audit url as an object.
+	LighthouseResult *LighthouseResultV5 `json:"lighthouseResult,omitempty"`
+
+	// LoadingExperience: Metrics of end users' page loading experience.
+	LoadingExperience *PagespeedApiLoadingExperienceV5 `json:"loadingExperience,omitempty"`
+
+	// OriginLoadingExperience: Metrics of the aggregated page loading
+	// experience of the origin
+	OriginLoadingExperience *PagespeedApiLoadingExperienceV5 `json:"originLoadingExperience,omitempty"`
+
+	// Version: The version of PageSpeed used to generate these results.
+	Version *PagespeedApiPagespeedResponseV5Version `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.
+	// "AnalysisUTCTimestamp") 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. "AnalysisUTCTimestamp") 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 *PagespeedApiPagespeedResponseV5) MarshalJSON() ([]byte, error) {
+	type NoMethod PagespeedApiPagespeedResponseV5
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// PagespeedApiPagespeedResponseV5Version: The version of PageSpeed used
+// to generate these results.
+type PagespeedApiPagespeedResponseV5Version struct {
+	// Major: The major version number of PageSpeed used to generate these
+	// results.
+	Major int64 `json:"major,omitempty"`
+
+	// Minor: The minor version number of PageSpeed used to generate these
+	// results.
+	Minor int64 `json:"minor,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Major") 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. "Major") 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 *PagespeedApiPagespeedResponseV5Version) MarshalJSON() ([]byte, error) {
+	type NoMethod PagespeedApiPagespeedResponseV5Version
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// method id "pagespeedonline.pagespeedapi.runpagespeed":
+
+type PagespeedapiRunpagespeedCall struct {
+	s            *Service
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// Runpagespeed: Runs PageSpeed analysis on the page at the specified
+// URL, and returns PageSpeed scores, a list of suggestions to make that
+// page faster, and other information.
+func (r *PagespeedapiService) Runpagespeed(url string) *PagespeedapiRunpagespeedCall {
+	c := &PagespeedapiRunpagespeedCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.urlParams_.Set("url", url)
+	return c
+}
+
+// Category sets the optional parameter "category": A Lighthouse
+// category to run; if none are given, only Performance category will be
+// run
+//
+// Possible values:
+//   "accessibility"
+//   "best-practices"
+//   "performance"
+//   "pwa"
+//   "seo"
+func (c *PagespeedapiRunpagespeedCall) Category(category ...string) *PagespeedapiRunpagespeedCall {
+	c.urlParams_.SetMulti("category", append([]string{}, category...))
+	return c
+}
+
+// Locale sets the optional parameter "locale": The locale used to
+// localize formatted results
+func (c *PagespeedapiRunpagespeedCall) Locale(locale string) *PagespeedapiRunpagespeedCall {
+	c.urlParams_.Set("locale", locale)
+	return c
+}
+
+// Strategy sets the optional parameter "strategy": The analysis
+// strategy (desktop or mobile) to use, and desktop is the default
+//
+// Possible values:
+//   "desktop" - Fetch and analyze the URL for desktop browsers
+//   "mobile" - Fetch and analyze the URL for mobile devices
+func (c *PagespeedapiRunpagespeedCall) Strategy(strategy string) *PagespeedapiRunpagespeedCall {
+	c.urlParams_.Set("strategy", strategy)
+	return c
+}
+
+// UtmCampaign sets the optional parameter "utm_campaign": Campaign name
+// for analytics.
+func (c *PagespeedapiRunpagespeedCall) UtmCampaign(utmCampaign string) *PagespeedapiRunpagespeedCall {
+	c.urlParams_.Set("utm_campaign", utmCampaign)
+	return c
+}
+
+// UtmSource sets the optional parameter "utm_source": Campaign source
+// for analytics.
+func (c *PagespeedapiRunpagespeedCall) UtmSource(utmSource string) *PagespeedapiRunpagespeedCall {
+	c.urlParams_.Set("utm_source", utmSource)
+	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 *PagespeedapiRunpagespeedCall) Fields(s ...googleapi.Field) *PagespeedapiRunpagespeedCall {
+	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 *PagespeedapiRunpagespeedCall) IfNoneMatch(entityTag string) *PagespeedapiRunpagespeedCall {
+	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 *PagespeedapiRunpagespeedCall) Context(ctx context.Context) *PagespeedapiRunpagespeedCall {
+	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 *PagespeedapiRunpagespeedCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *PagespeedapiRunpagespeedCall) 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)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "runPagespeed")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "pagespeedonline.pagespeedapi.runpagespeed" call.
+// Exactly one of *PagespeedApiPagespeedResponseV5 or error will be
+// non-nil. Any non-2xx status code is an error. Response headers are in
+// either *PagespeedApiPagespeedResponseV5.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 *PagespeedapiRunpagespeedCall) Do(opts ...googleapi.CallOption) (*PagespeedApiPagespeedResponseV5, 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 := &PagespeedApiPagespeedResponseV5{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Runs PageSpeed analysis on the page at the specified URL, and returns PageSpeed scores, a list of suggestions to make that page faster, and other information.",
+	//   "httpMethod": "GET",
+	//   "id": "pagespeedonline.pagespeedapi.runpagespeed",
+	//   "parameterOrder": [
+	//     "url"
+	//   ],
+	//   "parameters": {
+	//     "category": {
+	//       "description": "A Lighthouse category to run; if none are given, only Performance category will be run",
+	//       "enum": [
+	//         "accessibility",
+	//         "best-practices",
+	//         "performance",
+	//         "pwa",
+	//         "seo"
+	//       ],
+	//       "enumDescriptions": [
+	//         "",
+	//         "",
+	//         "",
+	//         "",
+	//         ""
+	//       ],
+	//       "location": "query",
+	//       "repeated": true,
+	//       "type": "string"
+	//     },
+	//     "locale": {
+	//       "description": "The locale used to localize formatted results",
+	//       "location": "query",
+	//       "pattern": "[a-zA-Z]+((_|-)[a-zA-Z]+)?",
+	//       "type": "string"
+	//     },
+	//     "strategy": {
+	//       "description": "The analysis strategy (desktop or mobile) to use, and desktop is the default",
+	//       "enum": [
+	//         "desktop",
+	//         "mobile"
+	//       ],
+	//       "enumDescriptions": [
+	//         "Fetch and analyze the URL for desktop browsers",
+	//         "Fetch and analyze the URL for mobile devices"
+	//       ],
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "url": {
+	//       "description": "The URL to fetch and analyze",
+	//       "location": "query",
+	//       "pattern": "(?i)http(s)?://.*",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "utm_campaign": {
+	//       "description": "Campaign name for analytics.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "utm_source": {
+	//       "description": "Campaign source for analytics.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "runPagespeed",
+	//   "response": {
+	//     "$ref": "PagespeedApiPagespeedResponseV5"
+	//   }
+	// }
+
+}
diff --git a/people/v1/people-api.json b/people/v1/people-api.json
index 3279ae1..96a4947 100644
--- a/people/v1/people-api.json
+++ b/people/v1/people-api.json
@@ -3,10 +3,10 @@
     "oauth2": {
       "scopes": {
         "https://www.googleapis.com/auth/contacts": {
-          "description": "Manage your contacts"
+          "description": "See, edit, download, and permanently delete your contacts"
         },
         "https://www.googleapis.com/auth/contacts.readonly": {
-          "description": "View your contacts"
+          "description": "See and download your contacts"
         },
         "https://www.googleapis.com/auth/plus.login": {
           "description": "Know the list of people in your circles, your age range, and language"
@@ -585,7 +585,7 @@
       }
     }
   },
-  "revision": "20180919",
+  "revision": "20181128",
   "rootUrl": "https://people.googleapis.com/",
   "schemas": {
     "Address": {
diff --git a/people/v1/people-gen.go b/people/v1/people-gen.go
index cbc8b4d..b8a3d45 100644
--- a/people/v1/people-gen.go
+++ b/people/v1/people-gen.go
@@ -62,10 +62,10 @@
 
 // OAuth2 scopes used by this API.
 const (
-	// Manage your contacts
+	// See, edit, download, and permanently delete your contacts
 	ContactsScope = "https://www.googleapis.com/auth/contacts"
 
-	// View your contacts
+	// See and download your contacts
 	ContactsReadonlyScope = "https://www.googleapis.com/auth/contacts.readonly"
 
 	// Know the list of people in your circles, your age range, and language
diff --git a/pubsub/v1/pubsub-api.json b/pubsub/v1/pubsub-api.json
index a82ca9a..03d797b 100644
--- a/pubsub/v1/pubsub-api.json
+++ b/pubsub/v1/pubsub-api.json
@@ -111,7 +111,7 @@
         "snapshots": {
           "methods": {
             "create": {
-              "description": "Creates a snapshot from the requested subscription. Snapshots are used in\n\u003ca href=\"/pubsub/docs/replay-overview\"\u003eSeek\u003c/a\u003e operations, which allow\nyou to manage message acknowledgments in bulk. That is, you can set the\nacknowledgment state of messages in an existing subscription to the state\ncaptured by a snapshot.\n\u003cbr\u003e\u003cbr\u003e\n\u003cb\u003eBETA:\u003c/b\u003e This feature is part of a beta release. This API might be\nchanged in backward-incompatible ways and is not recommended for production\nuse. It is not subject to any SLA or deprecation policy.\u003cbr\u003e\u003cbr\u003e\nIf the snapshot already exists, returns `ALREADY_EXISTS`.\nIf the requested subscription doesn't exist, returns `NOT_FOUND`.\nIf the backlog in the subscription is too old -- and the resulting snapshot\nwould expire in less than 1 hour -- then `FAILED_PRECONDITION` is returned.\nSee also the `Snapshot.expire_time` field. If the name is not provided in\nthe request, the server will assign a random\nname for this snapshot on the same project as the subscription, conforming\nto the [resource name format](https://cloud.google.com/pubsub/docs/overview#names).\nThe generated\nname is populated in the returned Snapshot object. Note that for REST API\nrequests, you must specify a name in the request.",
+              "description": "Creates a snapshot from the requested subscription. Snapshots are used in\n\u003ca href=\"https://cloud.google.com/pubsub/docs/replay-overview\"\u003eSeek\u003c/a\u003e\noperations, which allow\nyou to manage message acknowledgments in bulk. That is, you can set the\nacknowledgment state of messages in an existing subscription to the state\ncaptured by a snapshot.\n\u003cbr\u003e\u003cbr\u003e\n\u003cb\u003eBETA:\u003c/b\u003e This feature is part of a beta release. This API might be\nchanged in backward-incompatible ways and is not recommended for production\nuse. It is not subject to any SLA or deprecation policy.\u003cbr\u003e\u003cbr\u003e\nIf the snapshot already exists, returns `ALREADY_EXISTS`.\nIf the requested subscription doesn't exist, returns `NOT_FOUND`.\nIf the backlog in the subscription is too old -- and the resulting snapshot\nwould expire in less than 1 hour -- then `FAILED_PRECONDITION` is returned.\nSee also the `Snapshot.expire_time` field. If the name is not provided in\nthe request, the server will assign a random\nname for this snapshot on the same project as the subscription, conforming\nto the\n[resource name format](https://cloud.google.com/pubsub/docs/overview#names).\nThe generated name is populated in the returned Snapshot object. Note that\nfor REST API requests, you must specify a name in the request.",
               "flatPath": "v1/projects/{projectsId}/snapshots/{snapshotsId}",
               "httpMethod": "PUT",
               "id": "pubsub.projects.snapshots.create",
@@ -120,7 +120,7 @@
               ],
               "parameters": {
                 "name": {
-                  "description": "Optional user-provided name for this snapshot.\nIf the name is not provided in the request, the server will assign a random\nname for this snapshot on the same project as the subscription.\nNote that for REST API requests, you must specify a name.  See the\n\u003ca href=\"/pubsub/docs/admin#resource_names\"\u003eresource name rules\u003c/a\u003e.\nFormat is `projects/{project}/snapshots/{snap}`.",
+                  "description": "Optional user-provided name for this snapshot.\nIf the name is not provided in the request, the server will assign a random\nname for this snapshot on the same project as the subscription.\nNote that for REST API requests, you must specify a name.  See the\n\u003ca href=\"https://cloud.google.com/pubsub/docs/admin#resource_names\"\u003e\nresource name rules\u003c/a\u003e.\nFormat is `projects/{project}/snapshots/{snap}`.",
                   "location": "path",
                   "pattern": "^projects/[^/]+/snapshots/[^/]+$",
                   "required": true,
@@ -140,7 +140,7 @@
               ]
             },
             "delete": {
-              "description": "Removes an existing snapshot. Snapshots are used in\n\u003ca href=\"/pubsub/docs/replay-overview\"\u003eSeek\u003c/a\u003e operations, which allow\nyou to manage message acknowledgments in bulk. That is, you can set the\nacknowledgment state of messages in an existing subscription to the state\ncaptured by a snapshot.\u003cbr\u003e\u003cbr\u003e\n\u003cb\u003eBETA:\u003c/b\u003e This feature is part of a beta release. This API might be\nchanged in backward-incompatible ways and is not recommended for production\nuse. It is not subject to any SLA or deprecation policy.\nWhen the snapshot is deleted, all messages retained in the snapshot\nare immediately dropped. After a snapshot is deleted, a new one may be\ncreated with the same name, but the new one has no association with the old\nsnapshot or its subscription, unless the same subscription is specified.",
+              "description": "Removes an existing snapshot. Snapshots are used in\n\u003ca href=\"https://cloud.google.com/pubsub/docs/replay-overview\"\u003eSeek\u003c/a\u003e\noperations, which allow\nyou to manage message acknowledgments in bulk. That is, you can set the\nacknowledgment state of messages in an existing subscription to the state\ncaptured by a snapshot.\u003cbr\u003e\u003cbr\u003e\n\u003cb\u003eBETA:\u003c/b\u003e This feature is part of a beta release. This API might be\nchanged in backward-incompatible ways and is not recommended for production\nuse. It is not subject to any SLA or deprecation policy.\nWhen the snapshot is deleted, all messages retained in the snapshot\nare immediately dropped. After a snapshot is deleted, a new one may be\ncreated with the same name, but the new one has no association with the old\nsnapshot or its subscription, unless the same subscription is specified.",
               "flatPath": "v1/projects/{projectsId}/snapshots/{snapshotsId}",
               "httpMethod": "DELETE",
               "id": "pubsub.projects.snapshots.delete",
@@ -166,7 +166,7 @@
               ]
             },
             "get": {
-              "description": "Gets the configuration details of a snapshot. Snapshots are used in\n\u003ca href=\"/pubsub/docs/replay-overview\"\u003eSeek\u003c/a\u003e operations, which allow\nyou to manage message acknowledgments in bulk. That is, you can set the\nacknowledgment state of messages in an existing subscription to the state\ncaptured by a snapshot.\u003cbr\u003e\u003cbr\u003e\n\u003cb\u003eBETA:\u003c/b\u003e This feature is part of a beta release. This API might be\nchanged in backward-incompatible ways and is not recommended for production\nuse. It is not subject to any SLA or deprecation policy.",
+              "description": "Gets the configuration details of a snapshot. Snapshots are used in\n\u003ca href=\"https://cloud.google.com/pubsub/docs/replay-overview\"\u003eSeek\u003c/a\u003e\noperations, which allow you to manage message acknowledgments in bulk. That\nis, you can set the acknowledgment state of messages in an existing\nsubscription to the state captured by a snapshot.\u003cbr\u003e\u003cbr\u003e\n\u003cb\u003eBETA:\u003c/b\u003e This feature is part of a beta release. This API might be\nchanged in backward-incompatible ways and is not recommended for production\nuse. It is not subject to any SLA or deprecation policy.",
               "flatPath": "v1/projects/{projectsId}/snapshots/{snapshotsId}",
               "httpMethod": "GET",
               "id": "pubsub.projects.snapshots.get",
@@ -218,7 +218,7 @@
               ]
             },
             "list": {
-              "description": "Lists the existing snapshots. Snapshots are used in\n\u003ca href=\"/pubsub/docs/replay-overview\"\u003eSeek\u003c/a\u003e operations, which allow\nyou to manage message acknowledgments in bulk. That is, you can set the\nacknowledgment state of messages in an existing subscription to the state\ncaptured by a snapshot.\u003cbr\u003e\u003cbr\u003e\n\u003cb\u003eBETA:\u003c/b\u003e This feature is part of a beta release. This API might be\nchanged in backward-incompatible ways and is not recommended for production\nuse. It is not subject to any SLA or deprecation policy.",
+              "description": "Lists the existing snapshots. Snapshots are used in\n\u003ca href=\"https://cloud.google.com/pubsub/docs/replay-overview\"\u003eSeek\u003c/a\u003e\noperations, which allow\nyou to manage message acknowledgments in bulk. That is, you can set the\nacknowledgment state of messages in an existing subscription to the state\ncaptured by a snapshot.\u003cbr\u003e\u003cbr\u003e\n\u003cb\u003eBETA:\u003c/b\u003e This feature is part of a beta release. This API might be\nchanged in backward-incompatible ways and is not recommended for production\nuse. It is not subject to any SLA or deprecation policy.",
               "flatPath": "v1/projects/{projectsId}/snapshots",
               "httpMethod": "GET",
               "id": "pubsub.projects.snapshots.list",
@@ -255,7 +255,7 @@
               ]
             },
             "patch": {
-              "description": "Updates an existing snapshot. Snapshots are used in\n\u003ca href=\"/pubsub/docs/replay-overview\"\u003eSeek\u003c/a\u003e operations, which allow\nyou to manage message acknowledgments in bulk. That is, you can set the\nacknowledgment state of messages in an existing subscription to the state\ncaptured by a snapshot.\u003cbr\u003e\u003cbr\u003e\n\u003cb\u003eBETA:\u003c/b\u003e This feature is part of a beta release. This API might be\nchanged in backward-incompatible ways and is not recommended for production\nuse. It is not subject to any SLA or deprecation policy.\nNote that certain properties of a snapshot are not modifiable.",
+              "description": "Updates an existing snapshot. Snapshots are used in\n\u003ca href=\"https://cloud.google.com/pubsub/docs/replay-overview\"\u003eSeek\u003c/a\u003e\noperations, which allow\nyou to manage message acknowledgments in bulk. That is, you can set the\nacknowledgment state of messages in an existing subscription to the state\ncaptured by a snapshot.\u003cbr\u003e\u003cbr\u003e\n\u003cb\u003eBETA:\u003c/b\u003e This feature is part of a beta release. This API might be\nchanged in backward-incompatible ways and is not recommended for production\nuse. It is not subject to any SLA or deprecation policy.\nNote that certain properties of a snapshot are not modifiable.",
               "flatPath": "v1/projects/{projectsId}/snapshots/{snapshotsId}",
               "httpMethod": "PATCH",
               "id": "pubsub.projects.snapshots.patch",
@@ -375,7 +375,7 @@
               ]
             },
             "create": {
-              "description": "Creates a subscription to a given topic. See the\n\u003ca href=\"/pubsub/docs/admin#resource_names\"\u003e resource name rules\u003c/a\u003e.\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.",
+              "description": "Creates a subscription to a given topic. See the\n\u003ca href=\"https://cloud.google.com/pubsub/docs/admin#resource_names\"\u003e\nresource name rules\u003c/a\u003e.\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.",
               "flatPath": "v1/projects/{projectsId}/subscriptions/{subscriptionsId}",
               "httpMethod": "PUT",
               "id": "pubsub.projects.subscriptions.create",
@@ -635,7 +635,7 @@
               ]
             },
             "seek": {
-              "description": "Seeks an existing subscription to a point in time or to a given snapshot,\nwhichever is provided in the request. Snapshots are used in\n\u003ca href=\"/pubsub/docs/replay-overview\"\u003eSeek\u003c/a\u003e operations, which allow\nyou to manage message acknowledgments in bulk. That is, you can set the\nacknowledgment state of messages in an existing subscription to the state\ncaptured by a snapshot. Note that both the subscription and the snapshot\nmust be on the same topic.\u003cbr\u003e\u003cbr\u003e\n\u003cb\u003eBETA:\u003c/b\u003e This feature is part of a beta release. This API might be\nchanged in backward-incompatible ways and is not recommended for production\nuse. It is not subject to any SLA or deprecation policy.",
+              "description": "Seeks an existing subscription to a point in time or to a given snapshot,\nwhichever is provided in the request. Snapshots are used in\n\u003ca href=\"https://cloud.google.com/pubsub/docs/replay-overview\"\u003eSeek\u003c/a\u003e\noperations, which allow\nyou to manage message acknowledgments in bulk. That is, you can set the\nacknowledgment state of messages in an existing subscription to the state\ncaptured by a snapshot. Note that both the subscription and the snapshot\nmust be on the same topic.\u003cbr\u003e\u003cbr\u003e\n\u003cb\u003eBETA:\u003c/b\u003e This feature is part of a beta release. This API might be\nchanged in backward-incompatible ways and is not recommended for production\nuse. It is not subject to any SLA or deprecation policy.",
               "flatPath": "v1/projects/{projectsId}/subscriptions/{subscriptionsId}:seek",
               "httpMethod": "POST",
               "id": "pubsub.projects.subscriptions.seek",
@@ -726,7 +726,7 @@
         "topics": {
           "methods": {
             "create": {
-              "description": "Creates the given topic with the given name. See the\n\u003ca href=\"/pubsub/docs/admin#resource_names\"\u003e resource name rules\u003c/a\u003e.",
+              "description": "Creates the given topic with the given name. See the\n\u003ca href=\"https://cloud.google.com/pubsub/docs/admin#resource_names\"\u003e\nresource name rules\u003c/a\u003e.",
               "flatPath": "v1/projects/{projectsId}/topics/{topicsId}",
               "httpMethod": "PUT",
               "id": "pubsub.projects.topics.create",
@@ -990,7 +990,7 @@
             "snapshots": {
               "methods": {
                 "list": {
-                  "description": "Lists the names of the snapshots on this topic. Snapshots are used in\n\u003ca href=\"/pubsub/docs/replay-overview\"\u003eSeek\u003c/a\u003e operations, which allow\nyou to manage message acknowledgments in bulk. That is, you can set the\nacknowledgment state of messages in an existing subscription to the state\ncaptured by a snapshot.\u003cbr\u003e\u003cbr\u003e\n\u003cb\u003eBETA:\u003c/b\u003e This feature is part of a beta release. This API might be\nchanged in backward-incompatible ways and is not recommended for production\nuse. It is not subject to any SLA or deprecation policy.",
+                  "description": "Lists the names of the snapshots on this topic. Snapshots are used in\n\u003ca href=\"https://cloud.google.com/pubsub/docs/replay-overview\"\u003eSeek\u003c/a\u003e\noperations, which allow\nyou to manage message acknowledgments in bulk. That is, you can set the\nacknowledgment state of messages in an existing subscription to the state\ncaptured by a snapshot.\u003cbr\u003e\u003cbr\u003e\n\u003cb\u003eBETA:\u003c/b\u003e This feature is part of a beta release. This API might be\nchanged in backward-incompatible ways and is not recommended for production\nuse. It is not subject to any SLA or deprecation policy.",
                   "flatPath": "v1/projects/{projectsId}/topics/{topicsId}/snapshots",
                   "httpMethod": "GET",
                   "id": "pubsub.projects.topics.snapshots.list",
@@ -1074,7 +1074,7 @@
       }
     }
   },
-  "revision": "20180828",
+  "revision": "20181107",
   "rootUrl": "https://pubsub.googleapis.com/",
   "schemas": {
     "AcknowledgeRequest": {
@@ -1121,7 +1121,7 @@
           "additionalProperties": {
             "type": "string"
           },
-          "description": "See \u003ca href=\"/pubsub/docs/labels\"\u003e Creating and managing labels\u003c/a\u003e.",
+          "description": "See \u003ca href=\"https://cloud.google.com/pubsub/docs/labels\"\u003e Creating and\nmanaging labels\u003c/a\u003e.",
           "type": "object"
         },
         "subscription": {
@@ -1137,6 +1137,18 @@
       "properties": {},
       "type": "object"
     },
+    "ExpirationPolicy": {
+      "description": "A policy that specifies the conditions for resource expiration (i.e.,\nautomatic resource deletion).",
+      "id": "ExpirationPolicy",
+      "properties": {
+        "ttl": {
+          "description": "Specifies the \"time-to-live\" duration for an associated resource. The\nresource expires if it is not active for a period of `ttl`. The definition\nof \"activity\" depends on the type of the associated resource. The minimum\nand maximum allowed values for `ttl` depend on the type of the associated\nresource, as well. If `ttl` is not set, the associated resource never\nexpires.",
+          "format": "google-duration",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "Expr": {
       "description": "Represents an expression text. Example:\n\n    title: \"User account presence\"\n    description: \"Determines whether the request has a user account\"\n    expression: \"size(request.user) \u003e 0\"",
       "id": "Expr",
@@ -1333,7 +1345,7 @@
       "type": "object"
     },
     "PubsubMessage": {
-      "description": "A message that is published by publishers and consumed by subscribers. The\nmessage must contain either a non-empty data field or at least one attribute.",
+      "description": "A message that is published by publishers and consumed by subscribers. The\nmessage must contain either a non-empty data field or at least one attribute.\nNote that client libraries represent this object differently\ndepending on the language. See the corresponding\n\u003ca href=\"https://cloud.google.com/pubsub/docs/reference/libraries\"\u003eclient\nlibrary documentation\u003c/a\u003e for more information. See\n\u003ca href=\"https://cloud.google.com/pubsub/quotas\"\u003eQuotas and limits\u003c/a\u003e\nfor more information about message limits.",
       "id": "PubsubMessage",
       "properties": {
         "attributes": {
@@ -1457,7 +1469,7 @@
       "type": "object"
     },
     "Snapshot": {
-      "description": "A snapshot resource. Snapshots are used in\n\u003ca href=\"/pubsub/docs/replay-overview\"\u003eSeek\u003c/a\u003e operations, which allow\nyou to manage message acknowledgments in bulk. That is, you can set the\nacknowledgment state of messages in an existing subscription to the state\ncaptured by a snapshot.\u003cbr\u003e\u003cbr\u003e\n\u003cb\u003eBETA:\u003c/b\u003e This feature is part of a beta release. This API might be\nchanged in backward-incompatible ways and is not recommended for production\nuse. It is not subject to any SLA or deprecation policy.",
+      "description": "A snapshot resource. Snapshots are used in\n\u003ca href=\"https://cloud.google.com/pubsub/docs/replay-overview\"\u003eSeek\u003c/a\u003e\noperations, which allow\nyou to manage message acknowledgments in bulk. That is, you can set the\nacknowledgment state of messages in an existing subscription to the state\ncaptured by a snapshot.\u003cbr\u003e\u003cbr\u003e\n\u003cb\u003eBETA:\u003c/b\u003e This feature is part of a beta release. This API might be\nchanged in backward-incompatible ways and is not recommended for production\nuse. It is not subject to any SLA or deprecation policy.",
       "id": "Snapshot",
       "properties": {
         "expireTime": {
@@ -1469,7 +1481,7 @@
           "additionalProperties": {
             "type": "string"
           },
-          "description": "See \u003ca href=\"/pubsub/docs/labels\"\u003e Creating and managing labels\u003c/a\u003e.",
+          "description": "See \u003ca href=\"https://cloud.google.com/pubsub/docs/labels\"\u003e Creating and\nmanaging labels\u003c/a\u003e.",
           "type": "object"
         },
         "name": {
@@ -1492,11 +1504,15 @@
           "format": "int32",
           "type": "integer"
         },
+        "expirationPolicy": {
+          "$ref": "ExpirationPolicy",
+          "description": "A policy that specifies the conditions for this subscription's expiration.\nA subscription is considered active as long as any connected subscriber is\nsuccessfully consuming messages from the subscription or is issuing\noperations on the subscription. If `expiration_policy` is not set, a\n*default policy* with `ttl` of 31 days will be used. The minimum allowed\nvalue for `expiration_policy.ttl` is 1 day.\n\u003cb\u003eBETA:\u003c/b\u003e This feature is part of a beta release. This API might be\nchanged in backward-incompatible ways and is not recommended for production\nuse. It is not subject to any SLA or deprecation policy."
+        },
         "labels": {
           "additionalProperties": {
             "type": "string"
           },
-          "description": "See \u003ca href=\"/pubsub/docs/labels\"\u003e Creating and managing labels\u003c/a\u003e.",
+          "description": "See \u003ca href=\"https://cloud.google.com/pubsub/docs/labels\"\u003e Creating and\nmanaging labels\u003c/a\u003e.",
           "type": "object"
         },
         "messageRetentionDuration": {
@@ -1513,7 +1529,7 @@
           "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."
         },
         "retainAckedMessages": {
-          "description": "Indicates whether to retain acknowledged messages. If true, then\nmessages are not expunged from the subscription's backlog, even if they are\nacknowledged, until they fall out of the `message_retention_duration`\nwindow. This must be true if you would like to\n\u003ca href=\"/pubsub/docs/replay-overview#seek_to_a_time\"\u003eSeek to a timestamp\u003c/a\u003e.\n\u003cbr\u003e\u003cbr\u003e\n\u003cb\u003eBETA:\u003c/b\u003e This feature is part of a beta release. This API might be\nchanged in backward-incompatible ways and is not recommended for production\nuse. It is not subject to any SLA or deprecation policy.",
+          "description": "Indicates whether to retain acknowledged messages. If true, then\nmessages are not expunged from the subscription's backlog, even if they are\nacknowledged, until they fall out of the `message_retention_duration`\nwindow. This must be true if you would like to\n\u003ca href=\"https://cloud.google.com/pubsub/docs/replay-overview#seek_to_a_time\"\u003e\nSeek to a timestamp\u003c/a\u003e.\n\u003cbr\u003e\u003cbr\u003e\n\u003cb\u003eBETA:\u003c/b\u003e This feature is part of a beta release. This API might be\nchanged in backward-incompatible ways and is not recommended for production\nuse. It is not subject to any SLA or deprecation policy.",
           "type": "boolean"
         },
         "topic": {
@@ -1559,7 +1575,7 @@
           "additionalProperties": {
             "type": "string"
           },
-          "description": "See \u003ca href=\"/pubsub/docs/labels\"\u003e Creating and managing labels\u003c/a\u003e.",
+          "description": "See \u003ca href=\"https://cloud.google.com/pubsub/docs/labels\"\u003e Creating and\nmanaging labels\u003c/a\u003e.",
           "type": "object"
         },
         "name": {
diff --git a/pubsub/v1/pubsub-gen.go b/pubsub/v1/pubsub-gen.go
index 4bf507a..d630ad1 100644
--- a/pubsub/v1/pubsub-gen.go
+++ b/pubsub/v1/pubsub-gen.go
@@ -275,8 +275,9 @@
 // use.
 // It is not subject to any SLA or deprecation policy.
 type CreateSnapshotRequest struct {
-	// Labels: See <a href="/pubsub/docs/labels"> Creating and managing
-	// labels</a>.
+	// Labels: See <a href="https://cloud.google.com/pubsub/docs/labels">
+	// Creating and
+	// managing labels</a>.
 	Labels map[string]string `json:"labels,omitempty"`
 
 	// Subscription: The subscription whose backlog the snapshot
@@ -334,6 +335,46 @@
 	googleapi.ServerResponse `json:"-"`
 }
 
+// ExpirationPolicy: A policy that specifies the conditions for resource
+// expiration (i.e.,
+// automatic resource deletion).
+type ExpirationPolicy struct {
+	// Ttl: Specifies the "time-to-live" duration for an associated
+	// resource. The
+	// resource expires if it is not active for a period of `ttl`. The
+	// definition
+	// of "activity" depends on the type of the associated resource. The
+	// minimum
+	// and maximum allowed values for `ttl` depend on the type of the
+	// associated
+	// resource, as well. If `ttl` is not set, the associated resource
+	// never
+	// expires.
+	Ttl string `json:"ttl,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Ttl") 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. "Ttl") 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 *ExpirationPolicy) MarshalJSON() ([]byte, error) {
+	type NoMethod ExpirationPolicy
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // Expr: Represents an expression text. Example:
 //
 //     title: "User account presence"
@@ -840,6 +881,16 @@
 // by subscribers. The
 // message must contain either a non-empty data field or at least one
 // attribute.
+// Note that client libraries represent this object
+// differently
+// depending on the language. See the corresponding
+// <a
+// href="https://cloud.google.com/pubsub/docs/reference/libraries">client
+//
+// library documentation</a> for more information. See
+// <a href="https://cloud.google.com/pubsub/quotas">Quotas and
+// limits</a>
+// for more information about message limits.
 type PubsubMessage struct {
 	// Attributes: Optional attributes for this message.
 	Attributes map[string]string `json:"attributes,omitempty"`
@@ -1161,8 +1212,10 @@
 }
 
 // Snapshot: A snapshot resource. Snapshots are used in
-// <a href="/pubsub/docs/replay-overview">Seek</a> operations, which
-// allow
+// <a
+// href="https://cloud.google.com/pubsub/docs/replay-overview">Seek</a>
+// o
+// perations, which allow
 // you to manage message acknowledgments in bulk. That is, you can set
 // the
 // acknowledgment state of messages in an existing subscription to the
@@ -1194,8 +1247,9 @@
 	// snapshot that would expire in less than 1 hour after creation.
 	ExpireTime string `json:"expireTime,omitempty"`
 
-	// Labels: See <a href="/pubsub/docs/labels"> Creating and managing
-	// labels</a>.
+	// Labels: See <a href="https://cloud.google.com/pubsub/docs/labels">
+	// Creating and
+	// managing labels</a>.
 	Labels map[string]string `json:"labels,omitempty"`
 
 	// Name: The name of the snapshot.
@@ -1266,8 +1320,27 @@
 	// system will eventually redeliver the message.
 	AckDeadlineSeconds int64 `json:"ackDeadlineSeconds,omitempty"`
 
-	// Labels: See <a href="/pubsub/docs/labels"> Creating and managing
-	// labels</a>.
+	// ExpirationPolicy: A policy that specifies the conditions for this
+	// subscription's expiration.
+	// A subscription is considered active as long as any connected
+	// subscriber is
+	// successfully consuming messages from the subscription or is
+	// issuing
+	// operations on the subscription. If `expiration_policy` is not set,
+	// a
+	// *default policy* with `ttl` of 31 days will be used. The minimum
+	// allowed
+	// value for `expiration_policy.ttl` is 1 day.
+	// <b>BETA:</b> This feature is part of a beta release. This API might
+	// be
+	// changed in backward-incompatible ways and is not recommended for
+	// production
+	// use. It is not subject to any SLA or deprecation policy.
+	ExpirationPolicy *ExpirationPolicy `json:"expirationPolicy,omitempty"`
+
+	// Labels: See <a href="https://cloud.google.com/pubsub/docs/labels">
+	// Creating and
+	// managing labels</a>.
 	Labels map[string]string `json:"labels,omitempty"`
 
 	// MessageRetentionDuration: How long to retain unacknowledged messages
@@ -1314,8 +1387,10 @@
 	// acknowledged, until they fall out of the
 	// `message_retention_duration`
 	// window. This must be true if you would like to
-	// <a href="/pubsub/docs/replay-overview#seek_to_a_time">Seek to a
-	// timestamp</a>.
+	// <a
+	// href="https://cloud.google.com/pubsub/docs/replay-overview#seek_to_a_t
+	// ime">
+	// Seek to a timestamp</a>.
 	// <br><br>
 	// <b>BETA:</b> This feature is part of a beta release. This API might
 	// be
@@ -1432,8 +1507,9 @@
 
 // Topic: A topic resource.
 type Topic struct {
-	// Labels: See <a href="/pubsub/docs/labels"> Creating and managing
-	// labels</a>.
+	// Labels: See <a href="https://cloud.google.com/pubsub/docs/labels">
+	// Creating and
+	// managing labels</a>.
 	Labels map[string]string `json:"labels,omitempty"`
 
 	// Name: The name of the topic. It must have the
@@ -1601,8 +1677,10 @@
 
 // Create: Creates a snapshot from the requested subscription. Snapshots
 // are used in
-// <a href="/pubsub/docs/replay-overview">Seek</a> operations, which
-// allow
+// <a
+// href="https://cloud.google.com/pubsub/docs/replay-overview">Seek</a>
+// o
+// perations, which allow
 // you to manage message acknowledgments in bulk. That is, you can set
 // the
 // acknowledgment state of messages in an existing subscription to the
@@ -1625,12 +1703,12 @@
 // the request, the server will assign a random
 // name for this snapshot on the same project as the subscription,
 // conforming
-// to the [resource name
+// to the
+// [resource name
 // format](https://cloud.google.com/pubsub/docs/overview#names).
-// The generated
-// name is populated in the returned Snapshot object. Note that for REST
-// API
-// requests, you must specify a name in the request.
+// The generated name is populated in the returned Snapshot object. Note
+// that
+// for REST API requests, you must specify a name in the request.
 func (r *ProjectsSnapshotsService) Create(name string, createsnapshotrequest *CreateSnapshotRequest) *ProjectsSnapshotsCreateCall {
 	c := &ProjectsSnapshotsCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
 	c.name = name
@@ -1728,7 +1806,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Creates a snapshot from the requested subscription. Snapshots are used in\n\u003ca href=\"/pubsub/docs/replay-overview\"\u003eSeek\u003c/a\u003e operations, which allow\nyou to manage message acknowledgments in bulk. That is, you can set the\nacknowledgment state of messages in an existing subscription to the state\ncaptured by a snapshot.\n\u003cbr\u003e\u003cbr\u003e\n\u003cb\u003eBETA:\u003c/b\u003e This feature is part of a beta release. This API might be\nchanged in backward-incompatible ways and is not recommended for production\nuse. It is not subject to any SLA or deprecation policy.\u003cbr\u003e\u003cbr\u003e\nIf the snapshot already exists, returns `ALREADY_EXISTS`.\nIf the requested subscription doesn't exist, returns `NOT_FOUND`.\nIf the backlog in the subscription is too old -- and the resulting snapshot\nwould expire in less than 1 hour -- then `FAILED_PRECONDITION` is returned.\nSee also the `Snapshot.expire_time` field. If the name is not provided in\nthe request, the server will assign a random\nname for this snapshot on the same project as the subscription, conforming\nto the [resource name format](https://cloud.google.com/pubsub/docs/overview#names).\nThe generated\nname is populated in the returned Snapshot object. Note that for REST API\nrequests, you must specify a name in the request.",
+	//   "description": "Creates a snapshot from the requested subscription. Snapshots are used in\n\u003ca href=\"https://cloud.google.com/pubsub/docs/replay-overview\"\u003eSeek\u003c/a\u003e\noperations, which allow\nyou to manage message acknowledgments in bulk. That is, you can set the\nacknowledgment state of messages in an existing subscription to the state\ncaptured by a snapshot.\n\u003cbr\u003e\u003cbr\u003e\n\u003cb\u003eBETA:\u003c/b\u003e This feature is part of a beta release. This API might be\nchanged in backward-incompatible ways and is not recommended for production\nuse. It is not subject to any SLA or deprecation policy.\u003cbr\u003e\u003cbr\u003e\nIf the snapshot already exists, returns `ALREADY_EXISTS`.\nIf the requested subscription doesn't exist, returns `NOT_FOUND`.\nIf the backlog in the subscription is too old -- and the resulting snapshot\nwould expire in less than 1 hour -- then `FAILED_PRECONDITION` is returned.\nSee also the `Snapshot.expire_time` field. If the name is not provided in\nthe request, the server will assign a random\nname for this snapshot on the same project as the subscription, conforming\nto the\n[resource name format](https://cloud.google.com/pubsub/docs/overview#names).\nThe generated name is populated in the returned Snapshot object. Note that\nfor REST API requests, you must specify a name in the request.",
 	//   "flatPath": "v1/projects/{projectsId}/snapshots/{snapshotsId}",
 	//   "httpMethod": "PUT",
 	//   "id": "pubsub.projects.snapshots.create",
@@ -1737,7 +1815,7 @@
 	//   ],
 	//   "parameters": {
 	//     "name": {
-	//       "description": "Optional user-provided name for this snapshot.\nIf the name is not provided in the request, the server will assign a random\nname for this snapshot on the same project as the subscription.\nNote that for REST API requests, you must specify a name.  See the\n\u003ca href=\"/pubsub/docs/admin#resource_names\"\u003eresource name rules\u003c/a\u003e.\nFormat is `projects/{project}/snapshots/{snap}`.",
+	//       "description": "Optional user-provided name for this snapshot.\nIf the name is not provided in the request, the server will assign a random\nname for this snapshot on the same project as the subscription.\nNote that for REST API requests, you must specify a name.  See the\n\u003ca href=\"https://cloud.google.com/pubsub/docs/admin#resource_names\"\u003e\nresource name rules\u003c/a\u003e.\nFormat is `projects/{project}/snapshots/{snap}`.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]+/snapshots/[^/]+$",
 	//       "required": true,
@@ -1770,8 +1848,10 @@
 }
 
 // Delete: Removes an existing snapshot. Snapshots are used in
-// <a href="/pubsub/docs/replay-overview">Seek</a> operations, which
-// allow
+// <a
+// href="https://cloud.google.com/pubsub/docs/replay-overview">Seek</a>
+// o
+// perations, which allow
 // you to manage message acknowledgments in bulk. That is, you can set
 // the
 // acknowledgment state of messages in an existing subscription to the
@@ -1881,7 +1961,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Removes an existing snapshot. Snapshots are used in\n\u003ca href=\"/pubsub/docs/replay-overview\"\u003eSeek\u003c/a\u003e operations, which allow\nyou to manage message acknowledgments in bulk. That is, you can set the\nacknowledgment state of messages in an existing subscription to the state\ncaptured by a snapshot.\u003cbr\u003e\u003cbr\u003e\n\u003cb\u003eBETA:\u003c/b\u003e This feature is part of a beta release. This API might be\nchanged in backward-incompatible ways and is not recommended for production\nuse. It is not subject to any SLA or deprecation policy.\nWhen the snapshot is deleted, all messages retained in the snapshot\nare immediately dropped. After a snapshot is deleted, a new one may be\ncreated with the same name, but the new one has no association with the old\nsnapshot or its subscription, unless the same subscription is specified.",
+	//   "description": "Removes an existing snapshot. Snapshots are used in\n\u003ca href=\"https://cloud.google.com/pubsub/docs/replay-overview\"\u003eSeek\u003c/a\u003e\noperations, which allow\nyou to manage message acknowledgments in bulk. That is, you can set the\nacknowledgment state of messages in an existing subscription to the state\ncaptured by a snapshot.\u003cbr\u003e\u003cbr\u003e\n\u003cb\u003eBETA:\u003c/b\u003e This feature is part of a beta release. This API might be\nchanged in backward-incompatible ways and is not recommended for production\nuse. It is not subject to any SLA or deprecation policy.\nWhen the snapshot is deleted, all messages retained in the snapshot\nare immediately dropped. After a snapshot is deleted, a new one may be\ncreated with the same name, but the new one has no association with the old\nsnapshot or its subscription, unless the same subscription is specified.",
 	//   "flatPath": "v1/projects/{projectsId}/snapshots/{snapshotsId}",
 	//   "httpMethod": "DELETE",
 	//   "id": "pubsub.projects.snapshots.delete",
@@ -1922,13 +2002,15 @@
 
 // Get: Gets the configuration details of a snapshot. Snapshots are used
 // in
-// <a href="/pubsub/docs/replay-overview">Seek</a> operations, which
-// allow
-// you to manage message acknowledgments in bulk. That is, you can set
-// the
-// acknowledgment state of messages in an existing subscription to the
-// state
-// captured by a snapshot.<br><br>
+// <a
+// href="https://cloud.google.com/pubsub/docs/replay-overview">Seek</a>
+// o
+// perations, which allow you to manage message acknowledgments in bulk.
+// That
+// is, you can set the acknowledgment state of messages in an
+// existing
+// subscription to the state captured by a
+// snapshot.<br><br>
 // <b>BETA:</b> This feature is part of a beta release. This API might
 // be
 // changed in backward-incompatible ways and is not recommended for
@@ -2038,7 +2120,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Gets the configuration details of a snapshot. Snapshots are used in\n\u003ca href=\"/pubsub/docs/replay-overview\"\u003eSeek\u003c/a\u003e operations, which allow\nyou to manage message acknowledgments in bulk. That is, you can set the\nacknowledgment state of messages in an existing subscription to the state\ncaptured by a snapshot.\u003cbr\u003e\u003cbr\u003e\n\u003cb\u003eBETA:\u003c/b\u003e This feature is part of a beta release. This API might be\nchanged in backward-incompatible ways and is not recommended for production\nuse. It is not subject to any SLA or deprecation policy.",
+	//   "description": "Gets the configuration details of a snapshot. Snapshots are used in\n\u003ca href=\"https://cloud.google.com/pubsub/docs/replay-overview\"\u003eSeek\u003c/a\u003e\noperations, which allow you to manage message acknowledgments in bulk. That\nis, you can set the acknowledgment state of messages in an existing\nsubscription to the state captured by a snapshot.\u003cbr\u003e\u003cbr\u003e\n\u003cb\u003eBETA:\u003c/b\u003e This feature is part of a beta release. This API might be\nchanged in backward-incompatible ways and is not recommended for production\nuse. It is not subject to any SLA or deprecation policy.",
 	//   "flatPath": "v1/projects/{projectsId}/snapshots/{snapshotsId}",
 	//   "httpMethod": "GET",
 	//   "id": "pubsub.projects.snapshots.get",
@@ -2225,8 +2307,10 @@
 }
 
 // List: Lists the existing snapshots. Snapshots are used in
-// <a href="/pubsub/docs/replay-overview">Seek</a> operations, which
-// allow
+// <a
+// href="https://cloud.google.com/pubsub/docs/replay-overview">Seek</a>
+// o
+// perations, which allow
 // you to manage message acknowledgments in bulk. That is, you can set
 // the
 // acknowledgment state of messages in an existing subscription to the
@@ -2358,7 +2442,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Lists the existing snapshots. Snapshots are used in\n\u003ca href=\"/pubsub/docs/replay-overview\"\u003eSeek\u003c/a\u003e operations, which allow\nyou to manage message acknowledgments in bulk. That is, you can set the\nacknowledgment state of messages in an existing subscription to the state\ncaptured by a snapshot.\u003cbr\u003e\u003cbr\u003e\n\u003cb\u003eBETA:\u003c/b\u003e This feature is part of a beta release. This API might be\nchanged in backward-incompatible ways and is not recommended for production\nuse. It is not subject to any SLA or deprecation policy.",
+	//   "description": "Lists the existing snapshots. Snapshots are used in\n\u003ca href=\"https://cloud.google.com/pubsub/docs/replay-overview\"\u003eSeek\u003c/a\u003e\noperations, which allow\nyou to manage message acknowledgments in bulk. That is, you can set the\nacknowledgment state of messages in an existing subscription to the state\ncaptured by a snapshot.\u003cbr\u003e\u003cbr\u003e\n\u003cb\u003eBETA:\u003c/b\u003e This feature is part of a beta release. This API might be\nchanged in backward-incompatible ways and is not recommended for production\nuse. It is not subject to any SLA or deprecation policy.",
 	//   "flatPath": "v1/projects/{projectsId}/snapshots",
 	//   "httpMethod": "GET",
 	//   "id": "pubsub.projects.snapshots.list",
@@ -2430,8 +2514,10 @@
 }
 
 // Patch: Updates an existing snapshot. Snapshots are used in
-// <a href="/pubsub/docs/replay-overview">Seek</a> operations, which
-// allow
+// <a
+// href="https://cloud.google.com/pubsub/docs/replay-overview">Seek</a>
+// o
+// perations, which allow
 // you to manage message acknowledgments in bulk. That is, you can set
 // the
 // acknowledgment state of messages in an existing subscription to the
@@ -2540,7 +2626,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Updates an existing snapshot. Snapshots are used in\n\u003ca href=\"/pubsub/docs/replay-overview\"\u003eSeek\u003c/a\u003e operations, which allow\nyou to manage message acknowledgments in bulk. That is, you can set the\nacknowledgment state of messages in an existing subscription to the state\ncaptured by a snapshot.\u003cbr\u003e\u003cbr\u003e\n\u003cb\u003eBETA:\u003c/b\u003e This feature is part of a beta release. This API might be\nchanged in backward-incompatible ways and is not recommended for production\nuse. It is not subject to any SLA or deprecation policy.\nNote that certain properties of a snapshot are not modifiable.",
+	//   "description": "Updates an existing snapshot. Snapshots are used in\n\u003ca href=\"https://cloud.google.com/pubsub/docs/replay-overview\"\u003eSeek\u003c/a\u003e\noperations, which allow\nyou to manage message acknowledgments in bulk. That is, you can set the\nacknowledgment state of messages in an existing subscription to the state\ncaptured by a snapshot.\u003cbr\u003e\u003cbr\u003e\n\u003cb\u003eBETA:\u003c/b\u003e This feature is part of a beta release. This API might be\nchanged in backward-incompatible ways and is not recommended for production\nuse. It is not subject to any SLA or deprecation policy.\nNote that certain properties of a snapshot are not modifiable.",
 	//   "flatPath": "v1/projects/{projectsId}/snapshots/{snapshotsId}",
 	//   "httpMethod": "PATCH",
 	//   "id": "pubsub.projects.snapshots.patch",
@@ -3025,8 +3111,10 @@
 }
 
 // Create: Creates a subscription to a given topic. See the
-// <a href="/pubsub/docs/admin#resource_names"> resource name
-// rules</a>.
+// <a
+// href="https://cloud.google.com/pubsub/docs/admin#resource_names">
+// reso
+// urce name rules</a>.
 // If the subscription already exists, returns `ALREADY_EXISTS`.
 // If the corresponding topic doesn't exist, returns `NOT_FOUND`.
 //
@@ -3138,7 +3226,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Creates a subscription to a given topic. See the\n\u003ca href=\"/pubsub/docs/admin#resource_names\"\u003e resource name rules\u003c/a\u003e.\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.",
+	//   "description": "Creates a subscription to a given topic. See the\n\u003ca href=\"https://cloud.google.com/pubsub/docs/admin#resource_names\"\u003e\nresource name rules\u003c/a\u003e.\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.",
 	//   "flatPath": "v1/projects/{projectsId}/subscriptions/{subscriptionsId}",
 	//   "httpMethod": "PUT",
 	//   "id": "pubsub.projects.subscriptions.create",
@@ -4389,8 +4477,10 @@
 // Seek: Seeks an existing subscription to a point in time or to a given
 // snapshot,
 // whichever is provided in the request. Snapshots are used in
-// <a href="/pubsub/docs/replay-overview">Seek</a> operations, which
-// allow
+// <a
+// href="https://cloud.google.com/pubsub/docs/replay-overview">Seek</a>
+// o
+// perations, which allow
 // you to manage message acknowledgments in bulk. That is, you can set
 // the
 // acknowledgment state of messages in an existing subscription to the
@@ -4500,7 +4590,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Seeks an existing subscription to a point in time or to a given snapshot,\nwhichever is provided in the request. Snapshots are used in\n\u003ca href=\"/pubsub/docs/replay-overview\"\u003eSeek\u003c/a\u003e operations, which allow\nyou to manage message acknowledgments in bulk. That is, you can set the\nacknowledgment state of messages in an existing subscription to the state\ncaptured by a snapshot. Note that both the subscription and the snapshot\nmust be on the same topic.\u003cbr\u003e\u003cbr\u003e\n\u003cb\u003eBETA:\u003c/b\u003e This feature is part of a beta release. This API might be\nchanged in backward-incompatible ways and is not recommended for production\nuse. It is not subject to any SLA or deprecation policy.",
+	//   "description": "Seeks an existing subscription to a point in time or to a given snapshot,\nwhichever is provided in the request. Snapshots are used in\n\u003ca href=\"https://cloud.google.com/pubsub/docs/replay-overview\"\u003eSeek\u003c/a\u003e\noperations, which allow\nyou to manage message acknowledgments in bulk. That is, you can set the\nacknowledgment state of messages in an existing subscription to the state\ncaptured by a snapshot. Note that both the subscription and the snapshot\nmust be on the same topic.\u003cbr\u003e\u003cbr\u003e\n\u003cb\u003eBETA:\u003c/b\u003e This feature is part of a beta release. This API might be\nchanged in backward-incompatible ways and is not recommended for production\nuse. It is not subject to any SLA or deprecation policy.",
 	//   "flatPath": "v1/projects/{projectsId}/subscriptions/{subscriptionsId}:seek",
 	//   "httpMethod": "POST",
 	//   "id": "pubsub.projects.subscriptions.seek",
@@ -4835,7 +4925,10 @@
 }
 
 // Create: Creates the given topic with the given name. See the
-// <a href="/pubsub/docs/admin#resource_names"> resource name rules</a>.
+// <a
+// href="https://cloud.google.com/pubsub/docs/admin#resource_names">
+// reso
+// urce name rules</a>.
 func (r *ProjectsTopicsService) Create(name string, topic *Topic) *ProjectsTopicsCreateCall {
 	c := &ProjectsTopicsCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
 	c.name = name
@@ -4933,7 +5026,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Creates the given topic with the given name. See the\n\u003ca href=\"/pubsub/docs/admin#resource_names\"\u003e resource name rules\u003c/a\u003e.",
+	//   "description": "Creates the given topic with the given name. See the\n\u003ca href=\"https://cloud.google.com/pubsub/docs/admin#resource_names\"\u003e\nresource name rules\u003c/a\u003e.",
 	//   "flatPath": "v1/projects/{projectsId}/topics/{topicsId}",
 	//   "httpMethod": "PUT",
 	//   "id": "pubsub.projects.topics.create",
@@ -6175,8 +6268,10 @@
 
 // List: Lists the names of the snapshots on this topic. Snapshots are
 // used in
-// <a href="/pubsub/docs/replay-overview">Seek</a> operations, which
-// allow
+// <a
+// href="https://cloud.google.com/pubsub/docs/replay-overview">Seek</a>
+// o
+// perations, which allow
 // you to manage message acknowledgments in bulk. That is, you can set
 // the
 // acknowledgment state of messages in an existing subscription to the
@@ -6308,7 +6403,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Lists the names of the snapshots on this topic. Snapshots are used in\n\u003ca href=\"/pubsub/docs/replay-overview\"\u003eSeek\u003c/a\u003e operations, which allow\nyou to manage message acknowledgments in bulk. That is, you can set the\nacknowledgment state of messages in an existing subscription to the state\ncaptured by a snapshot.\u003cbr\u003e\u003cbr\u003e\n\u003cb\u003eBETA:\u003c/b\u003e This feature is part of a beta release. This API might be\nchanged in backward-incompatible ways and is not recommended for production\nuse. It is not subject to any SLA or deprecation policy.",
+	//   "description": "Lists the names of the snapshots on this topic. Snapshots are used in\n\u003ca href=\"https://cloud.google.com/pubsub/docs/replay-overview\"\u003eSeek\u003c/a\u003e\noperations, which allow\nyou to manage message acknowledgments in bulk. That is, you can set the\nacknowledgment state of messages in an existing subscription to the state\ncaptured by a snapshot.\u003cbr\u003e\u003cbr\u003e\n\u003cb\u003eBETA:\u003c/b\u003e This feature is part of a beta release. This API might be\nchanged in backward-incompatible ways and is not recommended for production\nuse. It is not subject to any SLA or deprecation policy.",
 	//   "flatPath": "v1/projects/{projectsId}/topics/{topicsId}/snapshots",
 	//   "httpMethod": "GET",
 	//   "id": "pubsub.projects.topics.snapshots.list",
diff --git a/runtimeconfig/v1beta1/runtimeconfig-api.json b/runtimeconfig/v1beta1/runtimeconfig-api.json
index f91bdc4..80c1d23 100644
--- a/runtimeconfig/v1beta1/runtimeconfig-api.json
+++ b/runtimeconfig/v1beta1/runtimeconfig-api.json
@@ -798,7 +798,7 @@
       }
     }
   },
-  "revision": "20181022",
+  "revision": "20181126",
   "rootUrl": "https://runtimeconfig.googleapis.com/",
   "schemas": {
     "Binding": {
@@ -1078,11 +1078,11 @@
       "id": "Variable",
       "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 match\n[0-9A-Za-z](?:[_.A-Za-z0-9-]{0,62}[_.A-Za-z0-9])? regular expression.\nThe length of a `[VARIABLE_NAME]` must be less than 256 characters.\n\nOnce you create a variable, you cannot change the variable 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 resource 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 match\n[0-9A-Za-z](?:[_.A-Za-z0-9-]{0,62}[_.A-Za-z0-9])? regular expression.\nThe length of a `[VARIABLE_NAME]` must be less than 256 characters.\n\nOnce you create a variable, you cannot change the variable name.",
           "type": "string"
         },
         "state": {
-          "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.",
+          "description": "Output 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.",
           "enum": [
             "VARIABLE_STATE_UNSPECIFIED",
             "UPDATED",
diff --git a/runtimeconfig/v1beta1/runtimeconfig-gen.go b/runtimeconfig/v1beta1/runtimeconfig-gen.go
index d42283e..244b906 100644
--- a/runtimeconfig/v1beta1/runtimeconfig-gen.go
+++ b/runtimeconfig/v1beta1/runtimeconfig-gen.go
@@ -991,7 +991,7 @@
 	//
 	// The `[PROJECT_ID]` must be a valid project ID, `[CONFIG_NAME]` must
 	// be a
-	// valid RuntimeConfig reource and `[VARIABLE_NAME]` follows Unix file
+	// valid RuntimeConfig resource and `[VARIABLE_NAME]` follows Unix file
 	// system
 	// file path naming.
 	//
@@ -1013,7 +1013,7 @@
 	// Once you create a variable, you cannot change the variable name.
 	Name string `json:"name,omitempty"`
 
-	// State: [Ouput only] The current state of the variable. The variable
+	// State: Output only. The current state of the variable. The variable
 	// state indicates
 	// the outcome of the `variables().watch` call and is visible through
 	// the
diff --git a/script/v1/script-api.json b/script/v1/script-api.json
index 787b5c4..e96de46 100644
--- a/script/v1/script-api.json
+++ b/script/v1/script-api.json
@@ -3,13 +3,13 @@
     "oauth2": {
       "scopes": {
         "https://mail.google.com/": {
-          "description": "Read, send, delete, and manage your email"
+          "description": "Read, compose, send, and permanently delete all your email from Gmail"
         },
         "https://www.google.com/calendar/feeds": {
-          "description": "Manage your calendars"
+          "description": "See, edit, share, and permanently delete all the calendars you can access using Google Calendar"
         },
         "https://www.google.com/m8/feeds": {
-          "description": "Manage your contacts"
+          "description": "See, edit, download, and permanently delete your contacts"
         },
         "https://www.googleapis.com/auth/admin.directory.group": {
           "description": "View and manage the provisioning of groups on your domain"
@@ -21,7 +21,7 @@
           "description": "View and manage your Google Docs documents"
         },
         "https://www.googleapis.com/auth/drive": {
-          "description": "View and manage the files in your Google Drive"
+          "description": "See, edit, create, and delete all of your Google Drive files"
         },
         "https://www.googleapis.com/auth/forms": {
           "description": "View and manage your forms in Google Drive"
@@ -32,8 +32,26 @@
         "https://www.googleapis.com/auth/groups": {
           "description": "View and manage your Google Groups"
         },
+        "https://www.googleapis.com/auth/script.deployments": {
+          "description": "Create and update Google Apps Script deployments"
+        },
+        "https://www.googleapis.com/auth/script.deployments.readonly": {
+          "description": "View Google Apps Script deployments"
+        },
+        "https://www.googleapis.com/auth/script.metrics": {
+          "description": "View Google Apps Script project's metrics"
+        },
+        "https://www.googleapis.com/auth/script.processes": {
+          "description": "View Google Apps Script processes"
+        },
+        "https://www.googleapis.com/auth/script.projects": {
+          "description": "Create and update Google Apps Script projects"
+        },
+        "https://www.googleapis.com/auth/script.projects.readonly": {
+          "description": "View Google Apps Script projects"
+        },
         "https://www.googleapis.com/auth/spreadsheets": {
-          "description": "View and manage your spreadsheets in Google Drive"
+          "description": "See, edit, create, and delete your spreadsheets in Google Drive"
         },
         "https://www.googleapis.com/auth/userinfo.email": {
           "description": "View your email address"
@@ -240,7 +258,10 @@
           "path": "v1/processes",
           "response": {
             "$ref": "ListUserProcessesResponse"
-          }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/script.processes"
+          ]
         },
         "listScriptProcesses": {
           "description": "List information about a script's executed processes, such as process type\nand current status.",
@@ -338,7 +359,10 @@
           "path": "v1/processes:listScriptProcesses",
           "response": {
             "$ref": "ListScriptProcessesResponse"
-          }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/script.processes"
+          ]
         }
       }
     },
@@ -357,7 +381,10 @@
           },
           "response": {
             "$ref": "Project"
-          }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/script.projects"
+          ]
         },
         "get": {
           "description": "Gets a script project's metadata.",
@@ -378,7 +405,11 @@
           "path": "v1/projects/{scriptId}",
           "response": {
             "$ref": "Project"
-          }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/script.projects",
+            "https://www.googleapis.com/auth/script.projects.readonly"
+          ]
         },
         "getContent": {
           "description": "Gets the content of the script project, including the code source and\nmetadata for each script file.",
@@ -405,7 +436,11 @@
           "path": "v1/projects/{scriptId}/content",
           "response": {
             "$ref": "Content"
-          }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/script.projects",
+            "https://www.googleapis.com/auth/script.projects.readonly"
+          ]
         },
         "getMetrics": {
           "description": "Get metrics data for scripts, such as number of executions and\nactive users.",
@@ -441,7 +476,10 @@
           "path": "v1/projects/{scriptId}/metrics",
           "response": {
             "$ref": "Metrics"
-          }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/script.metrics"
+          ]
         },
         "updateContent": {
           "description": "Updates the content of the specified script project.\nThis content is stored as the HEAD version, and is used when the script is\nexecuted as a trigger, in the script editor, in add-on preview mode, or as\na web app or Apps Script API in development mode. This clears all the\nexisting files in the project.",
@@ -465,7 +503,10 @@
           },
           "response": {
             "$ref": "Content"
-          }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/script.projects"
+          ]
         }
       },
       "resources": {
@@ -493,7 +534,10 @@
               },
               "response": {
                 "$ref": "Deployment"
-              }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/script.deployments"
+              ]
             },
             "delete": {
               "description": "Deletes a deployment of an Apps Script project.",
@@ -521,7 +565,10 @@
               "path": "v1/projects/{scriptId}/deployments/{deploymentId}",
               "response": {
                 "$ref": "Empty"
-              }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/script.deployments"
+              ]
             },
             "get": {
               "description": "Gets a deployment of an Apps Script project.",
@@ -549,7 +596,11 @@
               "path": "v1/projects/{scriptId}/deployments/{deploymentId}",
               "response": {
                 "$ref": "Deployment"
-              }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/script.deployments",
+                "https://www.googleapis.com/auth/script.deployments.readonly"
+              ]
             },
             "list": {
               "description": "Lists the deployments of an Apps Script project.",
@@ -581,7 +632,11 @@
               "path": "v1/projects/{scriptId}/deployments",
               "response": {
                 "$ref": "ListDeploymentsResponse"
-              }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/script.deployments",
+                "https://www.googleapis.com/auth/script.deployments.readonly"
+              ]
             },
             "update": {
               "description": "Updates a deployment of an Apps Script project.",
@@ -612,7 +667,10 @@
               },
               "response": {
                 "$ref": "Deployment"
-              }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/script.deployments"
+              ]
             }
           }
         },
@@ -640,7 +698,10 @@
               },
               "response": {
                 "$ref": "Version"
-              }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/script.projects"
+              ]
             },
             "get": {
               "description": "Gets a version of a script project.",
@@ -669,7 +730,11 @@
               "path": "v1/projects/{scriptId}/versions/{versionNumber}",
               "response": {
                 "$ref": "Version"
-              }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/script.projects",
+                "https://www.googleapis.com/auth/script.projects.readonly"
+              ]
             },
             "list": {
               "description": "List the versions of a script project.",
@@ -701,7 +766,11 @@
               "path": "v1/projects/{scriptId}/versions",
               "response": {
                 "$ref": "ListVersionsResponse"
-              }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/script.projects",
+                "https://www.googleapis.com/auth/script.projects.readonly"
+              ]
             }
           }
         }
@@ -750,7 +819,7 @@
       }
     }
   },
-  "revision": "20181015",
+  "revision": "20181128",
   "rootUrl": "https://script.googleapis.com/",
   "schemas": {
     "Content": {
diff --git a/script/v1/script-gen.go b/script/v1/script-gen.go
index b366fb3..e7a0863 100644
--- a/script/v1/script-gen.go
+++ b/script/v1/script-gen.go
@@ -62,13 +62,14 @@
 
 // OAuth2 scopes used by this API.
 const (
-	// Read, send, delete, and manage your email
+	// Read, compose, send, and permanently delete all your email from Gmail
 	MailGoogleComScope = "https://mail.google.com/"
 
-	// Manage your calendars
+	// See, edit, share, and permanently delete all the calendars you can
+	// access using Google Calendar
 	WwwGoogleComCalendarFeedsScope = "https://www.google.com/calendar/feeds"
 
-	// Manage your contacts
+	// See, edit, download, and permanently delete your contacts
 	WwwGoogleComM8FeedsScope = "https://www.google.com/m8/feeds"
 
 	// View and manage the provisioning of groups on your domain
@@ -80,7 +81,7 @@
 	// View and manage your Google Docs documents
 	DocumentsScope = "https://www.googleapis.com/auth/documents"
 
-	// View and manage the files in your Google Drive
+	// See, edit, create, and delete all of your Google Drive files
 	DriveScope = "https://www.googleapis.com/auth/drive"
 
 	// View and manage your forms in Google Drive
@@ -92,7 +93,25 @@
 	// View and manage your Google Groups
 	GroupsScope = "https://www.googleapis.com/auth/groups"
 
-	// View and manage your spreadsheets in Google Drive
+	// Create and update Google Apps Script deployments
+	ScriptDeploymentsScope = "https://www.googleapis.com/auth/script.deployments"
+
+	// View Google Apps Script deployments
+	ScriptDeploymentsReadonlyScope = "https://www.googleapis.com/auth/script.deployments.readonly"
+
+	// View Google Apps Script project's metrics
+	ScriptMetricsScope = "https://www.googleapis.com/auth/script.metrics"
+
+	// View Google Apps Script processes
+	ScriptProcessesScope = "https://www.googleapis.com/auth/script.processes"
+
+	// Create and update Google Apps Script projects
+	ScriptProjectsScope = "https://www.googleapis.com/auth/script.projects"
+
+	// View Google Apps Script projects
+	ScriptProjectsReadonlyScope = "https://www.googleapis.com/auth/script.projects.readonly"
+
+	// See, edit, create, and delete your spreadsheets in Google Drive
 	SpreadsheetsScope = "https://www.googleapis.com/auth/spreadsheets"
 
 	// View your email address
@@ -1872,7 +1891,10 @@
 	//   "path": "v1/processes",
 	//   "response": {
 	//     "$ref": "ListUserProcessesResponse"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/script.processes"
+	//   ]
 	// }
 
 }
@@ -2222,7 +2244,10 @@
 	//   "path": "v1/processes:listScriptProcesses",
 	//   "response": {
 	//     "$ref": "ListScriptProcessesResponse"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/script.processes"
+	//   ]
 	// }
 
 }
@@ -2366,7 +2391,10 @@
 	//   },
 	//   "response": {
 	//     "$ref": "Project"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/script.projects"
+	//   ]
 	// }
 
 }
@@ -2505,7 +2533,11 @@
 	//   "path": "v1/projects/{scriptId}",
 	//   "response": {
 	//     "$ref": "Project"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/script.projects",
+	//     "https://www.googleapis.com/auth/script.projects.readonly"
+	//   ]
 	// }
 
 }
@@ -2661,7 +2693,11 @@
 	//   "path": "v1/projects/{scriptId}/content",
 	//   "response": {
 	//     "$ref": "Content"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/script.projects",
+	//     "https://www.googleapis.com/auth/script.projects.readonly"
+	//   ]
 	// }
 
 }
@@ -2837,7 +2873,10 @@
 	//   "path": "v1/projects/{scriptId}/metrics",
 	//   "response": {
 	//     "$ref": "Metrics"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/script.metrics"
+	//   ]
 	// }
 
 }
@@ -2980,7 +3019,10 @@
 	//   },
 	//   "response": {
 	//     "$ref": "Content"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/script.projects"
+	//   ]
 	// }
 
 }
@@ -3115,7 +3157,10 @@
 	//   },
 	//   "response": {
 	//     "$ref": "Deployment"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/script.deployments"
+	//   ]
 	// }
 
 }
@@ -3250,7 +3295,10 @@
 	//   "path": "v1/projects/{scriptId}/deployments/{deploymentId}",
 	//   "response": {
 	//     "$ref": "Empty"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/script.deployments"
+	//   ]
 	// }
 
 }
@@ -3399,7 +3447,11 @@
 	//   "path": "v1/projects/{scriptId}/deployments/{deploymentId}",
 	//   "response": {
 	//     "$ref": "Deployment"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/script.deployments",
+	//     "https://www.googleapis.com/auth/script.deployments.readonly"
+	//   ]
 	// }
 
 }
@@ -3565,7 +3617,11 @@
 	//   "path": "v1/projects/{scriptId}/deployments",
 	//   "response": {
 	//     "$ref": "ListDeploymentsResponse"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/script.deployments",
+	//     "https://www.googleapis.com/auth/script.deployments.readonly"
+	//   ]
 	// }
 
 }
@@ -3731,7 +3787,10 @@
 	//   },
 	//   "response": {
 	//     "$ref": "Deployment"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/script.deployments"
+	//   ]
 	// }
 
 }
@@ -3868,7 +3927,10 @@
 	//   },
 	//   "response": {
 	//     "$ref": "Version"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/script.projects"
+	//   ]
 	// }
 
 }
@@ -4018,7 +4080,11 @@
 	//   "path": "v1/projects/{scriptId}/versions/{versionNumber}",
 	//   "response": {
 	//     "$ref": "Version"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/script.projects",
+	//     "https://www.googleapis.com/auth/script.projects.readonly"
+	//   ]
 	// }
 
 }
@@ -4184,7 +4250,11 @@
 	//   "path": "v1/projects/{scriptId}/versions",
 	//   "response": {
 	//     "$ref": "ListVersionsResponse"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/script.projects",
+	//     "https://www.googleapis.com/auth/script.projects.readonly"
+	//   ]
 	// }
 
 }
diff --git a/serviceconsumermanagement/v1/serviceconsumermanagement-api.json b/serviceconsumermanagement/v1/serviceconsumermanagement-api.json
index 7ac77c8..8c18043 100644
--- a/serviceconsumermanagement/v1/serviceconsumermanagement-api.json
+++ b/serviceconsumermanagement/v1/serviceconsumermanagement-api.json
@@ -302,6 +302,62 @@
                 "https://www.googleapis.com/auth/cloud-platform"
               ]
             },
+            "applyProjectConfig": {
+              "description": "Apply configuration to an existing tenant project.\nThis project must exist in active state and have the original owner\naccount. Caller must have the permission to add a project to the given\ntenancy unit. Configuration will be applied, but any existing settings on\nthe project will not be modified.\nSpecified policy bindings will be applied. Existing binding will not be\nmodified.\nSpecified services will be activated.   No service will be deactivated.\nNew billing configuration will be applied if specified.\nOmit billing configuration to keep the existing one.\nService account in the project will be created if previously non existing.\nOperation fails if any of the steps fail, but no rollback of already\napplied configuration changes is attempted.\nOperation\u003cresponse: Empty\u003e.",
+              "flatPath": "v1/services/{servicesId}/{servicesId1}/{servicesId2}/tenancyUnits/{tenancyUnitsId}:applyProjectConfig",
+              "httpMethod": "POST",
+              "id": "serviceconsumermanagement.services.tenancyUnits.applyProjectConfig",
+              "parameterOrder": [
+                "name"
+              ],
+              "parameters": {
+                "name": {
+                  "description": "Name of the tenancy unit.",
+                  "location": "path",
+                  "pattern": "^services/[^/]+/[^/]+/[^/]+/tenancyUnits/[^/]+$",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "path": "v1/{+name}:applyProjectConfig",
+              "request": {
+                "$ref": "ApplyTenantProjectConfigRequest"
+              },
+              "response": {
+                "$ref": "Operation"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ]
+            },
+            "attachProject": {
+              "description": "Attach an existing project to the tenancy unit as a new tenant\nresource. The project could be either the tenant project reserved by\ncalling AddTenantProject under tenancy unit for the producer project of\nservice, or from outside.\nCaller will be checked against the permission as if calling\nAddTenantProject on the same consumer.\nTo trigger the attachement, the targeted tenant project must be in a\nfolder. Please also make sure ServiceConsumerManagement service account is\nthe owner of that project. Note that these two requirements are already met\nif the project is reserved through AddTenantProject.\nOperation\u003cresponse: Empty\u003e.",
+              "flatPath": "v1/services/{servicesId}/{servicesId1}/{servicesId2}/tenancyUnits/{tenancyUnitsId}:attachProject",
+              "httpMethod": "POST",
+              "id": "serviceconsumermanagement.services.tenancyUnits.attachProject",
+              "parameterOrder": [
+                "name"
+              ],
+              "parameters": {
+                "name": {
+                  "description": "Name of the tenancy unit that project will be attached to.",
+                  "location": "path",
+                  "pattern": "^services/[^/]+/[^/]+/[^/]+/tenancyUnits/[^/]+$",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "path": "v1/{+name}:attachProject",
+              "request": {
+                "$ref": "AttachTenantProjectRequest"
+              },
+              "response": {
+                "$ref": "Operation"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ]
+            },
             "create": {
               "description": "Creates a tenancy unit with no tenant resources.",
               "flatPath": "v1/services/{servicesId}/{servicesId1}/{servicesId2}/tenancyUnits",
@@ -429,7 +485,7 @@
       }
     }
   },
-  "revision": "20181105",
+  "revision": "20181127",
   "rootUrl": "https://serviceconsumermanagement.googleapis.com/",
   "schemas": {
     "AddTenantProjectRequest": {
@@ -499,6 +555,40 @@
       },
       "type": "object"
     },
+    "ApplyTenantProjectConfigRequest": {
+      "description": "Request to apply configuration to an existing tenant project.",
+      "id": "ApplyTenantProjectConfigRequest",
+      "properties": {
+        "projectConfig": {
+          "$ref": "TenantProjectConfig",
+          "description": "Configuration that should be applied to the existing tenant project."
+        },
+        "tag": {
+          "description": "Tag of the project. Must be less than 128 characters. Required.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "AttachTenantProjectRequest": {
+      "description": "Request to attach an existing project to the tenancy unit as a new tenant\nresource.",
+      "id": "AttachTenantProjectRequest",
+      "properties": {
+        "externalResource": {
+          "description": "When attaching an external project, this is in the format of\n`projects/{project_number}’.",
+          "type": "string"
+        },
+        "reservedResource": {
+          "description": "When attaching a reserved project already in Tenancy Units, this is the\ntag of tenant resource under the tenancy unit for the service's producer\nproject. The reserved tenant resource must be in active state.",
+          "type": "string"
+        },
+        "tag": {
+          "description": "Tag of the tenant resource after attachment.\nMust be less than 128 characters. Required.",
+          "type": "string"
+        }
+      },
+      "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).",
       "id": "AuthProvider",
diff --git a/serviceconsumermanagement/v1/serviceconsumermanagement-gen.go b/serviceconsumermanagement/v1/serviceconsumermanagement-gen.go
index ee9f892..34d983f 100644
--- a/serviceconsumermanagement/v1/serviceconsumermanagement-gen.go
+++ b/serviceconsumermanagement/v1/serviceconsumermanagement-gen.go
@@ -257,6 +257,83 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// ApplyTenantProjectConfigRequest: Request to apply configuration to an
+// existing tenant project.
+type ApplyTenantProjectConfigRequest struct {
+	// ProjectConfig: Configuration that should be applied to the existing
+	// tenant project.
+	ProjectConfig *TenantProjectConfig `json:"projectConfig,omitempty"`
+
+	// Tag: Tag of the project. Must be less than 128 characters. Required.
+	Tag string `json:"tag,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ProjectConfig") 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. "ProjectConfig") 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 *ApplyTenantProjectConfigRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod ApplyTenantProjectConfigRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// AttachTenantProjectRequest: Request to attach an existing project to
+// the tenancy unit as a new tenant
+// resource.
+type AttachTenantProjectRequest struct {
+	// ExternalResource: When attaching an external project, this is in the
+	// format of
+	// `projects/{project_number}’.
+	ExternalResource string `json:"externalResource,omitempty"`
+
+	// ReservedResource: When attaching a reserved project already in
+	// Tenancy Units, this is the
+	// tag of tenant resource under the tenancy unit for the service's
+	// producer
+	// project. The reserved tenant resource must be in active state.
+	ReservedResource string `json:"reservedResource,omitempty"`
+
+	// Tag: Tag of the tenant resource after attachment.
+	// Must be less than 128 characters. Required.
+	Tag string `json:"tag,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ExternalResource") 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. "ExternalResource") 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 *AttachTenantProjectRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod AttachTenantProjectRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // AuthProvider: Configuration for an anthentication provider, including
 // support for
 // [JSON Web Token
@@ -5576,6 +5653,323 @@
 
 }
 
+// method id "serviceconsumermanagement.services.tenancyUnits.applyProjectConfig":
+
+type ServicesTenancyUnitsApplyProjectConfigCall struct {
+	s                               *APIService
+	name                            string
+	applytenantprojectconfigrequest *ApplyTenantProjectConfigRequest
+	urlParams_                      gensupport.URLParams
+	ctx_                            context.Context
+	header_                         http.Header
+}
+
+// ApplyProjectConfig: Apply configuration to an existing tenant
+// project.
+// This project must exist in active state and have the original
+// owner
+// account. Caller must have the permission to add a project to the
+// given
+// tenancy unit. Configuration will be applied, but any existing
+// settings on
+// the project will not be modified.
+// Specified policy bindings will be applied. Existing binding will not
+// be
+// modified.
+// Specified services will be activated.   No service will be
+// deactivated.
+// New billing configuration will be applied if specified.
+// Omit billing configuration to keep the existing one.
+// Service account in the project will be created if previously non
+// existing.
+// Operation fails if any of the steps fail, but no rollback of
+// already
+// applied configuration changes is attempted.
+// Operation<response: Empty>.
+func (r *ServicesTenancyUnitsService) ApplyProjectConfig(name string, applytenantprojectconfigrequest *ApplyTenantProjectConfigRequest) *ServicesTenancyUnitsApplyProjectConfigCall {
+	c := &ServicesTenancyUnitsApplyProjectConfigCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	c.applytenantprojectconfigrequest = applytenantprojectconfigrequest
+	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 *ServicesTenancyUnitsApplyProjectConfigCall) Fields(s ...googleapi.Field) *ServicesTenancyUnitsApplyProjectConfigCall {
+	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 *ServicesTenancyUnitsApplyProjectConfigCall) Context(ctx context.Context) *ServicesTenancyUnitsApplyProjectConfigCall {
+	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 *ServicesTenancyUnitsApplyProjectConfigCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ServicesTenancyUnitsApplyProjectConfigCall) 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.applytenantprojectconfigrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}:applyProjectConfig")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "serviceconsumermanagement.services.tenancyUnits.applyProjectConfig" 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 *ServicesTenancyUnitsApplyProjectConfigCall) 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 := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Apply configuration to an existing tenant project.\nThis project must exist in active state and have the original owner\naccount. Caller must have the permission to add a project to the given\ntenancy unit. Configuration will be applied, but any existing settings on\nthe project will not be modified.\nSpecified policy bindings will be applied. Existing binding will not be\nmodified.\nSpecified services will be activated.   No service will be deactivated.\nNew billing configuration will be applied if specified.\nOmit billing configuration to keep the existing one.\nService account in the project will be created if previously non existing.\nOperation fails if any of the steps fail, but no rollback of already\napplied configuration changes is attempted.\nOperation\u003cresponse: Empty\u003e.",
+	//   "flatPath": "v1/services/{servicesId}/{servicesId1}/{servicesId2}/tenancyUnits/{tenancyUnitsId}:applyProjectConfig",
+	//   "httpMethod": "POST",
+	//   "id": "serviceconsumermanagement.services.tenancyUnits.applyProjectConfig",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Name of the tenancy unit.",
+	//       "location": "path",
+	//       "pattern": "^services/[^/]+/[^/]+/[^/]+/tenancyUnits/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}:applyProjectConfig",
+	//   "request": {
+	//     "$ref": "ApplyTenantProjectConfigRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "serviceconsumermanagement.services.tenancyUnits.attachProject":
+
+type ServicesTenancyUnitsAttachProjectCall struct {
+	s                          *APIService
+	name                       string
+	attachtenantprojectrequest *AttachTenantProjectRequest
+	urlParams_                 gensupport.URLParams
+	ctx_                       context.Context
+	header_                    http.Header
+}
+
+// AttachProject: Attach an existing project to the tenancy unit as a
+// new tenant
+// resource. The project could be either the tenant project reserved
+// by
+// calling AddTenantProject under tenancy unit for the producer project
+// of
+// service, or from outside.
+// Caller will be checked against the permission as if
+// calling
+// AddTenantProject on the same consumer.
+// To trigger the attachement, the targeted tenant project must be in
+// a
+// folder. Please also make sure ServiceConsumerManagement service
+// account is
+// the owner of that project. Note that these two requirements are
+// already met
+// if the project is reserved through
+// AddTenantProject.
+// Operation<response: Empty>.
+func (r *ServicesTenancyUnitsService) AttachProject(name string, attachtenantprojectrequest *AttachTenantProjectRequest) *ServicesTenancyUnitsAttachProjectCall {
+	c := &ServicesTenancyUnitsAttachProjectCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	c.attachtenantprojectrequest = attachtenantprojectrequest
+	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 *ServicesTenancyUnitsAttachProjectCall) Fields(s ...googleapi.Field) *ServicesTenancyUnitsAttachProjectCall {
+	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 *ServicesTenancyUnitsAttachProjectCall) Context(ctx context.Context) *ServicesTenancyUnitsAttachProjectCall {
+	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 *ServicesTenancyUnitsAttachProjectCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ServicesTenancyUnitsAttachProjectCall) 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.attachtenantprojectrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}:attachProject")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "serviceconsumermanagement.services.tenancyUnits.attachProject" 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 *ServicesTenancyUnitsAttachProjectCall) 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 := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Attach an existing project to the tenancy unit as a new tenant\nresource. The project could be either the tenant project reserved by\ncalling AddTenantProject under tenancy unit for the producer project of\nservice, or from outside.\nCaller will be checked against the permission as if calling\nAddTenantProject on the same consumer.\nTo trigger the attachement, the targeted tenant project must be in a\nfolder. Please also make sure ServiceConsumerManagement service account is\nthe owner of that project. Note that these two requirements are already met\nif the project is reserved through AddTenantProject.\nOperation\u003cresponse: Empty\u003e.",
+	//   "flatPath": "v1/services/{servicesId}/{servicesId1}/{servicesId2}/tenancyUnits/{tenancyUnitsId}:attachProject",
+	//   "httpMethod": "POST",
+	//   "id": "serviceconsumermanagement.services.tenancyUnits.attachProject",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Name of the tenancy unit that project will be attached to.",
+	//       "location": "path",
+	//       "pattern": "^services/[^/]+/[^/]+/[^/]+/tenancyUnits/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}:attachProject",
+	//   "request": {
+	//     "$ref": "AttachTenantProjectRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
 // method id "serviceconsumermanagement.services.tenancyUnits.create":
 
 type ServicesTenancyUnitsCreateCall struct {
diff --git a/servicemanagement/v1/servicemanagement-api.json b/servicemanagement/v1/servicemanagement-api.json
index bfcf66c..1a80343 100644
--- a/servicemanagement/v1/servicemanagement-api.json
+++ b/servicemanagement/v1/servicemanagement-api.json
@@ -876,7 +876,7 @@
       }
     }
   },
-  "revision": "20181005",
+  "revision": "20181112",
   "rootUrl": "https://servicemanagement.googleapis.com/",
   "schemas": {
     "Advice": {
@@ -1122,6 +1122,11 @@
           "format": "double",
           "type": "number"
         },
+        "operationDeadline": {
+          "description": "The number of seconds to wait for the completion of a long running\noperation. The default is no deadline.",
+          "format": "double",
+          "type": "number"
+        },
         "selector": {
           "description": "Selects the methods to which this rule applies.\n\nRefer to selector for syntax details.",
           "type": "string"
diff --git a/servicemanagement/v1/servicemanagement-gen.go b/servicemanagement/v1/servicemanagement-gen.go
index 631dc05..5302940 100644
--- a/servicemanagement/v1/servicemanagement-gen.go
+++ b/servicemanagement/v1/servicemanagement-gen.go
@@ -785,6 +785,11 @@
 	// value lower than this will be rejected.
 	MinDeadline float64 `json:"minDeadline,omitempty"`
 
+	// OperationDeadline: The number of seconds to wait for the completion
+	// of a long running
+	// operation. The default is no deadline.
+	OperationDeadline float64 `json:"operationDeadline,omitempty"`
+
 	// Selector: Selects the methods to which this rule applies.
 	//
 	// Refer to selector for syntax details.
@@ -816,8 +821,9 @@
 func (s *BackendRule) UnmarshalJSON(data []byte) error {
 	type NoMethod BackendRule
 	var s1 struct {
-		Deadline    gensupport.JSONFloat64 `json:"deadline"`
-		MinDeadline gensupport.JSONFloat64 `json:"minDeadline"`
+		Deadline          gensupport.JSONFloat64 `json:"deadline"`
+		MinDeadline       gensupport.JSONFloat64 `json:"minDeadline"`
+		OperationDeadline gensupport.JSONFloat64 `json:"operationDeadline"`
 		*NoMethod
 	}
 	s1.NoMethod = (*NoMethod)(s)
@@ -826,6 +832,7 @@
 	}
 	s.Deadline = float64(s1.Deadline)
 	s.MinDeadline = float64(s1.MinDeadline)
+	s.OperationDeadline = float64(s1.OperationDeadline)
 	return nil
 }
 
diff --git a/servicenetworking/v1beta/servicenetworking-api.json b/servicenetworking/v1beta/servicenetworking-api.json
index 68a21ff..bc04848 100644
--- a/servicenetworking/v1beta/servicenetworking-api.json
+++ b/servicenetworking/v1beta/servicenetworking-api.json
@@ -167,6 +167,46 @@
             "https://www.googleapis.com/auth/cloud-platform",
             "https://www.googleapis.com/auth/service.management"
           ]
+        },
+        "patch": {
+          "description": "Allocated ranges specified for the connection may be updated.\nOperation\u003cresponse: Connection\u003e.",
+          "flatPath": "v1beta/services/{servicesId}",
+          "httpMethod": "PATCH",
+          "id": "servicenetworking.services.patch",
+          "parameterOrder": [
+            "name"
+          ],
+          "parameters": {
+            "force": {
+              "description": "If a previously defined allocated range is removed, force flag must be\nset to true.",
+              "location": "query",
+              "type": "boolean"
+            },
+            "name": {
+              "description": "Provider peering service that is managing peering connectivity for a\nservice provider organization.\nFor Google services that support this functionality it is\n'services/servicenetworking.googleapis.com'.",
+              "location": "path",
+              "pattern": "^services/[^/]+$",
+              "required": true,
+              "type": "string"
+            },
+            "updateMask": {
+              "description": "The update mask. If this is omitted, it defaults to \"*\".   Only reserved\npeering ranges list may be updated.",
+              "format": "google-fieldmask",
+              "location": "query",
+              "type": "string"
+            }
+          },
+          "path": "v1beta/{+name}",
+          "request": {
+            "$ref": "Connection"
+          },
+          "response": {
+            "$ref": "Operation"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/service.management"
+          ]
         }
       },
       "resources": {
@@ -216,7 +256,7 @@
                   "type": "string"
                 },
                 "parent": {
-                  "description": "Provider peering service that is managing peering connectivity for a\nservice provider organization.\nFor Google services that support this functionality it is\n'services/servicenetworking.googleapis.com'.",
+                  "description": "Provider peering service that is managing peering connectivity for a\nservice provider organization.\nFor Google services that support this functionality it is\n'services/servicenetworking.googleapis.com'.\nFor \"-\" all configured public peering services will be queried.",
                   "location": "path",
                   "pattern": "^services/[^/]+$",
                   "required": true,
@@ -237,7 +277,7 @@
       }
     }
   },
-  "revision": "20181105",
+  "revision": "20181128",
   "rootUrl": "https://servicenetworking.googleapis.com/",
   "schemas": {
     "AddSubnetworkRequest": {
@@ -529,6 +569,10 @@
             "type": "string"
           },
           "type": "array"
+        },
+        "service": {
+          "description": "Output only.\nName of the peering service associated with this connection.\n\"services/{service name}",
+          "type": "string"
         }
       },
       "type": "object"
diff --git a/servicenetworking/v1beta/servicenetworking-gen.go b/servicenetworking/v1beta/servicenetworking-gen.go
index 6c89569..9b5d7db 100644
--- a/servicenetworking/v1beta/servicenetworking-gen.go
+++ b/servicenetworking/v1beta/servicenetworking-gen.go
@@ -827,6 +827,12 @@
 	// producer subnetworks.
 	ReservedPeeringRanges []string `json:"reservedPeeringRanges,omitempty"`
 
+	// Service: Output only.
+	// Name of the peering service associated with this
+	// connection.
+	// "services/{service name}
+	Service string `json:"service,omitempty"`
+
 	// ForceSendFields is a list of field names (e.g. "Network") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
@@ -4507,6 +4513,175 @@
 
 }
 
+// method id "servicenetworking.services.patch":
+
+type ServicesPatchCall struct {
+	s          *APIService
+	name       string
+	connection *Connection
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// Patch: Allocated ranges specified for the connection may be
+// updated.
+// Operation<response: Connection>.
+func (r *ServicesService) Patch(name string, connection *Connection) *ServicesPatchCall {
+	c := &ServicesPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	c.connection = connection
+	return c
+}
+
+// Force sets the optional parameter "force": If a previously defined
+// allocated range is removed, force flag must be
+// set to true.
+func (c *ServicesPatchCall) Force(force bool) *ServicesPatchCall {
+	c.urlParams_.Set("force", fmt.Sprint(force))
+	return c
+}
+
+// UpdateMask sets the optional parameter "updateMask": The update mask.
+// If this is omitted, it defaults to "*".   Only reserved
+// peering ranges list may be updated.
+func (c *ServicesPatchCall) UpdateMask(updateMask string) *ServicesPatchCall {
+	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 *ServicesPatchCall) Fields(s ...googleapi.Field) *ServicesPatchCall {
+	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 *ServicesPatchCall) Context(ctx context.Context) *ServicesPatchCall {
+	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 *ServicesPatchCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ServicesPatchCall) 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.connection)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("PATCH", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "servicenetworking.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 *ServicesPatchCall) 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 := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Allocated ranges specified for the connection may be updated.\nOperation\u003cresponse: Connection\u003e.",
+	//   "flatPath": "v1beta/services/{servicesId}",
+	//   "httpMethod": "PATCH",
+	//   "id": "servicenetworking.services.patch",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "force": {
+	//       "description": "If a previously defined allocated range is removed, force flag must be\nset to true.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     },
+	//     "name": {
+	//       "description": "Provider peering service that is managing peering connectivity for a\nservice provider organization.\nFor Google services that support this functionality it is\n'services/servicenetworking.googleapis.com'.",
+	//       "location": "path",
+	//       "pattern": "^services/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "updateMask": {
+	//       "description": "The update mask. If this is omitted, it defaults to \"*\".   Only reserved\npeering ranges list may be updated.",
+	//       "format": "google-fieldmask",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta/{+name}",
+	//   "request": {
+	//     "$ref": "Connection"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/service.management"
+	//   ]
+	// }
+
+}
+
 // method id "servicenetworking.services.connections.create":
 
 type ServicesConnectionsCreateCall struct {
@@ -4807,7 +4982,7 @@
 	//       "type": "string"
 	//     },
 	//     "parent": {
-	//       "description": "Provider peering service that is managing peering connectivity for a\nservice provider organization.\nFor Google services that support this functionality it is\n'services/servicenetworking.googleapis.com'.",
+	//       "description": "Provider peering service that is managing peering connectivity for a\nservice provider organization.\nFor Google services that support this functionality it is\n'services/servicenetworking.googleapis.com'.\nFor \"-\" all configured public peering services will be queried.",
 	//       "location": "path",
 	//       "pattern": "^services/[^/]+$",
 	//       "required": true,
diff --git a/sheets/v4/sheets-api.json b/sheets/v4/sheets-api.json
index e1db22a..d054a8a 100644
--- a/sheets/v4/sheets-api.json
+++ b/sheets/v4/sheets-api.json
@@ -3,16 +3,16 @@
     "oauth2": {
       "scopes": {
         "https://www.googleapis.com/auth/drive": {
-          "description": "View and manage the files in your Google Drive"
+          "description": "See, edit, create, and delete all of your Google Drive files"
         },
         "https://www.googleapis.com/auth/drive.file": {
           "description": "View and manage Google Drive files and folders that you have opened or created with this app"
         },
         "https://www.googleapis.com/auth/drive.readonly": {
-          "description": "View the files in your Google Drive"
+          "description": "See and download all your Google Drive files"
         },
         "https://www.googleapis.com/auth/spreadsheets": {
-          "description": "View and manage your spreadsheets in Google Drive"
+          "description": "See, edit, create, and delete your spreadsheets in Google Drive"
         },
         "https://www.googleapis.com/auth/spreadsheets.readonly": {
           "description": "View your Google Spreadsheets"
@@ -808,7 +808,7 @@
       }
     }
   },
-  "revision": "20180727",
+  "revision": "20181116",
   "rootUrl": "https://sheets.googleapis.com/",
   "schemas": {
     "AddBandingRequest": {
diff --git a/sheets/v4/sheets-gen.go b/sheets/v4/sheets-gen.go
index 930a681..6a48e11 100644
--- a/sheets/v4/sheets-gen.go
+++ b/sheets/v4/sheets-gen.go
@@ -62,17 +62,17 @@
 
 // OAuth2 scopes used by this API.
 const (
-	// View and manage the files in your Google Drive
+	// See, edit, create, and delete all of your Google Drive files
 	DriveScope = "https://www.googleapis.com/auth/drive"
 
 	// View and manage Google Drive files and folders that you have opened
 	// or created with this app
 	DriveFileScope = "https://www.googleapis.com/auth/drive.file"
 
-	// View the files in your Google Drive
+	// See and download all your Google Drive files
 	DriveReadonlyScope = "https://www.googleapis.com/auth/drive.readonly"
 
-	// View and manage your spreadsheets in Google Drive
+	// See, edit, create, and delete your spreadsheets in Google Drive
 	SpreadsheetsScope = "https://www.googleapis.com/auth/spreadsheets"
 
 	// View your Google Spreadsheets
diff --git a/slides/v1/slides-api.json b/slides/v1/slides-api.json
index bb8d647..20aa9ec 100644
--- a/slides/v1/slides-api.json
+++ b/slides/v1/slides-api.json
@@ -3,13 +3,13 @@
     "oauth2": {
       "scopes": {
         "https://www.googleapis.com/auth/drive": {
-          "description": "View and manage the files in your Google Drive"
+          "description": "See, edit, create, and delete all of your Google Drive files"
         },
         "https://www.googleapis.com/auth/drive.file": {
           "description": "View and manage Google Drive files and folders that you have opened or created with this app"
         },
         "https://www.googleapis.com/auth/drive.readonly": {
-          "description": "View the files in your Google Drive"
+          "description": "See and download all your Google Drive files"
         },
         "https://www.googleapis.com/auth/presentations": {
           "description": "View and manage your Google Slides presentations"
@@ -18,7 +18,7 @@
           "description": "View your Google Slides presentations"
         },
         "https://www.googleapis.com/auth/spreadsheets": {
-          "description": "View and manage your spreadsheets in Google Drive"
+          "description": "See, edit, create, and delete your spreadsheets in Google Drive"
         },
         "https://www.googleapis.com/auth/spreadsheets.readonly": {
           "description": "View your Google Spreadsheets"
@@ -302,7 +302,7 @@
       }
     }
   },
-  "revision": "20181030",
+  "revision": "20181116",
   "rootUrl": "https://slides.googleapis.com/",
   "schemas": {
     "AffineTransform": {
@@ -516,6 +516,22 @@
       "description": "Creates a line.",
       "id": "CreateLineRequest",
       "properties": {
+        "category": {
+          "description": "The category of line to be created.\n\nThe exact line type created is\ndetermined based on the category and how it's routed to connect to other\npage elements.\n\nIf you specify both a `category` and a `line_category`, the `category`\ntakes precedence.\n\nIf you do not specify a value for `category`, but specify a value for\n`line_category`, then the specified `line_category` value is used.\n\nIf you do not specify either, then STRAIGHT is used.",
+          "enum": [
+            "LINE_CATEGORY_UNSPECIFIED",
+            "STRAIGHT",
+            "BENT",
+            "CURVED"
+          ],
+          "enumDescriptions": [
+            "Unspecified line category.",
+            "Straight connectors, including straight connector 1.",
+            "Bent connectors, including bent connector 2 to 5.",
+            "Curved connectors, including curved connector 2 to 5."
+          ],
+          "type": "string"
+        },
         "elementProperties": {
           "$ref": "PageElementProperties",
           "description": "The element properties for the line."
@@ -1521,6 +1537,22 @@
       "description": "A PageElement kind representing a\nnon-connector line, straight connector, curved connector, or bent connector.",
       "id": "Line",
       "properties": {
+        "lineCategory": {
+          "description": "The category of the line.\n\nIt matches the `category` specified in CreateLineRequest, and can be updated with\nUpdateLineCategoryRequest.",
+          "enum": [
+            "LINE_CATEGORY_UNSPECIFIED",
+            "STRAIGHT",
+            "BENT",
+            "CURVED"
+          ],
+          "enumDescriptions": [
+            "Unspecified line category.",
+            "Straight connectors, including straight connector 1.",
+            "Bent connectors, including bent connector 2 to 5.",
+            "Curved connectors, including curved connector 2 to 5."
+          ],
+          "type": "string"
+        },
         "lineProperties": {
           "$ref": "LineProperties",
           "description": "The properties of the line."
@@ -1558,6 +1590,22 @@
       },
       "type": "object"
     },
+    "LineConnection": {
+      "description": "The properties for one end of a Line\nconnection.",
+      "id": "LineConnection",
+      "properties": {
+        "connectedObjectId": {
+          "description": "The object ID of the connected page element.\n\nSome page elements, such as groups, tables, and lines\ndo not have connection sites and therefore cannot be connected to a\nconnector line.",
+          "type": "string"
+        },
+        "connectionSiteIndex": {
+          "description": "The index of the connection site on the connected page element.\n\nIn most cases, it corresponds to the predefined connection site index from\nthe ECMA-376 standard. More information on those connection sites can be\nfound in the description of the \"cnx\" attribute in section 20.1.9.9 and\nAnnex H. \"Predefined DrawingML Shape and Text Geometries\" of \"Office Open\nXML File Formats-Fundamentals and Markup Language Reference\", part 1 of\n[ECMA-376 5th edition]\n(http://www.ecma-international.org/publications/standards/Ecma-376.htm).\n\nThe position of each connection site can also be viewed from Slides editor.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "type": "object"
+    },
     "LineFill": {
       "description": "The fill of the line.",
       "id": "LineFill",
@@ -1625,6 +1673,10 @@
           ],
           "type": "string"
         },
+        "endConnection": {
+          "$ref": "LineConnection",
+          "description": "The connection at the end of the line. If unset, there is no connection.\n\nOnly lines with a Type indicating it is\na \"connector\" can have an `end_connection`."
+        },
         "lineFill": {
           "$ref": "LineFill",
           "description": "The fill of the line. The default line fill matches the defaults for new\nlines created in the Slides editor."
@@ -1663,6 +1715,10 @@
           ],
           "type": "string"
         },
+        "startConnection": {
+          "$ref": "LineConnection",
+          "description": "The connection at the beginning of the line. If unset, there is no\nconnection.\n\nOnly lines with a Type indicating it is\na \"connector\" can have a `start_connection`."
+        },
         "weight": {
           "$ref": "Dimension",
           "description": "The thickness of the line."
@@ -2675,6 +2731,10 @@
           "$ref": "ReplaceImageRequest",
           "description": "Replaces an existing image with a new image."
         },
+        "rerouteLine": {
+          "$ref": "RerouteLineRequest",
+          "description": "Reroutes a line such that it's connected\nat the two closest connection sites on the connected page elements."
+        },
         "ungroupObjects": {
           "$ref": "UngroupObjectsRequest",
           "description": "Ungroups objects, such as groups."
@@ -2687,6 +2747,10 @@
           "$ref": "UpdateImagePropertiesRequest",
           "description": "Updates the properties of an Image."
         },
+        "updateLineCategory": {
+          "$ref": "UpdateLineCategoryRequest",
+          "description": "Updates the category of a line"
+        },
         "updateLineProperties": {
           "$ref": "UpdateLinePropertiesRequest",
           "description": "Updates the properties of a Line."
@@ -2699,6 +2763,10 @@
           "$ref": "UpdatePageElementTransformRequest",
           "description": "Updates the transform of a page element."
         },
+        "updatePageElementsZOrder": {
+          "$ref": "UpdatePageElementsZOrderRequest",
+          "description": "Updates the Z-order of page elements."
+        },
         "updatePageProperties": {
           "$ref": "UpdatePagePropertiesRequest",
           "description": "Updates the properties of a Page."
@@ -2742,6 +2810,17 @@
       },
       "type": "object"
     },
+    "RerouteLineRequest": {
+      "description": "Reroutes a line such that it's connected at the\ntwo closest connection sites on the connected page elements.",
+      "id": "RerouteLineRequest",
+      "properties": {
+        "objectId": {
+          "description": "The object ID of the line to reroute.\n\nOnly a line with a category\nindicating it is a \"connector\" can be rerouted. The start and end\nconnections of the line must be on different page elements.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "Response": {
       "description": "A single response from an update.",
       "id": "Response",
@@ -3937,6 +4016,33 @@
       },
       "type": "object"
     },
+    "UpdateLineCategoryRequest": {
+      "description": "Updates the category of a line.",
+      "id": "UpdateLineCategoryRequest",
+      "properties": {
+        "lineCategory": {
+          "description": "The line category to update to.\n\nThe exact line type is determined based\non the category to update to and how it's routed to connect to other page\nelements.",
+          "enum": [
+            "LINE_CATEGORY_UNSPECIFIED",
+            "STRAIGHT",
+            "BENT",
+            "CURVED"
+          ],
+          "enumDescriptions": [
+            "Unspecified line category.",
+            "Straight connectors, including straight connector 1.",
+            "Bent connectors, including bent connector 2 to 5.",
+            "Curved connectors, including curved connector 2 to 5."
+          ],
+          "type": "string"
+        },
+        "objectId": {
+          "description": "The object ID of the line the update is applied to.\n\nOnly a line with a category\nindicating it is a \"connector\" can be updated.\n\nThe line may be rerouted after updating its category.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "UpdateLinePropertiesRequest": {
       "description": "Updates the properties of a Line.",
       "id": "UpdateLinePropertiesRequest",
@@ -4005,6 +4111,38 @@
       },
       "type": "object"
     },
+    "UpdatePageElementsZOrderRequest": {
+      "description": "Updates the Z-order of page elements. Z-order is an ordering of the elements\non the page from back to front. The page element in the front may cover the\nelements that are behind it.",
+      "id": "UpdatePageElementsZOrderRequest",
+      "properties": {
+        "operation": {
+          "description": "The Z-order operation to apply on the page elements.\n\nWhen applying the operation on multiple page elements, the relative\nZ-orders within these page elements before the operation is maintained.",
+          "enum": [
+            "Z_ORDER_OPERATION_UNSPECIFIED",
+            "BRING_TO_FRONT",
+            "BRING_FORWARD",
+            "SEND_BACKWARD",
+            "SEND_TO_BACK"
+          ],
+          "enumDescriptions": [
+            "Unspecified operation.",
+            "Brings the page elements to the front of the page.",
+            "Brings the page elements forward on the page by one element relative to the\nforwardmost one in the specified page elements.",
+            "Sends the page elements backward on the page by one element relative to the\nfurthest behind one in the specified page elements.",
+            "Sends the page elements to the back of the page."
+          ],
+          "type": "string"
+        },
+        "pageElementObjectIds": {
+          "description": "The object IDs of the page elements to update.\n\nAll the page elements must be on the same page and must not be grouped.",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
     "UpdatePagePropertiesRequest": {
       "description": "Updates the properties of a Page.",
       "id": "UpdatePagePropertiesRequest",
diff --git a/slides/v1/slides-gen.go b/slides/v1/slides-gen.go
index 189cdaa..b39a5f4 100644
--- a/slides/v1/slides-gen.go
+++ b/slides/v1/slides-gen.go
@@ -62,14 +62,14 @@
 
 // OAuth2 scopes used by this API.
 const (
-	// View and manage the files in your Google Drive
+	// See, edit, create, and delete all of your Google Drive files
 	DriveScope = "https://www.googleapis.com/auth/drive"
 
 	// View and manage Google Drive files and folders that you have opened
 	// or created with this app
 	DriveFileScope = "https://www.googleapis.com/auth/drive.file"
 
-	// View the files in your Google Drive
+	// See and download all your Google Drive files
 	DriveReadonlyScope = "https://www.googleapis.com/auth/drive.readonly"
 
 	// View and manage your Google Slides presentations
@@ -78,7 +78,7 @@
 	// View your Google Slides presentations
 	PresentationsReadonlyScope = "https://www.googleapis.com/auth/presentations.readonly"
 
-	// View and manage your spreadsheets in Google Drive
+	// See, edit, create, and delete your spreadsheets in Google Drive
 	SpreadsheetsScope = "https://www.googleapis.com/auth/spreadsheets"
 
 	// View your Google Spreadsheets
@@ -561,6 +561,31 @@
 
 // CreateLineRequest: Creates a line.
 type CreateLineRequest struct {
+	// Category: The category of line to be created.
+	//
+	// The exact line type created is
+	// determined based on the category and how it's routed to connect to
+	// other
+	// page elements.
+	//
+	// If you specify both a `category` and a `line_category`, the
+	// `category`
+	// takes precedence.
+	//
+	// If you do not specify a value for `category`, but specify a value
+	// for
+	// `line_category`, then the specified `line_category` value is
+	// used.
+	//
+	// If you do not specify either, then STRAIGHT is used.
+	//
+	// Possible values:
+	//   "LINE_CATEGORY_UNSPECIFIED" - Unspecified line category.
+	//   "STRAIGHT" - Straight connectors, including straight connector 1.
+	//   "BENT" - Bent connectors, including bent connector 2 to 5.
+	//   "CURVED" - Curved connectors, including curved connector 2 to 5.
+	Category string `json:"category,omitempty"`
+
 	// ElementProperties: The element properties for the line.
 	ElementProperties *PageElementProperties `json:"elementProperties,omitempty"`
 
@@ -589,21 +614,20 @@
 	// If you don't specify an ID, a unique one is generated.
 	ObjectId string `json:"objectId,omitempty"`
 
-	// ForceSendFields is a list of field names (e.g. "ElementProperties")
-	// to unconditionally include in API requests. By default, fields with
+	// ForceSendFields is a list of field names (e.g. "Category") 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. "ElementProperties") 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 is a list of field names (e.g. "Category") 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:"-"`
 }
 
@@ -2573,6 +2597,19 @@
 // non-connector line, straight connector, curved connector, or bent
 // connector.
 type Line struct {
+	// LineCategory: The category of the line.
+	//
+	// It matches the `category` specified in CreateLineRequest, and can be
+	// updated with
+	// UpdateLineCategoryRequest.
+	//
+	// Possible values:
+	//   "LINE_CATEGORY_UNSPECIFIED" - Unspecified line category.
+	//   "STRAIGHT" - Straight connectors, including straight connector 1.
+	//   "BENT" - Bent connectors, including bent connector 2 to 5.
+	//   "CURVED" - Curved connectors, including curved connector 2 to 5.
+	LineCategory string `json:"lineCategory,omitempty"`
+
 	// LineProperties: The properties of the line.
 	LineProperties *LineProperties `json:"lineProperties,omitempty"`
 
@@ -2612,7 +2649,7 @@
 	// type is not a connector.
 	LineType string `json:"lineType,omitempty"`
 
-	// ForceSendFields is a list of field names (e.g. "LineProperties") to
+	// ForceSendFields is a list of field names (e.g. "LineCategory") 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
@@ -2620,7 +2657,63 @@
 	// used to include empty fields in Patch requests.
 	ForceSendFields []string `json:"-"`
 
-	// NullFields is a list of field names (e.g. "LineProperties") to
+	// NullFields is a list of field names (e.g. "LineCategory") 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 *Line) MarshalJSON() ([]byte, error) {
+	type NoMethod Line
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// LineConnection: The properties for one end of a Line
+// connection.
+type LineConnection struct {
+	// ConnectedObjectId: The object ID of the connected page element.
+	//
+	// Some page elements, such as groups, tables, and lines
+	// do not have connection sites and therefore cannot be connected to
+	// a
+	// connector line.
+	ConnectedObjectId string `json:"connectedObjectId,omitempty"`
+
+	// ConnectionSiteIndex: The index of the connection site on the
+	// connected page element.
+	//
+	// In most cases, it corresponds to the predefined connection site index
+	// from
+	// the ECMA-376 standard. More information on those connection sites can
+	// be
+	// found in the description of the "cnx" attribute in section 20.1.9.9
+	// and
+	// Annex H. "Predefined DrawingML Shape and Text Geometries" of "Office
+	// Open
+	// XML File Formats-Fundamentals and Markup Language Reference", part 1
+	// of
+	// [ECMA-376 5th
+	// edition]
+	// (http://www.ecma-international.org/publications/standards/Ecm
+	// a-376.htm).
+	//
+	// The position of each connection site can also be viewed from Slides
+	// editor.
+	ConnectionSiteIndex int64 `json:"connectionSiteIndex,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ConnectedObjectId")
+	// 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. "ConnectedObjectId") 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
@@ -2630,8 +2723,8 @@
 	NullFields []string `json:"-"`
 }
 
-func (s *Line) MarshalJSON() ([]byte, error) {
-	type NoMethod Line
+func (s *LineConnection) MarshalJSON() ([]byte, error) {
+	type NoMethod LineConnection
 	raw := NoMethod(*s)
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
@@ -2713,6 +2806,13 @@
 	//   "OPEN_DIAMOND" - Hollow diamond.
 	EndArrow string `json:"endArrow,omitempty"`
 
+	// EndConnection: The connection at the end of the line. If unset, there
+	// is no connection.
+	//
+	// Only lines with a Type indicating it is
+	// a "connector" can have an `end_connection`.
+	EndConnection *LineConnection `json:"endConnection,omitempty"`
+
 	// LineFill: The fill of the line. The default line fill matches the
 	// defaults for new
 	// lines created in the Slides editor.
@@ -2743,6 +2843,14 @@
 	//   "OPEN_DIAMOND" - Hollow diamond.
 	StartArrow string `json:"startArrow,omitempty"`
 
+	// StartConnection: The connection at the beginning of the line. If
+	// unset, there is no
+	// connection.
+	//
+	// Only lines with a Type indicating it is
+	// a "connector" can have a `start_connection`.
+	StartConnection *LineConnection `json:"startConnection,omitempty"`
+
 	// Weight: The thickness of the line.
 	Weight *Dimension `json:"weight,omitempty"`
 
@@ -4534,6 +4642,10 @@
 	// ReplaceImage: Replaces an existing image with a new image.
 	ReplaceImage *ReplaceImageRequest `json:"replaceImage,omitempty"`
 
+	// RerouteLine: Reroutes a line such that it's connected
+	// at the two closest connection sites on the connected page elements.
+	RerouteLine *RerouteLineRequest `json:"rerouteLine,omitempty"`
+
 	// UngroupObjects: Ungroups objects, such as groups.
 	UngroupObjects *UngroupObjectsRequest `json:"ungroupObjects,omitempty"`
 
@@ -4543,6 +4655,9 @@
 	// UpdateImageProperties: Updates the properties of an Image.
 	UpdateImageProperties *UpdateImagePropertiesRequest `json:"updateImageProperties,omitempty"`
 
+	// UpdateLineCategory: Updates the category of a line
+	UpdateLineCategory *UpdateLineCategoryRequest `json:"updateLineCategory,omitempty"`
+
 	// UpdateLineProperties: Updates the properties of a Line.
 	UpdateLineProperties *UpdateLinePropertiesRequest `json:"updateLineProperties,omitempty"`
 
@@ -4554,6 +4669,9 @@
 	// UpdatePageElementTransform: Updates the transform of a page element.
 	UpdatePageElementTransform *UpdatePageElementTransformRequest `json:"updatePageElementTransform,omitempty"`
 
+	// UpdatePageElementsZOrder: Updates the Z-order of page elements.
+	UpdatePageElementsZOrder *UpdatePageElementsZOrderRequest `json:"updatePageElementsZOrder,omitempty"`
+
 	// UpdatePageProperties: Updates the properties of a Page.
 	UpdatePageProperties *UpdatePagePropertiesRequest `json:"updatePageProperties,omitempty"`
 
@@ -4612,6 +4730,41 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// RerouteLineRequest: Reroutes a line such that it's connected at
+// the
+// two closest connection sites on the connected page elements.
+type RerouteLineRequest struct {
+	// ObjectId: The object ID of the line to reroute.
+	//
+	// Only a line with a category
+	// indicating it is a "connector" can be rerouted. The start and
+	// end
+	// connections of the line must be on different page elements.
+	ObjectId string `json:"objectId,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ObjectId") 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. "ObjectId") 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 *RerouteLineRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod RerouteLineRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // Response: A single response from an update.
 type Response struct {
 	// CreateImage: The result of creating an image.
@@ -6802,6 +6955,53 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// UpdateLineCategoryRequest: Updates the category of a line.
+type UpdateLineCategoryRequest struct {
+	// LineCategory: The line category to update to.
+	//
+	// The exact line type is determined based
+	// on the category to update to and how it's routed to connect to other
+	// page
+	// elements.
+	//
+	// Possible values:
+	//   "LINE_CATEGORY_UNSPECIFIED" - Unspecified line category.
+	//   "STRAIGHT" - Straight connectors, including straight connector 1.
+	//   "BENT" - Bent connectors, including bent connector 2 to 5.
+	//   "CURVED" - Curved connectors, including curved connector 2 to 5.
+	LineCategory string `json:"lineCategory,omitempty"`
+
+	// ObjectId: The object ID of the line the update is applied to.
+	//
+	// Only a line with a category
+	// indicating it is a "connector" can be updated.
+	//
+	// The line may be rerouted after updating its category.
+	ObjectId string `json:"objectId,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "LineCategory") 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. "LineCategory") 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 *UpdateLineCategoryRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod UpdateLineCategoryRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // UpdateLinePropertiesRequest: Updates the properties of a Line.
 type UpdateLinePropertiesRequest struct {
 	// Fields: The fields that should be updated.
@@ -6949,6 +7149,62 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// UpdatePageElementsZOrderRequest: Updates the Z-order of page
+// elements. Z-order is an ordering of the elements
+// on the page from back to front. The page element in the front may
+// cover the
+// elements that are behind it.
+type UpdatePageElementsZOrderRequest struct {
+	// Operation: The Z-order operation to apply on the page elements.
+	//
+	// When applying the operation on multiple page elements, the
+	// relative
+	// Z-orders within these page elements before the operation is
+	// maintained.
+	//
+	// Possible values:
+	//   "Z_ORDER_OPERATION_UNSPECIFIED" - Unspecified operation.
+	//   "BRING_TO_FRONT" - Brings the page elements to the front of the
+	// page.
+	//   "BRING_FORWARD" - Brings the page elements forward on the page by
+	// one element relative to the
+	// forwardmost one in the specified page elements.
+	//   "SEND_BACKWARD" - Sends the page elements backward on the page by
+	// one element relative to the
+	// furthest behind one in the specified page elements.
+	//   "SEND_TO_BACK" - Sends the page elements to the back of the page.
+	Operation string `json:"operation,omitempty"`
+
+	// PageElementObjectIds: The object IDs of the page elements to
+	// update.
+	//
+	// All the page elements must be on the same page and must not be
+	// grouped.
+	PageElementObjectIds []string `json:"pageElementObjectIds,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Operation") 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. "Operation") 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 *UpdatePageElementsZOrderRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod UpdatePageElementsZOrderRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // UpdatePagePropertiesRequest: Updates the properties of a Page.
 type UpdatePagePropertiesRequest struct {
 	// Fields: The fields that should be updated.
diff --git a/sourcerepo/v1/sourcerepo-api.json b/sourcerepo/v1/sourcerepo-api.json
index b0dc682..c4878bb 100644
--- a/sourcerepo/v1/sourcerepo-api.json
+++ b/sourcerepo/v1/sourcerepo-api.json
@@ -21,9 +21,10 @@
   "baseUrl": "https://sourcerepo.googleapis.com/",
   "batchPath": "batch",
   "canonicalName": "Cloud Source Repositories",
-  "description": "Access source code repositories hosted by Google.",
+  "description": "Accesses source code repositories hosted by Google.",
   "discoveryVersion": "v1",
   "documentationLink": "https://cloud.google.com/source-repositories/docs/apis",
+  "fullyEncodeReservedExpansion": true,
   "icons": {
     "x16": "http://www.google.com/images/icons/product/search-16.gif",
     "x32": "http://www.google.com/images/icons/product/search-32.gif"
@@ -414,7 +415,7 @@
       }
     }
   },
-  "revision": "20180718",
+  "revision": "20181106",
   "rootUrl": "https://sourcerepo.googleapis.com/",
   "schemas": {
     "AuditConfig": {
diff --git a/speech/v1p1beta1/speech-api.json b/speech/v1p1beta1/speech-api.json
new file mode 100644
index 0000000..4127f42
--- /dev/null
+++ b/speech/v1p1beta1/speech-api.json
@@ -0,0 +1,1235 @@
+{
+  "auth": {
+    "oauth2": {
+      "scopes": {
+        "https://www.googleapis.com/auth/cloud-platform": {
+          "description": "View and manage your data across Google Cloud Platform services"
+        }
+      }
+    }
+  },
+  "basePath": "",
+  "baseUrl": "https://speech.googleapis.com/",
+  "batchPath": "batch",
+  "canonicalName": "Speech",
+  "description": "Converts audio to text by applying powerful neural network models.",
+  "discoveryVersion": "v1",
+  "documentationLink": "https://cloud.google.com/speech-to-text/docs/quickstart-protocol",
+  "fullyEncodeReservedExpansion": true,
+  "icons": {
+    "x16": "http://www.google.com/images/icons/product/search-16.gif",
+    "x32": "http://www.google.com/images/icons/product/search-32.gif"
+  },
+  "id": "speech:v1p1beta1",
+  "kind": "discovery#restDescription",
+  "name": "speech",
+  "ownerDomain": "google.com",
+  "ownerName": "Google",
+  "parameters": {
+    "$.xgafv": {
+      "description": "V1 error format.",
+      "enum": [
+        "1",
+        "2"
+      ],
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
+      "location": "query",
+      "type": "string"
+    },
+    "access_token": {
+      "description": "OAuth access token.",
+      "location": "query",
+      "type": "string"
+    },
+    "alt": {
+      "default": "json",
+      "description": "Data format for response.",
+      "enum": [
+        "json",
+        "media",
+        "proto"
+      ],
+      "enumDescriptions": [
+        "Responses with Content-Type of application/json",
+        "Media download with context-dependent Content-Type",
+        "Responses with Content-Type of application/x-protobuf"
+      ],
+      "location": "query",
+      "type": "string"
+    },
+    "callback": {
+      "description": "JSONP",
+      "location": "query",
+      "type": "string"
+    },
+    "fields": {
+      "description": "Selector specifying which fields to include in a partial response.",
+      "location": "query",
+      "type": "string"
+    },
+    "key": {
+      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+      "location": "query",
+      "type": "string"
+    },
+    "oauth_token": {
+      "description": "OAuth 2.0 token for the current user.",
+      "location": "query",
+      "type": "string"
+    },
+    "prettyPrint": {
+      "default": "true",
+      "description": "Returns response with indentations and line breaks.",
+      "location": "query",
+      "type": "boolean"
+    },
+    "quotaUser": {
+      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+      "location": "query",
+      "type": "string"
+    },
+    "uploadType": {
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+      "location": "query",
+      "type": "string"
+    },
+    "upload_protocol": {
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "location": "query",
+      "type": "string"
+    }
+  },
+  "protocol": "rest",
+  "resources": {
+    "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.",
+          "flatPath": "v1p1beta1/operations/{operationsId}",
+          "httpMethod": "GET",
+          "id": "speech.operations.get",
+          "parameterOrder": [
+            "name"
+          ],
+          "parameters": {
+            "name": {
+              "description": "The name of the operation resource.",
+              "location": "path",
+              "pattern": "^[^/]+$",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "path": "v1p1beta1/operations/{+name}",
+          "response": {
+            "$ref": "Operation"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ]
+        }
+      }
+    },
+    "projects": {
+      "resources": {
+        "locations": {
+          "resources": {
+            "datasets": {
+              "methods": {
+                "create": {
+                  "description": "Performs asynchronous data upload for AutoML: receive results via the\ngoogle.longrunning.Operations interface. Returns either an\n`Operation.error` or an `Operation.response` which contains\na `Dataset` message.",
+                  "flatPath": "v1p1beta1/projects/{projectsId}/locations/{locationsId}/datasets",
+                  "httpMethod": "POST",
+                  "id": "speech.projects.locations.datasets.create",
+                  "parameterOrder": [
+                    "parent"
+                  ],
+                  "parameters": {
+                    "parent": {
+                      "description": "Required. Resource name of the parent. Has the format :-\n\"projects/{project_id}/locations/{location_id}\"",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1p1beta1/{+parent}/datasets",
+                  "request": {
+                    "$ref": "Dataset"
+                  },
+                  "response": {
+                    "$ref": "Operation"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ]
+                },
+                "get": {
+                  "description": "Get the dataset associated with the dataset resource.",
+                  "flatPath": "v1p1beta1/projects/{projectsId}/locations/{locationsId}/datasets/{datasetsId}",
+                  "httpMethod": "GET",
+                  "id": "speech.projects.locations.datasets.get",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "parameters": {
+                    "includeModelInfo": {
+                      "description": "If true then also include information about the models built using this\ndataset.",
+                      "location": "query",
+                      "type": "boolean"
+                    },
+                    "name": {
+                      "description": "The resource name of the dataset to retrieve. Form :-\n'/projects/{project_number}/locations/{location_id}/datasets/{dataset_id}'",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+/datasets/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1p1beta1/{+name}",
+                  "response": {
+                    "$ref": "Dataset"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ]
+                },
+                "list": {
+                  "description": "Fetch the list of dataset associated with this project.",
+                  "flatPath": "v1p1beta1/projects/{projectsId}/locations/{locationsId}/datasets",
+                  "httpMethod": "GET",
+                  "id": "speech.projects.locations.datasets.list",
+                  "parameterOrder": [
+                    "parent"
+                  ],
+                  "parameters": {
+                    "filter": {
+                      "description": "Filter the response based on display_name of the dataset. For e.g\ndisplay_name=Foo The filter string is case sensitive",
+                      "location": "query",
+                      "type": "string"
+                    },
+                    "includeModelInfo": {
+                      "description": "If true then also include information about the models built using the\ndatasets.",
+                      "location": "query",
+                      "type": "boolean"
+                    },
+                    "pageSize": {
+                      "description": "The maximum number of items to return.",
+                      "format": "int32",
+                      "location": "query",
+                      "type": "integer"
+                    },
+                    "pageToken": {
+                      "description": "The next_page_token value returned from a previous List request, if any.",
+                      "location": "query",
+                      "type": "string"
+                    },
+                    "parent": {
+                      "description": "Required. Resource name of the parent. Has the format :-\n\"projects/{project_id}/locations/{location_id}\"",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1p1beta1/{+parent}/datasets",
+                  "response": {
+                    "$ref": "ListDatasetsResponse"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ]
+                },
+                "refreshData": {
+                  "description": "Refresh data for a dataset.",
+                  "flatPath": "v1p1beta1/projects/{projectsId}/locations/{locationsId}/datasets/{datasetsId}:refreshData",
+                  "httpMethod": "POST",
+                  "id": "speech.projects.locations.datasets.refreshData",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "description": "The resource name of the destination dataset.",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+/datasets/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1p1beta1/{+name}:refreshData",
+                  "request": {
+                    "$ref": "RefreshDataRequest"
+                  },
+                  "response": {
+                    "$ref": "Operation"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ]
+                }
+              }
+            },
+            "log_data_stats": {
+              "methods": {
+                "list": {
+                  "description": "List all log data stats associated with this project.",
+                  "flatPath": "v1p1beta1/projects/{projectsId}/locations/{locationsId}/log_data_stats",
+                  "httpMethod": "GET",
+                  "id": "speech.projects.locations.log_data_stats.list",
+                  "parameterOrder": [
+                    "parent"
+                  ],
+                  "parameters": {
+                    "parent": {
+                      "description": "Required. Resource name of the parent. Has the format :-\n\"projects/{project_id}/locations/{location_id}\"",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1p1beta1/{+parent}/log_data_stats",
+                  "response": {
+                    "$ref": "ListLogDataStatsResponse"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ]
+                }
+              }
+            },
+            "models": {
+              "methods": {
+                "create": {
+                  "description": "Performs asynchronous model training for AutoML: receive results via the\ngoogle.longrunning.Operations interface. Returns either an\n`Operation.error` or an `Operation.response` which contains a `Model`\nmessage.",
+                  "flatPath": "v1p1beta1/projects/{projectsId}/locations/{locationsId}/models",
+                  "httpMethod": "POST",
+                  "id": "speech.projects.locations.models.create",
+                  "parameterOrder": [
+                    "parent"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "description": "Required. Resource name of the dataset being used to create the model.\n'/projects/{project_id}/locations/{location_id}/datasets/{dataset_id}'",
+                      "location": "query",
+                      "type": "string"
+                    },
+                    "parent": {
+                      "description": "Required. Resource name of the parent. Has the format :-\n\"projects/{project_id}/locations/{location_id}\"",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1p1beta1/{+parent}/models",
+                  "request": {
+                    "$ref": "Model"
+                  },
+                  "response": {
+                    "$ref": "Operation"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ]
+                },
+                "deploy": {
+                  "description": "Performs asynchronous model deployment of the model: receive results\nvia the google.longrunning.Operations interface. After the operation is\ncompleted this returns either an `Operation.error` in case of error or\na `google.protobuf.Empty` if the deployment was successful.",
+                  "flatPath": "v1p1beta1/projects/{projectsId}/locations/{locationsId}/models/{modelsId}:deploy",
+                  "httpMethod": "POST",
+                  "id": "speech.projects.locations.models.deploy",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "description": "Resource name of the model.\nFormat: \"projects/{project_id}/locations/{location_id}/models/{model_id}\"",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+/models/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1p1beta1/{+name}:deploy",
+                  "request": {
+                    "$ref": "DeployModelRequest"
+                  },
+                  "response": {
+                    "$ref": "Operation"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ]
+                },
+                "evaluate": {
+                  "description": "Performs asynchronous evaluation of the model: receive results\nvia the google.longrunning.Operations interface. After the operation is\ncompleted this returns either an `Operation.error` in case of error or\na `EvaluateModelResponse` with the evaluation results.",
+                  "flatPath": "v1p1beta1/projects/{projectsId}/locations/{locationsId}/models/{modelsId}:evaluate",
+                  "httpMethod": "POST",
+                  "id": "speech.projects.locations.models.evaluate",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "description": "Resource name of the model.\nFormat: \"projects/{project_id}/locations/{location_id}/models/{model_id}\"",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+/models/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1p1beta1/{+name}:evaluate",
+                  "request": {
+                    "$ref": "EvaluateModelRequest"
+                  },
+                  "response": {
+                    "$ref": "Operation"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ]
+                },
+                "list": {
+                  "description": "Fetch the list of models associated with this project.",
+                  "flatPath": "v1p1beta1/projects/{projectsId}/locations/{locationsId}/models",
+                  "httpMethod": "GET",
+                  "id": "speech.projects.locations.models.list",
+                  "parameterOrder": [
+                    "parent"
+                  ],
+                  "parameters": {
+                    "filter": {
+                      "description": "Filter the response based on display_name of the model. For e.g\ndisplay_name=Foo The filter string is case sensitive",
+                      "location": "query",
+                      "type": "string"
+                    },
+                    "pageSize": {
+                      "description": "The maximum number of items to return.",
+                      "format": "int32",
+                      "location": "query",
+                      "type": "integer"
+                    },
+                    "pageToken": {
+                      "description": "The next_page_token value returned from a previous List request, if any.",
+                      "location": "query",
+                      "type": "string"
+                    },
+                    "parent": {
+                      "description": "Required. Resource name of the parent. Has the format :-\n\"projects/{project_id}/locations/{location_id}\"",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1p1beta1/{+parent}/models",
+                  "response": {
+                    "$ref": "ListModelsResponse"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ]
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "speech": {
+      "methods": {
+        "longrunningrecognize": {
+          "description": "Performs asynchronous speech recognition: receive results via the\ngoogle.longrunning.Operations interface. Returns either an\n`Operation.error` or an `Operation.response` which contains\na `LongRunningRecognizeResponse` message.",
+          "flatPath": "v1p1beta1/speech:longrunningrecognize",
+          "httpMethod": "POST",
+          "id": "speech.speech.longrunningrecognize",
+          "parameterOrder": [],
+          "parameters": {},
+          "path": "v1p1beta1/speech:longrunningrecognize",
+          "request": {
+            "$ref": "LongRunningRecognizeRequest"
+          },
+          "response": {
+            "$ref": "Operation"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ]
+        },
+        "recognize": {
+          "description": "Performs synchronous speech recognition: receive results after all audio\nhas been sent and processed.",
+          "flatPath": "v1p1beta1/speech:recognize",
+          "httpMethod": "POST",
+          "id": "speech.speech.recognize",
+          "parameterOrder": [],
+          "parameters": {},
+          "path": "v1p1beta1/speech:recognize",
+          "request": {
+            "$ref": "RecognizeRequest"
+          },
+          "response": {
+            "$ref": "RecognizeResponse"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ]
+        }
+      }
+    }
+  },
+  "revision": "20181107",
+  "rootUrl": "https://speech.googleapis.com/",
+  "schemas": {
+    "DataErrors": {
+      "description": "Different types of dataset errors and the stats associated with each error.",
+      "id": "DataErrors",
+      "properties": {
+        "count": {
+          "description": "Number of records having errors associated with the enum.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "errorType": {
+          "description": "Type of the error.",
+          "enum": [
+            "ERROR_TYPE_UNSPECIFIED",
+            "UNSUPPORTED_AUDIO_FORMAT",
+            "FILE_EXTENSION_MISMATCH_WITH_AUDIO_FORMAT",
+            "FILE_TOO_LARGE"
+          ],
+          "enumDescriptions": [
+            "Not specified.",
+            "Audio format not in the formats supported by the cloud speech API",
+            "File format different from what is specified in the file name extension",
+            "File too large. Maximum allowed size is 50 MB."
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "DataStats": {
+      "description": "Contains stats about the data which was uploaded and preprocessed to be\nuse by downstream pipelines like training, evals pipelines.",
+      "id": "DataStats",
+      "properties": {
+        "dataErrors": {
+          "description": "Different types of data errors and the counts associated with them.",
+          "items": {
+            "$ref": "DataErrors"
+          },
+          "type": "array"
+        },
+        "testExampleCount": {
+          "description": "The number of examples used for testing.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "trainingExampleCount": {
+          "description": "The number of examples used for training.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "type": "object"
+    },
+    "Dataset": {
+      "description": "Specifies the parameters needed for creating a dataset. In addition this\nis also the message returned to the client by the `CreateDataset` method.\nIt is included in the `result.response` field of the `Operation`\nreturned by the `GetOperation` call of the `google::longrunning::Operations`\nservice.",
+      "id": "Dataset",
+      "properties": {
+        "blockingOperationIds": {
+          "description": "Output only. All the blocking operations associated with this dataset.\nLike (pre-processing, training-model, testing-model)",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        },
+        "bucketName": {
+          "description": "If set, the log data to be used in this dataset is restricted to the\nbucket specified. This field is only applicable if use_logged_data is true.\nIf use_logged_data is true, but this field is not set, then all logs will\nbe used for training the models. See: RecognitionMetadata for information\non setting up data logs.",
+          "type": "string"
+        },
+        "createTime": {
+          "description": "Output only. The timestamp this dataset is created.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "dataProcessingRegion": {
+          "description": "Location where the data should be processed. If not specified then we will\npick a location on behalf of the user for storing and processing the data.\nCurrently only us-central is supported.",
+          "type": "string"
+        },
+        "dataStats": {
+          "$ref": "DataStats",
+          "description": "Output only. Stats assoiated with the data."
+        },
+        "displayName": {
+          "description": "Required. Name of the data set for display.",
+          "type": "string"
+        },
+        "hasSufficientData": {
+          "description": "Output only. True if the data is sufficient to create custom models.",
+          "type": "boolean"
+        },
+        "languageCode": {
+          "description": "Required. The language of the supplied audio as a\n[BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag.\nExample: \"en-US\".\nSee [Language Support](/speech-to-text/docs/languages)\nfor a list of the currently supported language codes.",
+          "type": "string"
+        },
+        "models": {
+          "description": "All the models (including models pending training) built using the dataset.",
+          "items": {
+            "$ref": "Model"
+          },
+          "type": "array"
+        },
+        "name": {
+          "description": "Output only. Resource name of the dataset. Form :-\n'/projects/{project_number}/locations/{location_id}/datasets/{dataset_id}'",
+          "type": "string"
+        },
+        "updateTime": {
+          "description": "Output only. The timestamp this dataset is last updated.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "uri": {
+          "description": "URI that points to a file in csv file where each row has following format.\n\u003cgs_path_to_audio\u003e,\u003cgs_path_to_transcript\u003e,\u003clabel\u003e\nlabel can be HUMAN_TRANSCRIBED or MACHINE_TRANSCRIBED. To be valid, rows\nmust do the following:\n1. Each row must have at least a label and \u003cgs_path_to_transcript\u003e\n2. If a row is marked HUMAN_TRANSCRIBED, then you must specify both\n\u003cgs_path_to_audio\u003e and \u003cgs_path_to_transcript\u003e. Only WAV file formats\nwhich encode linear 16-bit pulse-code modulation (PCM) audio format are\nsupported. The maximum audio file size is 50 MB. Also note that the audio\nhas to be single channel audio.\n3. There has to be at least 500 rows labelled HUMAN_TRANSCRIBED covering\nat least ~10K words in order to get reliable word error rate results.\n4. To create a language model, you should provide at least 100,000 words\nin your transcriptions as training data if you have conversational and\ncaptions type of data. You should provide at least 10,000 words if you\nhave short utterances like voice commands and search type of use cases.\nCurrently, only Google Cloud Storage URIs are\nsupported, which must be specified in the following format:\n`gs://bucket_name/object_name` (other URI formats will be ignored).\nFor more information, see\n[Request URIs](/storage/docs/reference-uris).",
+          "type": "string"
+        },
+        "useLoggedData": {
+          "description": "If this is true, then use the previously logged data (for the project)\nThe logs data for this project will be preprocessed and prepared for\ndownstream pipelines (like training)",
+          "type": "boolean"
+        }
+      },
+      "type": "object"
+    },
+    "DeployModelRequest": {
+      "description": "Message sent by the client for the `DeployModel` method.",
+      "id": "DeployModelRequest",
+      "properties": {},
+      "type": "object"
+    },
+    "EvaluateModelRequest": {
+      "description": "Message sent by the client for the `EvaluateModel` method.",
+      "id": "EvaluateModelRequest",
+      "properties": {},
+      "type": "object"
+    },
+    "EvaluateModelResponse": {
+      "description": "The only message returned to the client by the `EvaluateModel` method. This\nis also returned as part of the Dataset message returned to the client by\nthe CreateDataset method. It is included in the `result.response` field of\nthe `Operation` returned by the `GetOperation` call of the\n`google::longrunning::Operations` service.",
+      "id": "EvaluateModelResponse",
+      "properties": {
+        "isEnhancedModel": {
+          "description": "If true then it means we are referring to the results of an enhanced\nversion of the model_type. Currently only PHONE_CALL model_type has an\nenhanced version.",
+          "type": "boolean"
+        },
+        "modelType": {
+          "description": "Required. The type of model used in this evaluation.",
+          "enum": [
+            "MODEL_TYPE_UNSPECIFIED",
+            "DEFAULT",
+            "COMMAND_AND_SEARCH",
+            "PHONE_CALL",
+            "VIDEO"
+          ],
+          "enumDescriptions": [
+            "",
+            "Model for audio that is not one of the specific models below. This is\na generic model and can be used in various scenarios but is not\nnecessarily the best in any particular scenario.",
+            "Model for audio from short queries like voice commands or voice search",
+            "Model for phone call conversation type op audio.",
+            "Model for audio that originated from from video or includes multiple\nspeakers."
+          ],
+          "type": "string"
+        },
+        "wordCount": {
+          "description": "Number of words used in the word_error_rate computation.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "wordErrorRate": {
+          "description": "Word error rate metric computed on the test set using the AutoML model.",
+          "format": "float",
+          "type": "number"
+        }
+      },
+      "type": "object"
+    },
+    "ListDatasetsResponse": {
+      "id": "ListDatasetsResponse",
+      "properties": {
+        "datasets": {
+          "description": "Repeated list of data sets containing details about each data set.",
+          "items": {
+            "$ref": "Dataset"
+          },
+          "type": "array"
+        },
+        "nextPageToken": {
+          "description": "Token to retrieve the next page of results, or empty if there are no\nmore results in the list.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "ListLogDataStatsResponse": {
+      "description": "Message received by the client for the `ListLogDataStats` method.",
+      "id": "ListLogDataStatsResponse",
+      "properties": {
+        "logDataEnabled": {
+          "description": "Output only. True if user has opted in for log data collection.",
+          "type": "boolean"
+        },
+        "logDataStats": {
+          "description": "The stats for each bucket.",
+          "items": {
+            "$ref": "LogBucketStats"
+          },
+          "type": "array"
+        },
+        "totalCount": {
+          "description": "The overall count for log data (including all bucket data).",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "type": "object"
+    },
+    "ListModelsResponse": {
+      "id": "ListModelsResponse",
+      "properties": {
+        "models": {
+          "description": "Repeated list of models containing details about each model.",
+          "items": {
+            "$ref": "Model"
+          },
+          "type": "array"
+        },
+        "nextPageToken": {
+          "description": "Token to retrieve the next page of results, or empty if there are no\nmore results in the list.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "LogBucketStats": {
+      "description": "Stats for log data within a bucket.",
+      "id": "LogBucketStats",
+      "properties": {
+        "bucketName": {
+          "description": "The display name for the bucket in which logs are collected.",
+          "type": "string"
+        },
+        "count": {
+          "description": "Number of audio samples that have been collected in this bucket.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "type": "object"
+    },
+    "LongRunningRecognizeRequest": {
+      "description": "The top-level message sent by the client for the `LongRunningRecognize`\nmethod.",
+      "id": "LongRunningRecognizeRequest",
+      "properties": {
+        "audio": {
+          "$ref": "RecognitionAudio",
+          "description": "*Required* The audio data to be recognized."
+        },
+        "config": {
+          "$ref": "RecognitionConfig",
+          "description": "*Required* Provides information to the recognizer that specifies how to\nprocess the request."
+        }
+      },
+      "type": "object"
+    },
+    "Model": {
+      "description": "Specifies the model parameters needed for training a model. In addition this\nis also the message returned to the client by the `CreateModel` method.\nIt is included in the `result.response` field of the `Operation`\nreturned by the `GetOperation` call of the `google::longrunning::Operations`\nservice.",
+      "id": "Model",
+      "properties": {
+        "createTime": {
+          "description": "Output only. Timestamp when this model was created.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "displayName": {
+          "description": "Required. Display name of the model to be trained.",
+          "type": "string"
+        },
+        "evaluateModelResponses": {
+          "description": "Output only. Evaluation results associated with this model. A model can\ncontain multiple sub-models in which case the evaluation results for\nall of those are available. If there are no sub models then there would\nbe just a single EvaluateModelResponse.",
+          "items": {
+            "$ref": "EvaluateModelResponse"
+          },
+          "type": "array"
+        },
+        "name": {
+          "description": "Output only. Resource name of the model.\nFormat: \"projects/{project_id}/locations/{location_id}/models/{model_id}\"",
+          "type": "string"
+        },
+        "trainingType": {
+          "description": "Required. Type of the training to perform.",
+          "enum": [
+            "TRAINING_TYPE_UNSPECIFIED",
+            "CUSTOM_ADAPTATION_LANGUAGE_MODEL",
+            "PREBUILT_MODEL"
+          ],
+          "enumDescriptions": [
+            "",
+            "Build adaptation language model based on the users data. These models are\nbuilt on top of the existing prebuilt models (like phone_call, video\netc.).",
+            "Output only. This is set to indicate that the model we are talking about\nis a prebuilt model (for e.g in the context of evaluations)."
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "Operation": {
+      "description": "This resource represents a long-running operation that is the result of a\nnetwork API call.",
+      "id": "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"
+        },
+        "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"
+        },
+        "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"
+        },
+        "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"
+        }
+      },
+      "type": "object"
+    },
+    "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[content limits](/speech-to-text/quotas#content).",
+      "id": "RecognitionAudio",
+      "properties": {
+        "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"
+        },
+        "uri": {
+          "description": "URI that points to a file that contains audio data bytes as specified in\n`RecognitionConfig`. The file must not be compressed (for example, gzip).\nCurrently, 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"
+        }
+      },
+      "type": "object"
+    },
+    "RecognitionConfig": {
+      "description": "Provides information to the recognizer that specifies how to process the\nrequest.",
+      "id": "RecognitionConfig",
+      "properties": {
+        "alternativeLanguageCodes": {
+          "description": "*Optional* A list of up to 3 additional\n[BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tags,\nlisting possible alternative languages of the supplied audio.\nSee [Language Support](/speech-to-text/docs/languages)\nfor a list of the currently supported language codes.\nIf alternative languages are listed, recognition result will contain\nrecognition in the most likely language detected including the main\nlanguage_code. The recognition result will include the language tag\nof the language detected in the audio.\nNote: This feature is only supported for Voice Command and Voice Search\nuse cases and performance may vary for other use cases (e.g., phone call\ntranscription).",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        },
+        "audioChannelCount": {
+          "description": "*Optional* The number of channels in the input audio data.\nONLY set this for MULTI-CHANNEL recognition.\nValid values for LINEAR16 and FLAC are `1`-`8`.\nValid values for OGG_OPUS are '1'-'254'.\nValid value for MULAW, AMR, AMR_WB and SPEEX_WITH_HEADER_BYTE is only `1`.\nIf `0` or omitted, defaults to one channel (mono).\nNote: We only recognize the first channel by default.\nTo perform independent recognition on each channel set\n`enable_separate_recognition_per_channel` to 'true'.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "diarizationSpeakerCount": {
+          "description": "*Optional*\nIf set, specifies the estimated number of speakers in the conversation.\nIf not set, defaults to '2'.\nIgnored unless enable_speaker_diarization is set to true.\"",
+          "format": "int32",
+          "type": "integer"
+        },
+        "enableAutomaticPunctuation": {
+          "description": "*Optional* If 'true', adds punctuation to recognition result hypotheses.\nThis feature is only available in select languages. Setting this for\nrequests in other languages has no effect at all.\nThe default 'false' value does not add punctuation to result hypotheses.\nNote: This is currently offered as an experimental service, complimentary\nto all users. In the future this may be exclusively available as a\npremium feature.",
+          "type": "boolean"
+        },
+        "enableSeparateRecognitionPerChannel": {
+          "description": "This needs to be set to ‘true’ explicitly and `audio_channel_count` \u003e 1\nto get each channel recognized separately. The recognition result will\ncontain a `channel_tag` field to state which channel that result belongs\nto. If this is not true, we will only recognize the first channel. The\nrequest is billed cumulatively for all channels recognized:\n`audio_channel_count` multiplied by the length of the audio.",
+          "type": "boolean"
+        },
+        "enableSpeakerDiarization": {
+          "description": "*Optional* If 'true', enables speaker detection for each recognized word in\nthe top alternative of the recognition result using a speaker_tag provided\nin the WordInfo.\nNote: When this is true, we send all the words from the beginning of the\naudio for the top alternative in every consecutive STREAMING responses.\nThis is done in order to improve our speaker tags as our models learn to\nidentify the speakers in the conversation over time.\nFor non-streaming requests, the diarization results will be provided only\nin the top alternative of the FINAL SpeechRecognitionResult.",
+          "type": "boolean"
+        },
+        "enableWordConfidence": {
+          "description": "*Optional* If `true`, the top result includes a list of words and the\nconfidence for those words. If `false`, no word-level confidence\ninformation is returned. The default is `false`.",
+          "type": "boolean"
+        },
+        "enableWordTimeOffsets": {
+          "description": "*Optional* If `true`, the top result includes a list of words and\nthe start and end time offsets (timestamps) for those words. If\n`false`, no word-level time offset information is returned. The default is\n`false`.",
+          "type": "boolean"
+        },
+        "encoding": {
+          "description": "Encoding of audio data sent in all `RecognitionAudio` messages.\nThis field is optional for `FLAC` and `WAV` audio files and required\nfor all other audio formats. For details, see AudioEncoding.",
+          "enum": [
+            "ENCODING_UNSPECIFIED",
+            "LINEAR16",
+            "FLAC",
+            "MULAW",
+            "AMR",
+            "AMR_WB",
+            "OGG_OPUS",
+            "SPEEX_WITH_HEADER_BYTE"
+          ],
+          "enumDescriptions": [
+            "Not specified.",
+            "Uncompressed 16-bit signed little-endian samples (Linear PCM).",
+            "`FLAC` (Free Lossless Audio\nCodec) is the recommended encoding because it is\nlossless--therefore recognition is not compromised--and\nrequires only about half the bandwidth of `LINEAR16`. `FLAC` stream\nencoding supports 16-bit and 24-bit samples, however, not all fields in\n`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_hertz` must be 8000.",
+            "Adaptive Multi-Rate Wideband codec. `sample_rate_hertz` must be 16000.",
+            "Opus encoded audio frames in Ogg container\n([OggOpus](https://wiki.xiph.org/OggOpus)).\n`sample_rate_hertz` must be one of 8000, 12000, 16000, 24000, or 48000.",
+            "Although the use of lossy encodings is not recommended, if a very low\nbitrate encoding is required, `OGG_OPUS` is highly preferred over\nSpeex encoding. The [Speex](https://speex.org/)  encoding supported by\nCloud Speech API has a header byte in each block, as in MIME type\n`audio/x-speex-with-header-byte`.\nIt is a variant of the RTP Speex encoding defined in\n[RFC 5574](https://tools.ietf.org/html/rfc5574).\nThe stream is a sequence of blocks, one block per RTP packet. Each block\nstarts with a byte containing the length of the block, in bytes, followed\nby one or more frames of Speex data, padded to an integral number of\nbytes (octets) as specified in RFC 5574. In other words, each RTP header\nis replaced with a single byte containing the block length. Only Speex\nwideband is supported. `sample_rate_hertz` must be 16000."
+          ],
+          "type": "string"
+        },
+        "languageCode": {
+          "description": "*Required* The language of the supplied audio as a\n[BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag.\nExample: \"en-US\".\nSee [Language Support](/speech-to-text/docs/languages)\nfor a list of the currently supported language codes.",
+          "type": "string"
+        },
+        "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"
+        },
+        "metadata": {
+          "$ref": "RecognitionMetadata",
+          "description": "*Optional* Metadata regarding this request."
+        },
+        "model": {
+          "description": "*Optional* Which model to select for the given request. Select the model\nbest suited to your domain to get best results. If a model is not\nexplicitly specified, then we auto-select a model based on the parameters\nin the RecognitionConfig.\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cb\u003eModel\u003c/b\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cb\u003eDescription\u003c/b\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003ecommand_and_search\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003eBest for short queries such as voice commands or voice search.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003ephone_call\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003eBest for audio that originated from a phone call (typically\n    recorded at an 8khz sampling rate).\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003evideo\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003eBest for audio that originated from from video or includes multiple\n        speakers. Ideally the audio is recorded at a 16khz or greater\n        sampling rate. This is a premium model that costs more than the\n        standard rate.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003edefault\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003eBest for audio that is not one of the specific audio models.\n        For example, long-form audio. Ideally the audio is high-fidelity,\n        recorded at a 16khz or greater sampling rate.\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e",
+          "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"
+        },
+        "sampleRateHertz": {
+          "description": "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).\nThis field is optional for `FLAC` and `WAV` audio files and required\nfor all other audio formats. For details, see AudioEncoding.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "speechContexts": {
+          "description": "*Optional* array of SpeechContext.\nA means to provide context to assist the speech recognition. For more\ninformation, see [Phrase Hints](/speech-to-text/docs/basics#phrase-hints).",
+          "items": {
+            "$ref": "SpeechContext"
+          },
+          "type": "array"
+        },
+        "useEnhanced": {
+          "description": "*Optional* Set to true to use an enhanced model for speech recognition.\nIf `use_enhanced` is set to true and the `model` field is not set, then\nan appropriate enhanced model is chosen if:\n1. project is eligible for requesting enhanced models\n2. an enhanced model exists for the audio\n\nIf `use_enhanced` is true and an enhanced version of the specified model\ndoes not exist, then the speech is recognized using the standard version\nof the specified model.\n\nEnhanced speech models require that you opt-in to data logging using\ninstructions in the\n[documentation](/speech-to-text/docs/enable-data-logging). If you set\n`use_enhanced` to true and you have not enabled audio logging, then you\nwill receive an error.",
+          "type": "boolean"
+        }
+      },
+      "type": "object"
+    },
+    "RecognitionMetadata": {
+      "description": "Description of audio data to be recognized.",
+      "id": "RecognitionMetadata",
+      "properties": {
+        "audioTopic": {
+          "description": "Description of the content. Eg. \"Recordings of federal supreme court\nhearings from 2012\".",
+          "type": "string"
+        },
+        "industryNaicsCodeOfAudio": {
+          "description": "The industry vertical to which this speech recognition request most\nclosely applies. This is most indicative of the topics contained\nin the audio.  Use the 6-digit NAICS code to identify the industry\nvertical - see https://www.naics.com/search/.",
+          "format": "uint32",
+          "type": "integer"
+        },
+        "interactionType": {
+          "description": "The use case most closely describing the audio content to be recognized.",
+          "enum": [
+            "INTERACTION_TYPE_UNSPECIFIED",
+            "DISCUSSION",
+            "PRESENTATION",
+            "PHONE_CALL",
+            "VOICEMAIL",
+            "PROFESSIONALLY_PRODUCED",
+            "VOICE_SEARCH",
+            "VOICE_COMMAND",
+            "DICTATION"
+          ],
+          "enumDescriptions": [
+            "Use case is either unknown or is something other than one of the other\nvalues below.",
+            "Multiple people in a conversation or discussion. For example in a\nmeeting with two or more people actively participating. Typically\nall the primary people speaking would be in the same room (if not,\nsee PHONE_CALL)",
+            "One or more persons lecturing or presenting to others, mostly\nuninterrupted.",
+            "A phone-call or video-conference in which two or more people, who are\nnot in the same room, are actively participating.",
+            "A recorded message intended for another person to listen to.",
+            "Professionally produced audio (eg. TV Show, Podcast).",
+            "Transcribe spoken questions and queries into text.",
+            "Transcribe voice commands, such as for controlling a device.",
+            "Transcribe speech to text to create a written document, such as a\ntext-message, email or report."
+          ],
+          "type": "string"
+        },
+        "microphoneDistance": {
+          "description": "The audio type that most closely describes the audio being recognized.",
+          "enum": [
+            "MICROPHONE_DISTANCE_UNSPECIFIED",
+            "NEARFIELD",
+            "MIDFIELD",
+            "FARFIELD"
+          ],
+          "enumDescriptions": [
+            "Audio type is not known.",
+            "The audio was captured from a closely placed microphone. Eg. phone,\ndictaphone, or handheld microphone. Generally if there speaker is within\n1 meter of the microphone.",
+            "The speaker if within 3 meters of the microphone.",
+            "The speaker is more than 3 meters away from the microphone."
+          ],
+          "type": "string"
+        },
+        "obfuscatedId": {
+          "description": "Obfuscated (privacy-protected) ID of the user, to identify number of\nunique users using the service.",
+          "format": "int64",
+          "type": "string"
+        },
+        "originalMediaType": {
+          "description": "The original media the speech was recorded on.",
+          "enum": [
+            "ORIGINAL_MEDIA_TYPE_UNSPECIFIED",
+            "AUDIO",
+            "VIDEO"
+          ],
+          "enumDescriptions": [
+            "Unknown original media type.",
+            "The speech data is an audio recording.",
+            "The speech data originally recorded on a video."
+          ],
+          "type": "string"
+        },
+        "originalMimeType": {
+          "description": "Mime type of the original audio file.  For example `audio/m4a`,\n`audio/x-alaw-basic`, `audio/mp3`, `audio/3gpp`.\nA list of possible audio mime types is maintained at\nhttp://www.iana.org/assignments/media-types/media-types.xhtml#audio",
+          "type": "string"
+        },
+        "recordingDeviceName": {
+          "description": "The device used to make the recording.  Examples 'Nexus 5X' or\n'Polycom SoundStation IP 6000' or 'POTS' or 'VoIP' or\n'Cardioid Microphone'.",
+          "type": "string"
+        },
+        "recordingDeviceType": {
+          "description": "The type of device the speech was recorded with.",
+          "enum": [
+            "RECORDING_DEVICE_TYPE_UNSPECIFIED",
+            "SMARTPHONE",
+            "PC",
+            "PHONE_LINE",
+            "VEHICLE",
+            "OTHER_OUTDOOR_DEVICE",
+            "OTHER_INDOOR_DEVICE"
+          ],
+          "enumDescriptions": [
+            "The recording device is unknown.",
+            "Speech was recorded on a smartphone.",
+            "Speech was recorded using a personal computer or tablet.",
+            "Speech was recorded over a phone line.",
+            "Speech was recorded in a vehicle.",
+            "Speech was recorded outdoors.",
+            "Speech was recorded indoors."
+          ],
+          "type": "string"
+        },
+        "tags": {
+          "description": "A freeform field to tag this input sample with. This can be used for\ngrouping the logs into separate buckets. This enables selective purging of\ndata based on the tags, and also for training models in AutoML.",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "RecognizeRequest": {
+      "description": "The top-level message sent by the client for the `Recognize` method.",
+      "id": "RecognizeRequest",
+      "properties": {
+        "audio": {
+          "$ref": "RecognitionAudio",
+          "description": "*Required* The audio data to be recognized."
+        },
+        "config": {
+          "$ref": "RecognitionConfig",
+          "description": "*Required* Provides information to the recognizer that specifies how to\nprocess the request."
+        }
+      },
+      "type": "object"
+    },
+    "RecognizeResponse": {
+      "description": "The only message returned to the client by the `Recognize` method. It\ncontains the result as zero or more sequential `SpeechRecognitionResult`\nmessages.",
+      "id": "RecognizeResponse",
+      "properties": {
+        "results": {
+          "description": "Output only. Sequential list of transcription results corresponding to\nsequential portions of audio.",
+          "items": {
+            "$ref": "SpeechRecognitionResult"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "RefreshDataRequest": {
+      "description": "Message sent by the client to refresh data in a existing dataset.",
+      "id": "RefreshDataRequest",
+      "properties": {
+        "uri": {
+          "description": "URI that points to a file in csv file where each row has following format.\n\u003cgs_path_to_audio\u003e,\u003cgs_path_to_transcript\u003e,\u003clabel\u003e\nlabel can be HUMAN_TRANSCRIBED or MACHINE_TRANSCRIBED. Few rules for a row\nto be considered valid are :-\n1. Each row must have at least a label and \u003cgs_path_to_transcript\u003e\n2. If a row is marked HUMAN_TRANSCRIBED, then both \u003cgs_path_to_audio\u003e\nand \u003cgs_path_to_transcript\u003e needs to be specified.\n3. There has to be minimum 500 number of rows labelled HUMAN_TRANSCRIBED if\nevaluation stats are required.\n4. If use_logged_data_for_training is set to true, then we ignore the rows\nlabelled as MACHINE_TRANSCRIBED.\n5. There has to be minimum 100,000 words in the transcripts in order to\nprovide sufficient textual training data for the language model.\nCurrently, only Google Cloud Storage URIs are\nsupported, which must be specified in the following format:\n`gs://bucket_name/object_name` (other URI formats will be ignored).\nFor more information, see\n[Request URIs](https://cloud.google.com/storage/docs/reference-uris).",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "SpeechContext": {
+      "description": "Provides \"hints\" to the speech recognizer to favor specific words and phrases\nin the results.",
+      "id": "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](/speech-to-text/quotas#content).",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        },
+        "strength": {
+          "description": "Hint strength to use (high, medium or low). If you use a high strength then\nyou are more likely to see those phrases in the results. If strength is not\nspecified then by default medium strength will be used. If you'd like\ndifferent phrases to have different strengths, you can specify multiple\nspeech_contexts.",
+          "enum": [
+            "STRENGTH_UNSPECIFIED",
+            "LOW",
+            "MEDIUM",
+            "HIGH"
+          ],
+          "enumDescriptions": [
+            "",
+            "Low strength",
+            "Medium strength",
+            "High strength"
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "SpeechRecognitionAlternative": {
+      "description": "Alternative hypotheses (a.k.a. n-best list).",
+      "id": "SpeechRecognitionAlternative",
+      "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 set only for the top alternative of a non-streaming\nresult or, of a streaming result where `is_final=true`.\nThis field is not guaranteed to be accurate and users should not rely on it\nto be always provided.\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"
+        },
+        "words": {
+          "description": "Output only. A list of word-specific information for each recognized word.\nNote: When `enable_speaker_diarization` is true, you will see all the words\nfrom the beginning of the audio.",
+          "items": {
+            "$ref": "WordInfo"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "SpeechRecognitionResult": {
+      "description": "A speech recognition result corresponding to a portion of the audio.",
+      "id": "SpeechRecognitionResult",
+      "properties": {
+        "alternatives": {
+          "description": "Output only. May contain one or more recognition hypotheses (up to the\nmaximum specified in `max_alternatives`).\nThese alternatives are ordered in terms of accuracy, with the top (first)\nalternative being the most probable, as ranked by the recognizer.",
+          "items": {
+            "$ref": "SpeechRecognitionAlternative"
+          },
+          "type": "array"
+        },
+        "channelTag": {
+          "description": "For multi-channel audio, this is the channel number corresponding to the\nrecognized result for the audio from that channel.\nFor audio_channel_count = N, its output values can range from '1' to 'N'.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "languageCode": {
+          "description": "Output only. The\n[BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag of the\nlanguage in this result. This language code was detected to have the most\nlikelihood of being spoken in the audio.",
+          "type": "string"
+        }
+      },
+      "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` that 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.\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",
+      "properties": {
+        "code": {
+          "description": "The status code, which should be an enum value of google.rpc.Code.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "details": {
+          "description": "A list of messages that carry the error details.  There is a common set of\nmessage types for APIs to use.",
+          "items": {
+            "additionalProperties": {
+              "description": "Properties of the object. Contains field @type with type URL.",
+              "type": "any"
+            },
+            "type": "object"
+          },
+          "type": "array"
+        },
+        "message": {
+          "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\ngoogle.rpc.Status.details field, or localized by the client.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "WordInfo": {
+      "description": "Word-specific information for recognized words.",
+      "id": "WordInfo",
+      "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 set only for the top alternative of a non-streaming\nresult or, of a streaming result where `is_final=true`.\nThis field is not guaranteed to be accurate and users should not rely on it\nto be always provided.\nThe default of 0.0 is a sentinel value indicating `confidence` was not set.",
+          "format": "float",
+          "type": "number"
+        },
+        "endTime": {
+          "description": "Output only. Time offset relative to the beginning of the audio,\nand corresponding to the end of the spoken word.\nThis field is only set if `enable_word_time_offsets=true` and only\nin the top hypothesis.\nThis is an experimental feature and the accuracy of the time offset can\nvary.",
+          "format": "google-duration",
+          "type": "string"
+        },
+        "speakerTag": {
+          "description": "Output only. A distinct integer value is assigned for every speaker within\nthe audio. This field specifies which one of those speakers was detected to\nhave spoken this word. Value ranges from '1' to diarization_speaker_count.\nspeaker_tag is set if enable_speaker_diarization = 'true' and only in the\ntop alternative.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "startTime": {
+          "description": "Output only. Time offset relative to the beginning of the audio,\nand corresponding to the start of the spoken word.\nThis field is only set if `enable_word_time_offsets=true` and only\nin the top hypothesis.\nThis is an experimental feature and the accuracy of the time offset can\nvary.",
+          "format": "google-duration",
+          "type": "string"
+        },
+        "word": {
+          "description": "Output only. The word corresponding to this set of information.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    }
+  },
+  "servicePath": "",
+  "title": "Cloud Speech API",
+  "version": "v1p1beta1",
+  "version_module": true
+}
\ No newline at end of file
diff --git a/speech/v1p1beta1/speech-gen.go b/speech/v1p1beta1/speech-gen.go
new file mode 100644
index 0000000..8908631
--- /dev/null
+++ b/speech/v1p1beta1/speech-gen.go
@@ -0,0 +1,3650 @@
+// Copyright 2018 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// AUTO-GENERATED CODE. DO NOT EDIT.
+
+// Package speech provides access to the Cloud Speech API.
+//
+// This package is DEPRECATED. Use package cloud.google.com/go/speech/apiv1 instead.
+//
+// See https://cloud.google.com/speech-to-text/docs/quickstart-protocol
+//
+// Usage example:
+//
+//   import "google.golang.org/api/speech/v1p1beta1"
+//   ...
+//   speechService, err := speech.New(oauthHttpClient)
+package speech // import "google.golang.org/api/speech/v1p1beta1"
+
+import (
+	"bytes"
+	"context"
+	"encoding/json"
+	"errors"
+	"fmt"
+	"io"
+	"net/http"
+	"net/url"
+	"strconv"
+	"strings"
+
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
+)
+
+// 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
+
+const apiId = "speech:v1p1beta1"
+const apiName = "speech"
+const apiVersion = "v1p1beta1"
+const basePath = "https://speech.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.Operations = NewOperationsService(s)
+	s.Projects = NewProjectsService(s)
+	s.Speech = NewSpeechService(s)
+	return s, nil
+}
+
+type Service struct {
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
+
+	Operations *OperationsService
+
+	Projects *ProjectsService
+
+	Speech *SpeechService
+}
+
+func (s *Service) userAgent() string {
+	if s.UserAgent == "" {
+		return googleapi.UserAgent
+	}
+	return googleapi.UserAgent + " " + s.UserAgent
+}
+
+func NewOperationsService(s *Service) *OperationsService {
+	rs := &OperationsService{s: s}
+	return rs
+}
+
+type OperationsService struct {
+	s *Service
+}
+
+func NewProjectsService(s *Service) *ProjectsService {
+	rs := &ProjectsService{s: s}
+	rs.Locations = NewProjectsLocationsService(s)
+	return rs
+}
+
+type ProjectsService struct {
+	s *Service
+
+	Locations *ProjectsLocationsService
+}
+
+func NewProjectsLocationsService(s *Service) *ProjectsLocationsService {
+	rs := &ProjectsLocationsService{s: s}
+	rs.Datasets = NewProjectsLocationsDatasetsService(s)
+	rs.LogDataStats = NewProjectsLocationsLogDataStatsService(s)
+	rs.Models = NewProjectsLocationsModelsService(s)
+	return rs
+}
+
+type ProjectsLocationsService struct {
+	s *Service
+
+	Datasets *ProjectsLocationsDatasetsService
+
+	LogDataStats *ProjectsLocationsLogDataStatsService
+
+	Models *ProjectsLocationsModelsService
+}
+
+func NewProjectsLocationsDatasetsService(s *Service) *ProjectsLocationsDatasetsService {
+	rs := &ProjectsLocationsDatasetsService{s: s}
+	return rs
+}
+
+type ProjectsLocationsDatasetsService struct {
+	s *Service
+}
+
+func NewProjectsLocationsLogDataStatsService(s *Service) *ProjectsLocationsLogDataStatsService {
+	rs := &ProjectsLocationsLogDataStatsService{s: s}
+	return rs
+}
+
+type ProjectsLocationsLogDataStatsService struct {
+	s *Service
+}
+
+func NewProjectsLocationsModelsService(s *Service) *ProjectsLocationsModelsService {
+	rs := &ProjectsLocationsModelsService{s: s}
+	return rs
+}
+
+type ProjectsLocationsModelsService struct {
+	s *Service
+}
+
+func NewSpeechService(s *Service) *SpeechService {
+	rs := &SpeechService{s: s}
+	return rs
+}
+
+type SpeechService struct {
+	s *Service
+}
+
+// DataErrors: Different types of dataset errors and the stats
+// associated with each error.
+type DataErrors struct {
+	// Count: Number of records having errors associated with the enum.
+	Count int64 `json:"count,omitempty"`
+
+	// ErrorType: Type of the error.
+	//
+	// Possible values:
+	//   "ERROR_TYPE_UNSPECIFIED" - Not specified.
+	//   "UNSUPPORTED_AUDIO_FORMAT" - Audio format not in the formats
+	// supported by the cloud speech API
+	//   "FILE_EXTENSION_MISMATCH_WITH_AUDIO_FORMAT" - File format different
+	// from what is specified in the file name extension
+	//   "FILE_TOO_LARGE" - File too large. Maximum allowed size is 50 MB.
+	ErrorType string `json:"errorType,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Count") 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. "Count") 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 *DataErrors) MarshalJSON() ([]byte, error) {
+	type NoMethod DataErrors
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// DataStats: Contains stats about the data which was uploaded and
+// preprocessed to be
+// use by downstream pipelines like training, evals pipelines.
+type DataStats struct {
+	// DataErrors: Different types of data errors and the counts associated
+	// with them.
+	DataErrors []*DataErrors `json:"dataErrors,omitempty"`
+
+	// TestExampleCount: The number of examples used for testing.
+	TestExampleCount int64 `json:"testExampleCount,omitempty"`
+
+	// TrainingExampleCount: The number of examples used for training.
+	TrainingExampleCount int64 `json:"trainingExampleCount,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "DataErrors") 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. "DataErrors") 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 *DataStats) MarshalJSON() ([]byte, error) {
+	type NoMethod DataStats
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Dataset: Specifies the parameters needed for creating a dataset. In
+// addition this
+// is also the message returned to the client by the `CreateDataset`
+// method.
+// It is included in the `result.response` field of the
+// `Operation`
+// returned by the `GetOperation` call of the
+// `google::longrunning::Operations`
+// service.
+type Dataset struct {
+	// BlockingOperationIds: Output only. All the blocking operations
+	// associated with this dataset.
+	// Like (pre-processing, training-model, testing-model)
+	BlockingOperationIds []string `json:"blockingOperationIds,omitempty"`
+
+	// BucketName: If set, the log data to be used in this dataset is
+	// restricted to the
+	// bucket specified. This field is only applicable if use_logged_data is
+	// true.
+	// If use_logged_data is true, but this field is not set, then all logs
+	// will
+	// be used for training the models. See: RecognitionMetadata for
+	// information
+	// on setting up data logs.
+	BucketName string `json:"bucketName,omitempty"`
+
+	// CreateTime: Output only. The timestamp this dataset is created.
+	CreateTime string `json:"createTime,omitempty"`
+
+	// DataProcessingRegion: Location where the data should be processed. If
+	// not specified then we will
+	// pick a location on behalf of the user for storing and processing the
+	// data.
+	// Currently only us-central is supported.
+	DataProcessingRegion string `json:"dataProcessingRegion,omitempty"`
+
+	// DataStats: Output only. Stats assoiated with the data.
+	DataStats *DataStats `json:"dataStats,omitempty"`
+
+	// DisplayName: Required. Name of the data set for display.
+	DisplayName string `json:"displayName,omitempty"`
+
+	// HasSufficientData: Output only. True if the data is sufficient to
+	// create custom models.
+	HasSufficientData bool `json:"hasSufficientData,omitempty"`
+
+	// LanguageCode: Required. The language of the supplied audio as
+	// a
+	// [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language
+	// tag.
+	// Example: "en-US".
+	// See [Language Support](/speech-to-text/docs/languages)
+	// for a list of the currently supported language codes.
+	LanguageCode string `json:"languageCode,omitempty"`
+
+	// Models: All the models (including models pending training) built
+	// using the dataset.
+	Models []*Model `json:"models,omitempty"`
+
+	// Name: Output only. Resource name of the dataset. Form
+	// :-
+	// '/projects/{project_number}/locations/{location_id}/datasets/{datas
+	// et_id}'
+	Name string `json:"name,omitempty"`
+
+	// UpdateTime: Output only. The timestamp this dataset is last updated.
+	UpdateTime string `json:"updateTime,omitempty"`
+
+	// Uri: URI that points to a file in csv file where each row has
+	// following
+	// format.
+	// <gs_path_to_audio>,<gs_path_to_transcript>,<label>
+	// label can be HUMAN_TRANSCRIBED or MACHINE_TRANSCRIBED. To be valid,
+	// rows
+	// must do the following:
+	// 1. Each row must have at least a label and <gs_path_to_transcript>
+	// 2. If a row is marked HUMAN_TRANSCRIBED, then you must specify
+	// both
+	// <gs_path_to_audio> and <gs_path_to_transcript>. Only WAV file
+	// formats
+	// which encode linear 16-bit pulse-code modulation (PCM) audio format
+	// are
+	// supported. The maximum audio file size is 50 MB. Also note that the
+	// audio
+	// has to be single channel audio.
+	// 3. There has to be at least 500 rows labelled HUMAN_TRANSCRIBED
+	// covering
+	// at least ~10K words in order to get reliable word error rate
+	// results.
+	// 4. To create a language model, you should provide at least 100,000
+	// words
+	// in your transcriptions as training data if you have conversational
+	// and
+	// captions type of data. You should provide at least 10,000 words if
+	// you
+	// have short utterances like voice commands and search type of use
+	// cases.
+	// Currently, only Google Cloud Storage URIs are
+	// supported, which must be specified in the following
+	// format:
+	// `gs://bucket_name/object_name` (other URI formats will be
+	// ignored).
+	// For more information, see
+	// [Request URIs](/storage/docs/reference-uris).
+	Uri string `json:"uri,omitempty"`
+
+	// UseLoggedData: If this is true, then use the previously logged data
+	// (for the project)
+	// The logs data for this project will be preprocessed and prepared
+	// for
+	// downstream pipelines (like training)
+	UseLoggedData bool `json:"useLoggedData,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g.
+	// "BlockingOperationIds") 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. "BlockingOperationIds") 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 *Dataset) MarshalJSON() ([]byte, error) {
+	type NoMethod Dataset
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// DeployModelRequest: Message sent by the client for the `DeployModel`
+// method.
+type DeployModelRequest struct {
+}
+
+// EvaluateModelRequest: Message sent by the client for the
+// `EvaluateModel` method.
+type EvaluateModelRequest struct {
+}
+
+// EvaluateModelResponse: The only message returned to the client by the
+// `EvaluateModel` method. This
+// is also returned as part of the Dataset message returned to the
+// client by
+// the CreateDataset method. It is included in the `result.response`
+// field of
+// the `Operation` returned by the `GetOperation` call of
+// the
+// `google::longrunning::Operations` service.
+type EvaluateModelResponse struct {
+	// IsEnhancedModel: If true then it means we are referring to the
+	// results of an enhanced
+	// version of the model_type. Currently only PHONE_CALL model_type has
+	// an
+	// enhanced version.
+	IsEnhancedModel bool `json:"isEnhancedModel,omitempty"`
+
+	// ModelType: Required. The type of model used in this evaluation.
+	//
+	// Possible values:
+	//   "MODEL_TYPE_UNSPECIFIED"
+	//   "DEFAULT" - Model for audio that is not one of the specific models
+	// below. This is
+	// a generic model and can be used in various scenarios but is
+	// not
+	// necessarily the best in any particular scenario.
+	//   "COMMAND_AND_SEARCH" - Model for audio from short queries like
+	// voice commands or voice search
+	//   "PHONE_CALL" - Model for phone call conversation type op audio.
+	//   "VIDEO" - Model for audio that originated from from video or
+	// includes multiple
+	// speakers.
+	ModelType string `json:"modelType,omitempty"`
+
+	// WordCount: Number of words used in the word_error_rate computation.
+	WordCount int64 `json:"wordCount,omitempty"`
+
+	// WordErrorRate: Word error rate metric computed on the test set using
+	// the AutoML model.
+	WordErrorRate float64 `json:"wordErrorRate,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "IsEnhancedModel") 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. "IsEnhancedModel") 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 *EvaluateModelResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod EvaluateModelResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *EvaluateModelResponse) UnmarshalJSON(data []byte) error {
+	type NoMethod EvaluateModelResponse
+	var s1 struct {
+		WordErrorRate gensupport.JSONFloat64 `json:"wordErrorRate"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.WordErrorRate = float64(s1.WordErrorRate)
+	return nil
+}
+
+type ListDatasetsResponse struct {
+	// Datasets: Repeated list of data sets containing details about each
+	// data set.
+	Datasets []*Dataset `json:"datasets,omitempty"`
+
+	// NextPageToken: Token to retrieve the next page of results, or empty
+	// if there are no
+	// more results in the list.
+	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. "Datasets") 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. "Datasets") 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 *ListDatasetsResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod ListDatasetsResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ListLogDataStatsResponse: Message received by the client for the
+// `ListLogDataStats` method.
+type ListLogDataStatsResponse struct {
+	// LogDataEnabled: Output only. True if user has opted in for log data
+	// collection.
+	LogDataEnabled bool `json:"logDataEnabled,omitempty"`
+
+	// LogDataStats: The stats for each bucket.
+	LogDataStats []*LogBucketStats `json:"logDataStats,omitempty"`
+
+	// TotalCount: The overall count for log data (including all bucket
+	// data).
+	TotalCount int64 `json:"totalCount,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "LogDataEnabled") 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. "LogDataEnabled") 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 *ListLogDataStatsResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod ListLogDataStatsResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type ListModelsResponse struct {
+	// Models: Repeated list of models containing details about each model.
+	Models []*Model `json:"models,omitempty"`
+
+	// NextPageToken: Token to retrieve the next page of results, or empty
+	// if there are no
+	// more results in the list.
+	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. "Models") 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. "Models") 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 *ListModelsResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod ListModelsResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// LogBucketStats: Stats for log data within a bucket.
+type LogBucketStats struct {
+	// BucketName: The display name for the bucket in which logs are
+	// collected.
+	BucketName string `json:"bucketName,omitempty"`
+
+	// Count: Number of audio samples that have been collected in this
+	// bucket.
+	Count int64 `json:"count,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "BucketName") 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. "BucketName") 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 *LogBucketStats) MarshalJSON() ([]byte, error) {
+	type NoMethod LogBucketStats
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// LongRunningRecognizeRequest: The top-level message sent by the client
+// for the `LongRunningRecognize`
+// method.
+type LongRunningRecognizeRequest struct {
+	// Audio: *Required* The audio data to be recognized.
+	Audio *RecognitionAudio `json:"audio,omitempty"`
+
+	// Config: *Required* Provides information to the recognizer that
+	// specifies how to
+	// process the request.
+	Config *RecognitionConfig `json:"config,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Audio") 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. "Audio") 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 *LongRunningRecognizeRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod LongRunningRecognizeRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Model: Specifies the model parameters needed for training a model. In
+// addition this
+// is also the message returned to the client by the `CreateModel`
+// method.
+// It is included in the `result.response` field of the
+// `Operation`
+// returned by the `GetOperation` call of the
+// `google::longrunning::Operations`
+// service.
+type Model struct {
+	// CreateTime: Output only. Timestamp when this model was created.
+	CreateTime string `json:"createTime,omitempty"`
+
+	// DisplayName: Required. Display name of the model to be trained.
+	DisplayName string `json:"displayName,omitempty"`
+
+	// EvaluateModelResponses: Output only. Evaluation results associated
+	// with this model. A model can
+	// contain multiple sub-models in which case the evaluation results
+	// for
+	// all of those are available. If there are no sub models then there
+	// would
+	// be just a single EvaluateModelResponse.
+	EvaluateModelResponses []*EvaluateModelResponse `json:"evaluateModelResponses,omitempty"`
+
+	// Name: Output only. Resource name of the model.
+	// Format:
+	// "projects/{project_id}/locations/{location_id}/models/{model_id}"
+	Name string `json:"name,omitempty"`
+
+	// TrainingType: Required. Type of the training to perform.
+	//
+	// Possible values:
+	//   "TRAINING_TYPE_UNSPECIFIED"
+	//   "CUSTOM_ADAPTATION_LANGUAGE_MODEL" - Build adaptation language
+	// model based on the users data. These models are
+	// built on top of the existing prebuilt models (like phone_call,
+	// video
+	// etc.).
+	//   "PREBUILT_MODEL" - Output only. This is set to indicate that the
+	// model we are talking about
+	// is a prebuilt model (for e.g in the context of evaluations).
+	TrainingType string `json:"trainingType,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 *Model) MarshalJSON() ([]byte, error) {
+	type NoMethod Model
+	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)
+}
+
+// RecognitionAudio: Contains audio data in the encoding specified in
+// the `RecognitionConfig`.
+// Either `content` or `uri` must be supplied. Supplying both or
+// neither
+// returns google.rpc.Code.INVALID_ARGUMENT. See
+// [content limits](/speech-to-text/quotas#content).
+type RecognitionAudio struct {
+	// Content: The audio data bytes encoded as specified
+	// in
+	// `RecognitionConfig`. Note: as with all bytes fields, protobuffers use
+	// a
+	// pure binary representation, whereas JSON representations use base64.
+	Content string `json:"content,omitempty"`
+
+	// Uri: URI that points to a file that contains audio data bytes as
+	// specified in
+	// `RecognitionConfig`. The file must not be compressed (for example,
+	// gzip).
+	// Currently, only Google Cloud Storage URIs are
+	// supported, which must be specified in the following
+	// format:
+	// `gs://bucket_name/object_name` (other URI formats
+	// return
+	// google.rpc.Code.INVALID_ARGUMENT). For more information, see
+	// [Request URIs](https://cloud.google.com/storage/docs/reference-uris).
+	Uri string `json:"uri,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Content") 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. "Content") 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 *RecognitionAudio) MarshalJSON() ([]byte, error) {
+	type NoMethod RecognitionAudio
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// RecognitionConfig: Provides information to the recognizer that
+// specifies how to process the
+// request.
+type RecognitionConfig struct {
+	// AlternativeLanguageCodes: *Optional* A list of up to 3
+	// additional
+	// [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language
+	// tags,
+	// listing possible alternative languages of the supplied audio.
+	// See [Language Support](/speech-to-text/docs/languages)
+	// for a list of the currently supported language codes.
+	// If alternative languages are listed, recognition result will
+	// contain
+	// recognition in the most likely language detected including the
+	// main
+	// language_code. The recognition result will include the language
+	// tag
+	// of the language detected in the audio.
+	// Note: This feature is only supported for Voice Command and Voice
+	// Search
+	// use cases and performance may vary for other use cases (e.g., phone
+	// call
+	// transcription).
+	AlternativeLanguageCodes []string `json:"alternativeLanguageCodes,omitempty"`
+
+	// AudioChannelCount: *Optional* The number of channels in the input
+	// audio data.
+	// ONLY set this for MULTI-CHANNEL recognition.
+	// Valid values for LINEAR16 and FLAC are `1`-`8`.
+	// Valid values for OGG_OPUS are '1'-'254'.
+	// Valid value for MULAW, AMR, AMR_WB and SPEEX_WITH_HEADER_BYTE is only
+	// `1`.
+	// If `0` or omitted, defaults to one channel (mono).
+	// Note: We only recognize the first channel by default.
+	// To perform independent recognition on each channel
+	// set
+	// `enable_separate_recognition_per_channel` to 'true'.
+	AudioChannelCount int64 `json:"audioChannelCount,omitempty"`
+
+	// DiarizationSpeakerCount: *Optional*
+	// If set, specifies the estimated number of speakers in the
+	// conversation.
+	// If not set, defaults to '2'.
+	// Ignored unless enable_speaker_diarization is set to true."
+	DiarizationSpeakerCount int64 `json:"diarizationSpeakerCount,omitempty"`
+
+	// EnableAutomaticPunctuation: *Optional* If 'true', adds punctuation to
+	// recognition result hypotheses.
+	// This feature is only available in select languages. Setting this
+	// for
+	// requests in other languages has no effect at all.
+	// The default 'false' value does not add punctuation to result
+	// hypotheses.
+	// Note: This is currently offered as an experimental service,
+	// complimentary
+	// to all users. In the future this may be exclusively available as
+	// a
+	// premium feature.
+	EnableAutomaticPunctuation bool `json:"enableAutomaticPunctuation,omitempty"`
+
+	// EnableSeparateRecognitionPerChannel: This needs to be set to
+	// ‘true’ explicitly and `audio_channel_count` > 1
+	// to get each channel recognized separately. The recognition result
+	// will
+	// contain a `channel_tag` field to state which channel that result
+	// belongs
+	// to. If this is not true, we will only recognize the first channel.
+	// The
+	// request is billed cumulatively for all channels
+	// recognized:
+	// `audio_channel_count` multiplied by the length of the audio.
+	EnableSeparateRecognitionPerChannel bool `json:"enableSeparateRecognitionPerChannel,omitempty"`
+
+	// EnableSpeakerDiarization: *Optional* If 'true', enables speaker
+	// detection for each recognized word in
+	// the top alternative of the recognition result using a speaker_tag
+	// provided
+	// in the WordInfo.
+	// Note: When this is true, we send all the words from the beginning of
+	// the
+	// audio for the top alternative in every consecutive STREAMING
+	// responses.
+	// This is done in order to improve our speaker tags as our models learn
+	// to
+	// identify the speakers in the conversation over time.
+	// For non-streaming requests, the diarization results will be provided
+	// only
+	// in the top alternative of the FINAL SpeechRecognitionResult.
+	EnableSpeakerDiarization bool `json:"enableSpeakerDiarization,omitempty"`
+
+	// EnableWordConfidence: *Optional* If `true`, the top result includes a
+	// list of words and the
+	// confidence for those words. If `false`, no word-level
+	// confidence
+	// information is returned. The default is `false`.
+	EnableWordConfidence bool `json:"enableWordConfidence,omitempty"`
+
+	// EnableWordTimeOffsets: *Optional* If `true`, the top result includes
+	// a list of words and
+	// the start and end time offsets (timestamps) for those words.
+	// If
+	// `false`, no word-level time offset information is returned. The
+	// default is
+	// `false`.
+	EnableWordTimeOffsets bool `json:"enableWordTimeOffsets,omitempty"`
+
+	// Encoding: Encoding of audio data sent in all `RecognitionAudio`
+	// messages.
+	// This field is optional for `FLAC` and `WAV` audio files and
+	// required
+	// for all other audio formats. For details, see AudioEncoding.
+	//
+	// Possible values:
+	//   "ENCODING_UNSPECIFIED" - Not specified.
+	//   "LINEAR16" - Uncompressed 16-bit signed little-endian samples
+	// (Linear PCM).
+	//   "FLAC" - `FLAC` (Free Lossless Audio
+	// Codec) is the recommended encoding because it is
+	// lossless--therefore recognition is not compromised--and
+	// requires only about half the bandwidth of `LINEAR16`. `FLAC`
+	// stream
+	// encoding supports 16-bit and 24-bit samples, however, not all fields
+	// in
+	// `STREAMINFO` are supported.
+	//   "MULAW" - 8-bit samples that compand 14-bit audio samples using
+	// G.711 PCMU/mu-law.
+	//   "AMR" - Adaptive Multi-Rate Narrowband codec. `sample_rate_hertz`
+	// must be 8000.
+	//   "AMR_WB" - Adaptive Multi-Rate Wideband codec. `sample_rate_hertz`
+	// must be 16000.
+	//   "OGG_OPUS" - Opus encoded audio frames in Ogg
+	// container
+	// ([OggOpus](https://wiki.xiph.org/OggOpus)).
+	// `sample_rate_her
+	// tz` must be one of 8000, 12000, 16000, 24000, or 48000.
+	//   "SPEEX_WITH_HEADER_BYTE" - Although the use of lossy encodings is
+	// not recommended, if a very low
+	// bitrate encoding is required, `OGG_OPUS` is highly preferred
+	// over
+	// Speex encoding. The [Speex](https://speex.org/)  encoding supported
+	// by
+	// Cloud Speech API has a header byte in each block, as in MIME
+	// type
+	// `audio/x-speex-with-header-byte`.
+	// It is a variant of the RTP Speex encoding defined in
+	// [RFC 5574](https://tools.ietf.org/html/rfc5574).
+	// The stream is a sequence of blocks, one block per RTP packet. Each
+	// block
+	// starts with a byte containing the length of the block, in bytes,
+	// followed
+	// by one or more frames of Speex data, padded to an integral number
+	// of
+	// bytes (octets) as specified in RFC 5574. In other words, each RTP
+	// header
+	// is replaced with a single byte containing the block length. Only
+	// Speex
+	// wideband is supported. `sample_rate_hertz` must be 16000.
+	Encoding string `json:"encoding,omitempty"`
+
+	// LanguageCode: *Required* The language of the supplied audio as
+	// a
+	// [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language
+	// tag.
+	// Example: "en-US".
+	// See [Language Support](/speech-to-text/docs/languages)
+	// for a list of the currently supported language codes.
+	LanguageCode string `json:"languageCode,omitempty"`
+
+	// MaxAlternatives: *Optional* Maximum number of recognition hypotheses
+	// to be returned.
+	// Specifically, the maximum number of `SpeechRecognitionAlternative`
+	// messages
+	// within each `SpeechRecognitionResult`.
+	// The server may return fewer than `max_alternatives`.
+	// Valid values are `0`-`30`. A value of `0` or `1` will return a
+	// maximum of
+	// one. If omitted, will return a maximum of one.
+	MaxAlternatives int64 `json:"maxAlternatives,omitempty"`
+
+	// Metadata: *Optional* Metadata regarding this request.
+	Metadata *RecognitionMetadata `json:"metadata,omitempty"`
+
+	// Model: *Optional* Which model to select for the given request. Select
+	// the model
+	// best suited to your domain to get best results. If a model is
+	// not
+	// explicitly specified, then we auto-select a model based on the
+	// parameters
+	// in the RecognitionConfig.
+	// <table>
+	//   <tr>
+	//     <td><b>Model</b></td>
+	//     <td><b>Description</b></td>
+	//   </tr>
+	//   <tr>
+	//     <td><code>command_and_search</code></td>
+	//     <td>Best for short queries such as voice commands or voice
+	// search.</td>
+	//   </tr>
+	//   <tr>
+	//     <td><code>phone_call</code></td>
+	//     <td>Best for audio that originated from a phone call (typically
+	//     recorded at an 8khz sampling rate).</td>
+	//   </tr>
+	//   <tr>
+	//     <td><code>video</code></td>
+	//     <td>Best for audio that originated from from video or includes
+	// multiple
+	//         speakers. Ideally the audio is recorded at a 16khz or
+	// greater
+	//         sampling rate. This is a premium model that costs more than
+	// the
+	//         standard rate.</td>
+	//   </tr>
+	//   <tr>
+	//     <td><code>default</code></td>
+	//     <td>Best for audio that is not one of the specific audio models.
+	//         For example, long-form audio. Ideally the audio is
+	// high-fidelity,
+	//         recorded at a 16khz or greater sampling rate.</td>
+	//   </tr>
+	// </table>
+	Model string `json:"model,omitempty"`
+
+	// ProfanityFilter: *Optional* If set to `true`, the server will attempt
+	// to filter out
+	// profanities, replacing all but the initial character in each filtered
+	// word
+	// with asterisks, e.g. "f***". If set to `false` or omitted,
+	// profanities
+	// won't be filtered out.
+	ProfanityFilter bool `json:"profanityFilter,omitempty"`
+
+	// SampleRateHertz: Sample rate in Hertz of the audio data sent in
+	// all
+	// `RecognitionAudio` messages. Valid values are: 8000-48000.
+	// 16000 is optimal. For best results, set the sampling rate of the
+	// audio
+	// source to 16000 Hz. If that's not possible, use the native sample
+	// rate of
+	// the audio source (instead of re-sampling).
+	// This field is optional for `FLAC` and `WAV` audio files and
+	// required
+	// for all other audio formats. For details, see AudioEncoding.
+	SampleRateHertz int64 `json:"sampleRateHertz,omitempty"`
+
+	// SpeechContexts: *Optional* array of SpeechContext.
+	// A means to provide context to assist the speech recognition. For
+	// more
+	// information, see [Phrase
+	// Hints](/speech-to-text/docs/basics#phrase-hints).
+	SpeechContexts []*SpeechContext `json:"speechContexts,omitempty"`
+
+	// UseEnhanced: *Optional* Set to true to use an enhanced model for
+	// speech recognition.
+	// If `use_enhanced` is set to true and the `model` field is not set,
+	// then
+	// an appropriate enhanced model is chosen if:
+	// 1. project is eligible for requesting enhanced models
+	// 2. an enhanced model exists for the audio
+	//
+	// If `use_enhanced` is true and an enhanced version of the specified
+	// model
+	// does not exist, then the speech is recognized using the standard
+	// version
+	// of the specified model.
+	//
+	// Enhanced speech models require that you opt-in to data logging
+	// using
+	// instructions in
+	// the
+	// [documentation](/speech-to-text/docs/enable-data-logging). If you
+	// set
+	// `use_enhanced` to true and you have not enabled audio logging, then
+	// you
+	// will receive an error.
+	UseEnhanced bool `json:"useEnhanced,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g.
+	// "AlternativeLanguageCodes") 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. "AlternativeLanguageCodes")
+	// 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 *RecognitionConfig) MarshalJSON() ([]byte, error) {
+	type NoMethod RecognitionConfig
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// RecognitionMetadata: Description of audio data to be recognized.
+type RecognitionMetadata struct {
+	// AudioTopic: Description of the content. Eg. "Recordings of federal
+	// supreme court
+	// hearings from 2012".
+	AudioTopic string `json:"audioTopic,omitempty"`
+
+	// IndustryNaicsCodeOfAudio: The industry vertical to which this speech
+	// recognition request most
+	// closely applies. This is most indicative of the topics contained
+	// in the audio.  Use the 6-digit NAICS code to identify the
+	// industry
+	// vertical - see https://www.naics.com/search/.
+	IndustryNaicsCodeOfAudio int64 `json:"industryNaicsCodeOfAudio,omitempty"`
+
+	// InteractionType: The use case most closely describing the audio
+	// content to be recognized.
+	//
+	// Possible values:
+	//   "INTERACTION_TYPE_UNSPECIFIED" - Use case is either unknown or is
+	// something other than one of the other
+	// values below.
+	//   "DISCUSSION" - Multiple people in a conversation or discussion. For
+	// example in a
+	// meeting with two or more people actively participating. Typically
+	// all the primary people speaking would be in the same room (if
+	// not,
+	// see PHONE_CALL)
+	//   "PRESENTATION" - One or more persons lecturing or presenting to
+	// others, mostly
+	// uninterrupted.
+	//   "PHONE_CALL" - A phone-call or video-conference in which two or
+	// more people, who are
+	// not in the same room, are actively participating.
+	//   "VOICEMAIL" - A recorded message intended for another person to
+	// listen to.
+	//   "PROFESSIONALLY_PRODUCED" - Professionally produced audio (eg. TV
+	// Show, Podcast).
+	//   "VOICE_SEARCH" - Transcribe spoken questions and queries into text.
+	//   "VOICE_COMMAND" - Transcribe voice commands, such as for
+	// controlling a device.
+	//   "DICTATION" - Transcribe speech to text to create a written
+	// document, such as a
+	// text-message, email or report.
+	InteractionType string `json:"interactionType,omitempty"`
+
+	// MicrophoneDistance: The audio type that most closely describes the
+	// audio being recognized.
+	//
+	// Possible values:
+	//   "MICROPHONE_DISTANCE_UNSPECIFIED" - Audio type is not known.
+	//   "NEARFIELD" - The audio was captured from a closely placed
+	// microphone. Eg. phone,
+	// dictaphone, or handheld microphone. Generally if there speaker is
+	// within
+	// 1 meter of the microphone.
+	//   "MIDFIELD" - The speaker if within 3 meters of the microphone.
+	//   "FARFIELD" - The speaker is more than 3 meters away from the
+	// microphone.
+	MicrophoneDistance string `json:"microphoneDistance,omitempty"`
+
+	// ObfuscatedId: Obfuscated (privacy-protected) ID of the user, to
+	// identify number of
+	// unique users using the service.
+	ObfuscatedId int64 `json:"obfuscatedId,omitempty,string"`
+
+	// OriginalMediaType: The original media the speech was recorded on.
+	//
+	// Possible values:
+	//   "ORIGINAL_MEDIA_TYPE_UNSPECIFIED" - Unknown original media type.
+	//   "AUDIO" - The speech data is an audio recording.
+	//   "VIDEO" - The speech data originally recorded on a video.
+	OriginalMediaType string `json:"originalMediaType,omitempty"`
+
+	// OriginalMimeType: Mime type of the original audio file.  For example
+	// `audio/m4a`,
+	// `audio/x-alaw-basic`, `audio/mp3`, `audio/3gpp`.
+	// A list of possible audio mime types is maintained
+	// at
+	// http://www.iana.org/assignments/media-types/media-types.xhtml#audio
+	OriginalMimeType string `json:"originalMimeType,omitempty"`
+
+	// RecordingDeviceName: The device used to make the recording.  Examples
+	// 'Nexus 5X' or
+	// 'Polycom SoundStation IP 6000' or 'POTS' or 'VoIP' or
+	// 'Cardioid Microphone'.
+	RecordingDeviceName string `json:"recordingDeviceName,omitempty"`
+
+	// RecordingDeviceType: The type of device the speech was recorded with.
+	//
+	// Possible values:
+	//   "RECORDING_DEVICE_TYPE_UNSPECIFIED" - The recording device is
+	// unknown.
+	//   "SMARTPHONE" - Speech was recorded on a smartphone.
+	//   "PC" - Speech was recorded using a personal computer or tablet.
+	//   "PHONE_LINE" - Speech was recorded over a phone line.
+	//   "VEHICLE" - Speech was recorded in a vehicle.
+	//   "OTHER_OUTDOOR_DEVICE" - Speech was recorded outdoors.
+	//   "OTHER_INDOOR_DEVICE" - Speech was recorded indoors.
+	RecordingDeviceType string `json:"recordingDeviceType,omitempty"`
+
+	// Tags: A freeform field to tag this input sample with. This can be
+	// used for
+	// grouping the logs into separate buckets. This enables selective
+	// purging of
+	// data based on the tags, and also for training models in AutoML.
+	Tags []string `json:"tags,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "AudioTopic") 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. "AudioTopic") 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 *RecognitionMetadata) MarshalJSON() ([]byte, error) {
+	type NoMethod RecognitionMetadata
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// RecognizeRequest: The top-level message sent by the client for the
+// `Recognize` method.
+type RecognizeRequest struct {
+	// Audio: *Required* The audio data to be recognized.
+	Audio *RecognitionAudio `json:"audio,omitempty"`
+
+	// Config: *Required* Provides information to the recognizer that
+	// specifies how to
+	// process the request.
+	Config *RecognitionConfig `json:"config,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Audio") 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. "Audio") 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 *RecognizeRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod RecognizeRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// RecognizeResponse: The only message returned to the client by the
+// `Recognize` method. It
+// contains the result as zero or more sequential
+// `SpeechRecognitionResult`
+// messages.
+type RecognizeResponse struct {
+	// Results: Output only. Sequential list of transcription results
+	// corresponding to
+	// sequential portions of audio.
+	Results []*SpeechRecognitionResult `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 *RecognizeResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod RecognizeResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// RefreshDataRequest: Message sent by the client to refresh data in a
+// existing dataset.
+type RefreshDataRequest struct {
+	// Uri: URI that points to a file in csv file where each row has
+	// following
+	// format.
+	// <gs_path_to_audio>,<gs_path_to_transcript>,<label>
+	// label can be HUMAN_TRANSCRIBED or MACHINE_TRANSCRIBED. Few rules for
+	// a row
+	// to be considered valid are :-
+	// 1. Each row must have at least a label and <gs_path_to_transcript>
+	// 2. If a row is marked HUMAN_TRANSCRIBED, then both
+	// <gs_path_to_audio>
+	// and <gs_path_to_transcript> needs to be specified.
+	// 3. There has to be minimum 500 number of rows labelled
+	// HUMAN_TRANSCRIBED if
+	// evaluation stats are required.
+	// 4. If use_logged_data_for_training is set to true, then we ignore the
+	// rows
+	// labelled as MACHINE_TRANSCRIBED.
+	// 5. There has to be minimum 100,000 words in the transcripts in order
+	// to
+	// provide sufficient textual training data for the language
+	// model.
+	// Currently, only Google Cloud Storage URIs are
+	// supported, which must be specified in the following
+	// format:
+	// `gs://bucket_name/object_name` (other URI formats will be
+	// ignored).
+	// For more information, see
+	// [Request URIs](https://cloud.google.com/storage/docs/reference-uris).
+	Uri string `json:"uri,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Uri") 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. "Uri") 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 *RefreshDataRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod RefreshDataRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// SpeechContext: Provides "hints" to the speech recognizer to favor
+// specific words and phrases
+// in the results.
+type SpeechContext struct {
+	// Phrases: *Optional* A list of strings containing words and phrases
+	// "hints" so that
+	// the speech recognition is more likely to recognize them. This can be
+	// used
+	// to improve the accuracy for specific words and phrases, for example,
+	// if
+	// specific commands are typically spoken by the user. This can also be
+	// used
+	// to add additional words to the vocabulary of the recognizer.
+	// See
+	// [usage limits](/speech-to-text/quotas#content).
+	Phrases []string `json:"phrases,omitempty"`
+
+	// Strength: Hint strength to use (high, medium or low). If you use a
+	// high strength then
+	// you are more likely to see those phrases in the results. If strength
+	// is not
+	// specified then by default medium strength will be used. If you'd
+	// like
+	// different phrases to have different strengths, you can specify
+	// multiple
+	// speech_contexts.
+	//
+	// Possible values:
+	//   "STRENGTH_UNSPECIFIED"
+	//   "LOW" - Low strength
+	//   "MEDIUM" - Medium strength
+	//   "HIGH" - High strength
+	Strength string `json:"strength,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Phrases") 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. "Phrases") 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 *SpeechContext) MarshalJSON() ([]byte, error) {
+	type NoMethod SpeechContext
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// SpeechRecognitionAlternative: Alternative hypotheses (a.k.a. n-best
+// list).
+type SpeechRecognitionAlternative struct {
+	// Confidence: Output only. The confidence estimate between 0.0 and 1.0.
+	// A higher number
+	// indicates an estimated greater likelihood that the recognized words
+	// are
+	// correct. This field is set only for the top alternative of a
+	// non-streaming
+	// result or, of a streaming result where `is_final=true`.
+	// This field is not guaranteed to be accurate and users should not rely
+	// on it
+	// to be always provided.
+	// The default of 0.0 is a sentinel value indicating `confidence` was
+	// not set.
+	Confidence float64 `json:"confidence,omitempty"`
+
+	// Transcript: Output only. Transcript text representing the words that
+	// the user spoke.
+	Transcript string `json:"transcript,omitempty"`
+
+	// Words: Output only. A list of word-specific information for each
+	// recognized word.
+	// Note: When `enable_speaker_diarization` is true, you will see all the
+	// words
+	// from the beginning of the audio.
+	Words []*WordInfo `json:"words,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Confidence") 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. "Confidence") 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 *SpeechRecognitionAlternative) MarshalJSON() ([]byte, error) {
+	type NoMethod SpeechRecognitionAlternative
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *SpeechRecognitionAlternative) UnmarshalJSON(data []byte) error {
+	type NoMethod SpeechRecognitionAlternative
+	var s1 struct {
+		Confidence gensupport.JSONFloat64 `json:"confidence"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.Confidence = float64(s1.Confidence)
+	return nil
+}
+
+// SpeechRecognitionResult: A speech recognition result corresponding to
+// a portion of the audio.
+type SpeechRecognitionResult struct {
+	// Alternatives: Output only. May contain one or more recognition
+	// hypotheses (up to the
+	// maximum specified in `max_alternatives`).
+	// These alternatives are ordered in terms of accuracy, with the top
+	// (first)
+	// alternative being the most probable, as ranked by the recognizer.
+	Alternatives []*SpeechRecognitionAlternative `json:"alternatives,omitempty"`
+
+	// ChannelTag: For multi-channel audio, this is the channel number
+	// corresponding to the
+	// recognized result for the audio from that channel.
+	// For audio_channel_count = N, its output values can range from '1' to
+	// 'N'.
+	ChannelTag int64 `json:"channelTag,omitempty"`
+
+	// LanguageCode: Output only.
+	// The
+	// [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag
+	// of the
+	// language in this result. This language code was detected to have the
+	// most
+	// likelihood of being spoken in the audio.
+	LanguageCode string `json:"languageCode,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Alternatives") 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. "Alternatives") 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 *SpeechRecognitionResult) MarshalJSON() ([]byte, error) {
+	type NoMethod SpeechRecognitionResult
+	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` that 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.
+//
+// - 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 is 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)
+}
+
+// WordInfo: Word-specific information for recognized words.
+type WordInfo struct {
+	// Confidence: Output only. The confidence estimate between 0.0 and 1.0.
+	// A higher number
+	// indicates an estimated greater likelihood that the recognized words
+	// are
+	// correct. This field is set only for the top alternative of a
+	// non-streaming
+	// result or, of a streaming result where `is_final=true`.
+	// This field is not guaranteed to be accurate and users should not rely
+	// on it
+	// to be always provided.
+	// The default of 0.0 is a sentinel value indicating `confidence` was
+	// not set.
+	Confidence float64 `json:"confidence,omitempty"`
+
+	// EndTime: Output only. Time offset relative to the beginning of the
+	// audio,
+	// and corresponding to the end of the spoken word.
+	// This field is only set if `enable_word_time_offsets=true` and only
+	// in the top hypothesis.
+	// This is an experimental feature and the accuracy of the time offset
+	// can
+	// vary.
+	EndTime string `json:"endTime,omitempty"`
+
+	// SpeakerTag: Output only. A distinct integer value is assigned for
+	// every speaker within
+	// the audio. This field specifies which one of those speakers was
+	// detected to
+	// have spoken this word. Value ranges from '1' to
+	// diarization_speaker_count.
+	// speaker_tag is set if enable_speaker_diarization = 'true' and only in
+	// the
+	// top alternative.
+	SpeakerTag int64 `json:"speakerTag,omitempty"`
+
+	// StartTime: Output only. Time offset relative to the beginning of the
+	// audio,
+	// and corresponding to the start of the spoken word.
+	// This field is only set if `enable_word_time_offsets=true` and only
+	// in the top hypothesis.
+	// This is an experimental feature and the accuracy of the time offset
+	// can
+	// vary.
+	StartTime string `json:"startTime,omitempty"`
+
+	// Word: Output only. The word corresponding to this set of information.
+	Word string `json:"word,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Confidence") 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. "Confidence") 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 *WordInfo) MarshalJSON() ([]byte, error) {
+	type NoMethod WordInfo
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *WordInfo) UnmarshalJSON(data []byte) error {
+	type NoMethod WordInfo
+	var s1 struct {
+		Confidence gensupport.JSONFloat64 `json:"confidence"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.Confidence = float64(s1.Confidence)
+	return nil
+}
+
+// method id "speech.operations.get":
+
+type OperationsGetCall 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 *OperationsService) Get(name string) *OperationsGetCall {
+	c := &OperationsGetCall{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 *OperationsGetCall) Fields(s ...googleapi.Field) *OperationsGetCall {
+	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 *OperationsGetCall) IfNoneMatch(entityTag string) *OperationsGetCall {
+	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 *OperationsGetCall) Context(ctx context.Context) *OperationsGetCall {
+	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 *OperationsGetCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *OperationsGetCall) 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)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1p1beta1/operations/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "speech.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 *OperationsGetCall) 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 := gensupport.DecodeResponse(target, res); 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": "v1p1beta1/operations/{operationsId}",
+	//   "httpMethod": "GET",
+	//   "id": "speech.operations.get",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "The name of the operation resource.",
+	//       "location": "path",
+	//       "pattern": "^[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1p1beta1/operations/{+name}",
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "speech.projects.locations.datasets.create":
+
+type ProjectsLocationsDatasetsCreateCall struct {
+	s          *Service
+	parent     string
+	dataset    *Dataset
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// Create: Performs asynchronous data upload for AutoML: receive results
+// via the
+// google.longrunning.Operations interface. Returns either
+// an
+// `Operation.error` or an `Operation.response` which contains
+// a `Dataset` message.
+func (r *ProjectsLocationsDatasetsService) Create(parent string, dataset *Dataset) *ProjectsLocationsDatasetsCreateCall {
+	c := &ProjectsLocationsDatasetsCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.parent = parent
+	c.dataset = dataset
+	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 *ProjectsLocationsDatasetsCreateCall) Fields(s ...googleapi.Field) *ProjectsLocationsDatasetsCreateCall {
+	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 *ProjectsLocationsDatasetsCreateCall) Context(ctx context.Context) *ProjectsLocationsDatasetsCreateCall {
+	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 *ProjectsLocationsDatasetsCreateCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsDatasetsCreateCall) 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.dataset)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1p1beta1/{+parent}/datasets")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "speech.projects.locations.datasets.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 *ProjectsLocationsDatasetsCreateCall) 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 := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Performs asynchronous data upload for AutoML: receive results via the\ngoogle.longrunning.Operations interface. Returns either an\n`Operation.error` or an `Operation.response` which contains\na `Dataset` message.",
+	//   "flatPath": "v1p1beta1/projects/{projectsId}/locations/{locationsId}/datasets",
+	//   "httpMethod": "POST",
+	//   "id": "speech.projects.locations.datasets.create",
+	//   "parameterOrder": [
+	//     "parent"
+	//   ],
+	//   "parameters": {
+	//     "parent": {
+	//       "description": "Required. Resource name of the parent. Has the format :-\n\"projects/{project_id}/locations/{location_id}\"",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1p1beta1/{+parent}/datasets",
+	//   "request": {
+	//     "$ref": "Dataset"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "speech.projects.locations.datasets.get":
+
+type ProjectsLocationsDatasetsGetCall struct {
+	s            *Service
+	name         string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// Get: Get the dataset associated with the dataset resource.
+func (r *ProjectsLocationsDatasetsService) Get(name string) *ProjectsLocationsDatasetsGetCall {
+	c := &ProjectsLocationsDatasetsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// IncludeModelInfo sets the optional parameter "includeModelInfo": If
+// true then also include information about the models built using
+// this
+// dataset.
+func (c *ProjectsLocationsDatasetsGetCall) IncludeModelInfo(includeModelInfo bool) *ProjectsLocationsDatasetsGetCall {
+	c.urlParams_.Set("includeModelInfo", fmt.Sprint(includeModelInfo))
+	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 *ProjectsLocationsDatasetsGetCall) Fields(s ...googleapi.Field) *ProjectsLocationsDatasetsGetCall {
+	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 *ProjectsLocationsDatasetsGetCall) IfNoneMatch(entityTag string) *ProjectsLocationsDatasetsGetCall {
+	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 *ProjectsLocationsDatasetsGetCall) Context(ctx context.Context) *ProjectsLocationsDatasetsGetCall {
+	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 *ProjectsLocationsDatasetsGetCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsDatasetsGetCall) 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)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1p1beta1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "speech.projects.locations.datasets.get" call.
+// Exactly one of *Dataset or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Dataset.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 *ProjectsLocationsDatasetsGetCall) Do(opts ...googleapi.CallOption) (*Dataset, 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 := &Dataset{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Get the dataset associated with the dataset resource.",
+	//   "flatPath": "v1p1beta1/projects/{projectsId}/locations/{locationsId}/datasets/{datasetsId}",
+	//   "httpMethod": "GET",
+	//   "id": "speech.projects.locations.datasets.get",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "includeModelInfo": {
+	//       "description": "If true then also include information about the models built using this\ndataset.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     },
+	//     "name": {
+	//       "description": "The resource name of the dataset to retrieve. Form :-\n'/projects/{project_number}/locations/{location_id}/datasets/{dataset_id}'",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+/datasets/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1p1beta1/{+name}",
+	//   "response": {
+	//     "$ref": "Dataset"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "speech.projects.locations.datasets.list":
+
+type ProjectsLocationsDatasetsListCall struct {
+	s            *Service
+	parent       string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// List: Fetch the list of dataset associated with this project.
+func (r *ProjectsLocationsDatasetsService) List(parent string) *ProjectsLocationsDatasetsListCall {
+	c := &ProjectsLocationsDatasetsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.parent = parent
+	return c
+}
+
+// Filter sets the optional parameter "filter": Filter the response
+// based on display_name of the dataset. For e.g
+// display_name=Foo The filter string is case sensitive
+func (c *ProjectsLocationsDatasetsListCall) Filter(filter string) *ProjectsLocationsDatasetsListCall {
+	c.urlParams_.Set("filter", filter)
+	return c
+}
+
+// IncludeModelInfo sets the optional parameter "includeModelInfo": If
+// true then also include information about the models built using
+// the
+// datasets.
+func (c *ProjectsLocationsDatasetsListCall) IncludeModelInfo(includeModelInfo bool) *ProjectsLocationsDatasetsListCall {
+	c.urlParams_.Set("includeModelInfo", fmt.Sprint(includeModelInfo))
+	return c
+}
+
+// PageSize sets the optional parameter "pageSize": The maximum number
+// of items to return.
+func (c *ProjectsLocationsDatasetsListCall) PageSize(pageSize int64) *ProjectsLocationsDatasetsListCall {
+	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": The
+// next_page_token value returned from a previous List request, if any.
+func (c *ProjectsLocationsDatasetsListCall) PageToken(pageToken string) *ProjectsLocationsDatasetsListCall {
+	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 *ProjectsLocationsDatasetsListCall) Fields(s ...googleapi.Field) *ProjectsLocationsDatasetsListCall {
+	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 *ProjectsLocationsDatasetsListCall) IfNoneMatch(entityTag string) *ProjectsLocationsDatasetsListCall {
+	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 *ProjectsLocationsDatasetsListCall) Context(ctx context.Context) *ProjectsLocationsDatasetsListCall {
+	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 *ProjectsLocationsDatasetsListCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsDatasetsListCall) 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)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1p1beta1/{+parent}/datasets")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "speech.projects.locations.datasets.list" call.
+// Exactly one of *ListDatasetsResponse or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *ListDatasetsResponse.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 *ProjectsLocationsDatasetsListCall) Do(opts ...googleapi.CallOption) (*ListDatasetsResponse, 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 := &ListDatasetsResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Fetch the list of dataset associated with this project.",
+	//   "flatPath": "v1p1beta1/projects/{projectsId}/locations/{locationsId}/datasets",
+	//   "httpMethod": "GET",
+	//   "id": "speech.projects.locations.datasets.list",
+	//   "parameterOrder": [
+	//     "parent"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "Filter the response based on display_name of the dataset. For e.g\ndisplay_name=Foo The filter string is case sensitive",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "includeModelInfo": {
+	//       "description": "If true then also include information about the models built using the\ndatasets.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     },
+	//     "pageSize": {
+	//       "description": "The maximum number of items to return.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "The next_page_token value returned from a previous List request, if any.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "parent": {
+	//       "description": "Required. Resource name of the parent. Has the format :-\n\"projects/{project_id}/locations/{location_id}\"",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1p1beta1/{+parent}/datasets",
+	//   "response": {
+	//     "$ref": "ListDatasetsResponse"
+	//   },
+	//   "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 *ProjectsLocationsDatasetsListCall) Pages(ctx context.Context, f func(*ListDatasetsResponse) 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 "speech.projects.locations.datasets.refreshData":
+
+type ProjectsLocationsDatasetsRefreshDataCall struct {
+	s                  *Service
+	name               string
+	refreshdatarequest *RefreshDataRequest
+	urlParams_         gensupport.URLParams
+	ctx_               context.Context
+	header_            http.Header
+}
+
+// RefreshData: Refresh data for a dataset.
+func (r *ProjectsLocationsDatasetsService) RefreshData(name string, refreshdatarequest *RefreshDataRequest) *ProjectsLocationsDatasetsRefreshDataCall {
+	c := &ProjectsLocationsDatasetsRefreshDataCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	c.refreshdatarequest = refreshdatarequest
+	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 *ProjectsLocationsDatasetsRefreshDataCall) Fields(s ...googleapi.Field) *ProjectsLocationsDatasetsRefreshDataCall {
+	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 *ProjectsLocationsDatasetsRefreshDataCall) Context(ctx context.Context) *ProjectsLocationsDatasetsRefreshDataCall {
+	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 *ProjectsLocationsDatasetsRefreshDataCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsDatasetsRefreshDataCall) 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.refreshdatarequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1p1beta1/{+name}:refreshData")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "speech.projects.locations.datasets.refreshData" 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 *ProjectsLocationsDatasetsRefreshDataCall) 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 := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Refresh data for a dataset.",
+	//   "flatPath": "v1p1beta1/projects/{projectsId}/locations/{locationsId}/datasets/{datasetsId}:refreshData",
+	//   "httpMethod": "POST",
+	//   "id": "speech.projects.locations.datasets.refreshData",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "The resource name of the destination dataset.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+/datasets/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1p1beta1/{+name}:refreshData",
+	//   "request": {
+	//     "$ref": "RefreshDataRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "speech.projects.locations.log_data_stats.list":
+
+type ProjectsLocationsLogDataStatsListCall struct {
+	s            *Service
+	parent       string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// List: List all log data stats associated with this project.
+func (r *ProjectsLocationsLogDataStatsService) List(parent string) *ProjectsLocationsLogDataStatsListCall {
+	c := &ProjectsLocationsLogDataStatsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.parent = parent
+	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 *ProjectsLocationsLogDataStatsListCall) Fields(s ...googleapi.Field) *ProjectsLocationsLogDataStatsListCall {
+	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 *ProjectsLocationsLogDataStatsListCall) IfNoneMatch(entityTag string) *ProjectsLocationsLogDataStatsListCall {
+	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 *ProjectsLocationsLogDataStatsListCall) Context(ctx context.Context) *ProjectsLocationsLogDataStatsListCall {
+	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 *ProjectsLocationsLogDataStatsListCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsLogDataStatsListCall) 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)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1p1beta1/{+parent}/log_data_stats")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "speech.projects.locations.log_data_stats.list" call.
+// Exactly one of *ListLogDataStatsResponse or error will be non-nil.
+// Any non-2xx status code is an error. Response headers are in either
+// *ListLogDataStatsResponse.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 *ProjectsLocationsLogDataStatsListCall) Do(opts ...googleapi.CallOption) (*ListLogDataStatsResponse, 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 := &ListLogDataStatsResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "List all log data stats associated with this project.",
+	//   "flatPath": "v1p1beta1/projects/{projectsId}/locations/{locationsId}/log_data_stats",
+	//   "httpMethod": "GET",
+	//   "id": "speech.projects.locations.log_data_stats.list",
+	//   "parameterOrder": [
+	//     "parent"
+	//   ],
+	//   "parameters": {
+	//     "parent": {
+	//       "description": "Required. Resource name of the parent. Has the format :-\n\"projects/{project_id}/locations/{location_id}\"",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1p1beta1/{+parent}/log_data_stats",
+	//   "response": {
+	//     "$ref": "ListLogDataStatsResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "speech.projects.locations.models.create":
+
+type ProjectsLocationsModelsCreateCall struct {
+	s          *Service
+	parent     string
+	model      *Model
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// Create: Performs asynchronous model training for AutoML: receive
+// results via the
+// google.longrunning.Operations interface. Returns either
+// an
+// `Operation.error` or an `Operation.response` which contains a
+// `Model`
+// message.
+func (r *ProjectsLocationsModelsService) Create(parent string, model *Model) *ProjectsLocationsModelsCreateCall {
+	c := &ProjectsLocationsModelsCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.parent = parent
+	c.model = model
+	return c
+}
+
+// Name sets the optional parameter "name": Required. Resource name of
+// the dataset being used to create the
+// model.
+// '/projects/{project_id}/locations/{location_id}/datasets/{datas
+// et_id}'
+func (c *ProjectsLocationsModelsCreateCall) Name(name string) *ProjectsLocationsModelsCreateCall {
+	c.urlParams_.Set("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 *ProjectsLocationsModelsCreateCall) Fields(s ...googleapi.Field) *ProjectsLocationsModelsCreateCall {
+	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 *ProjectsLocationsModelsCreateCall) Context(ctx context.Context) *ProjectsLocationsModelsCreateCall {
+	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 *ProjectsLocationsModelsCreateCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsModelsCreateCall) 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.model)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1p1beta1/{+parent}/models")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "speech.projects.locations.models.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 *ProjectsLocationsModelsCreateCall) 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 := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Performs asynchronous model training for AutoML: receive results via the\ngoogle.longrunning.Operations interface. Returns either an\n`Operation.error` or an `Operation.response` which contains a `Model`\nmessage.",
+	//   "flatPath": "v1p1beta1/projects/{projectsId}/locations/{locationsId}/models",
+	//   "httpMethod": "POST",
+	//   "id": "speech.projects.locations.models.create",
+	//   "parameterOrder": [
+	//     "parent"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Required. Resource name of the dataset being used to create the model.\n'/projects/{project_id}/locations/{location_id}/datasets/{dataset_id}'",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "parent": {
+	//       "description": "Required. Resource name of the parent. Has the format :-\n\"projects/{project_id}/locations/{location_id}\"",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1p1beta1/{+parent}/models",
+	//   "request": {
+	//     "$ref": "Model"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "speech.projects.locations.models.deploy":
+
+type ProjectsLocationsModelsDeployCall struct {
+	s                  *Service
+	name               string
+	deploymodelrequest *DeployModelRequest
+	urlParams_         gensupport.URLParams
+	ctx_               context.Context
+	header_            http.Header
+}
+
+// Deploy: Performs asynchronous model deployment of the model: receive
+// results
+// via the google.longrunning.Operations interface. After the operation
+// is
+// completed this returns either an `Operation.error` in case of error
+// or
+// a `google.protobuf.Empty` if the deployment was successful.
+func (r *ProjectsLocationsModelsService) Deploy(name string, deploymodelrequest *DeployModelRequest) *ProjectsLocationsModelsDeployCall {
+	c := &ProjectsLocationsModelsDeployCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	c.deploymodelrequest = deploymodelrequest
+	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 *ProjectsLocationsModelsDeployCall) Fields(s ...googleapi.Field) *ProjectsLocationsModelsDeployCall {
+	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 *ProjectsLocationsModelsDeployCall) Context(ctx context.Context) *ProjectsLocationsModelsDeployCall {
+	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 *ProjectsLocationsModelsDeployCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsModelsDeployCall) 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.deploymodelrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1p1beta1/{+name}:deploy")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "speech.projects.locations.models.deploy" 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 *ProjectsLocationsModelsDeployCall) 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 := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Performs asynchronous model deployment of the model: receive results\nvia the google.longrunning.Operations interface. After the operation is\ncompleted this returns either an `Operation.error` in case of error or\na `google.protobuf.Empty` if the deployment was successful.",
+	//   "flatPath": "v1p1beta1/projects/{projectsId}/locations/{locationsId}/models/{modelsId}:deploy",
+	//   "httpMethod": "POST",
+	//   "id": "speech.projects.locations.models.deploy",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Resource name of the model.\nFormat: \"projects/{project_id}/locations/{location_id}/models/{model_id}\"",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+/models/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1p1beta1/{+name}:deploy",
+	//   "request": {
+	//     "$ref": "DeployModelRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "speech.projects.locations.models.evaluate":
+
+type ProjectsLocationsModelsEvaluateCall struct {
+	s                    *Service
+	name                 string
+	evaluatemodelrequest *EvaluateModelRequest
+	urlParams_           gensupport.URLParams
+	ctx_                 context.Context
+	header_              http.Header
+}
+
+// Evaluate: Performs asynchronous evaluation of the model: receive
+// results
+// via the google.longrunning.Operations interface. After the operation
+// is
+// completed this returns either an `Operation.error` in case of error
+// or
+// a `EvaluateModelResponse` with the evaluation results.
+func (r *ProjectsLocationsModelsService) Evaluate(name string, evaluatemodelrequest *EvaluateModelRequest) *ProjectsLocationsModelsEvaluateCall {
+	c := &ProjectsLocationsModelsEvaluateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	c.evaluatemodelrequest = evaluatemodelrequest
+	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 *ProjectsLocationsModelsEvaluateCall) Fields(s ...googleapi.Field) *ProjectsLocationsModelsEvaluateCall {
+	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 *ProjectsLocationsModelsEvaluateCall) Context(ctx context.Context) *ProjectsLocationsModelsEvaluateCall {
+	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 *ProjectsLocationsModelsEvaluateCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsModelsEvaluateCall) 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.evaluatemodelrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1p1beta1/{+name}:evaluate")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "speech.projects.locations.models.evaluate" 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 *ProjectsLocationsModelsEvaluateCall) 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 := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Performs asynchronous evaluation of the model: receive results\nvia the google.longrunning.Operations interface. After the operation is\ncompleted this returns either an `Operation.error` in case of error or\na `EvaluateModelResponse` with the evaluation results.",
+	//   "flatPath": "v1p1beta1/projects/{projectsId}/locations/{locationsId}/models/{modelsId}:evaluate",
+	//   "httpMethod": "POST",
+	//   "id": "speech.projects.locations.models.evaluate",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Resource name of the model.\nFormat: \"projects/{project_id}/locations/{location_id}/models/{model_id}\"",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+/models/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1p1beta1/{+name}:evaluate",
+	//   "request": {
+	//     "$ref": "EvaluateModelRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "speech.projects.locations.models.list":
+
+type ProjectsLocationsModelsListCall struct {
+	s            *Service
+	parent       string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// List: Fetch the list of models associated with this project.
+func (r *ProjectsLocationsModelsService) List(parent string) *ProjectsLocationsModelsListCall {
+	c := &ProjectsLocationsModelsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.parent = parent
+	return c
+}
+
+// Filter sets the optional parameter "filter": Filter the response
+// based on display_name of the model. For e.g
+// display_name=Foo The filter string is case sensitive
+func (c *ProjectsLocationsModelsListCall) Filter(filter string) *ProjectsLocationsModelsListCall {
+	c.urlParams_.Set("filter", filter)
+	return c
+}
+
+// PageSize sets the optional parameter "pageSize": The maximum number
+// of items to return.
+func (c *ProjectsLocationsModelsListCall) PageSize(pageSize int64) *ProjectsLocationsModelsListCall {
+	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": The
+// next_page_token value returned from a previous List request, if any.
+func (c *ProjectsLocationsModelsListCall) PageToken(pageToken string) *ProjectsLocationsModelsListCall {
+	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 *ProjectsLocationsModelsListCall) Fields(s ...googleapi.Field) *ProjectsLocationsModelsListCall {
+	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 *ProjectsLocationsModelsListCall) IfNoneMatch(entityTag string) *ProjectsLocationsModelsListCall {
+	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 *ProjectsLocationsModelsListCall) Context(ctx context.Context) *ProjectsLocationsModelsListCall {
+	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 *ProjectsLocationsModelsListCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsModelsListCall) 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)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1p1beta1/{+parent}/models")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	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 "speech.projects.locations.models.list" call.
+// Exactly one of *ListModelsResponse or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *ListModelsResponse.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 *ProjectsLocationsModelsListCall) Do(opts ...googleapi.CallOption) (*ListModelsResponse, 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 := &ListModelsResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Fetch the list of models associated with this project.",
+	//   "flatPath": "v1p1beta1/projects/{projectsId}/locations/{locationsId}/models",
+	//   "httpMethod": "GET",
+	//   "id": "speech.projects.locations.models.list",
+	//   "parameterOrder": [
+	//     "parent"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "Filter the response based on display_name of the model. For e.g\ndisplay_name=Foo The filter string is case sensitive",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "pageSize": {
+	//       "description": "The maximum number of items to return.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "The next_page_token value returned from a previous List request, if any.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "parent": {
+	//       "description": "Required. Resource name of the parent. Has the format :-\n\"projects/{project_id}/locations/{location_id}\"",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1p1beta1/{+parent}/models",
+	//   "response": {
+	//     "$ref": "ListModelsResponse"
+	//   },
+	//   "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 *ProjectsLocationsModelsListCall) Pages(ctx context.Context, f func(*ListModelsResponse) 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 "speech.speech.longrunningrecognize":
+
+type SpeechLongrunningrecognizeCall struct {
+	s                           *Service
+	longrunningrecognizerequest *LongRunningRecognizeRequest
+	urlParams_                  gensupport.URLParams
+	ctx_                        context.Context
+	header_                     http.Header
+}
+
+// Longrunningrecognize: Performs asynchronous speech recognition:
+// receive results via the
+// google.longrunning.Operations interface. Returns either
+// an
+// `Operation.error` or an `Operation.response` which contains
+// a `LongRunningRecognizeResponse` message.
+func (r *SpeechService) Longrunningrecognize(longrunningrecognizerequest *LongRunningRecognizeRequest) *SpeechLongrunningrecognizeCall {
+	c := &SpeechLongrunningrecognizeCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.longrunningrecognizerequest = longrunningrecognizerequest
+	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 *SpeechLongrunningrecognizeCall) Fields(s ...googleapi.Field) *SpeechLongrunningrecognizeCall {
+	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 *SpeechLongrunningrecognizeCall) Context(ctx context.Context) *SpeechLongrunningrecognizeCall {
+	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 *SpeechLongrunningrecognizeCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *SpeechLongrunningrecognizeCall) 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.longrunningrecognizerequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1p1beta1/speech:longrunningrecognize")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "speech.speech.longrunningrecognize" 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 *SpeechLongrunningrecognizeCall) 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 := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Performs asynchronous speech recognition: receive results via the\ngoogle.longrunning.Operations interface. Returns either an\n`Operation.error` or an `Operation.response` which contains\na `LongRunningRecognizeResponse` message.",
+	//   "flatPath": "v1p1beta1/speech:longrunningrecognize",
+	//   "httpMethod": "POST",
+	//   "id": "speech.speech.longrunningrecognize",
+	//   "parameterOrder": [],
+	//   "parameters": {},
+	//   "path": "v1p1beta1/speech:longrunningrecognize",
+	//   "request": {
+	//     "$ref": "LongRunningRecognizeRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "speech.speech.recognize":
+
+type SpeechRecognizeCall struct {
+	s                *Service
+	recognizerequest *RecognizeRequest
+	urlParams_       gensupport.URLParams
+	ctx_             context.Context
+	header_          http.Header
+}
+
+// Recognize: Performs synchronous speech recognition: receive results
+// after all audio
+// has been sent and processed.
+func (r *SpeechService) Recognize(recognizerequest *RecognizeRequest) *SpeechRecognizeCall {
+	c := &SpeechRecognizeCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.recognizerequest = recognizerequest
+	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 *SpeechRecognizeCall) Fields(s ...googleapi.Field) *SpeechRecognizeCall {
+	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 *SpeechRecognizeCall) Context(ctx context.Context) *SpeechRecognizeCall {
+	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 *SpeechRecognizeCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *SpeechRecognizeCall) 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.recognizerequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1p1beta1/speech:recognize")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "speech.speech.recognize" call.
+// Exactly one of *RecognizeResponse or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *RecognizeResponse.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 *SpeechRecognizeCall) Do(opts ...googleapi.CallOption) (*RecognizeResponse, 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 := &RecognizeResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Performs synchronous speech recognition: receive results after all audio\nhas been sent and processed.",
+	//   "flatPath": "v1p1beta1/speech:recognize",
+	//   "httpMethod": "POST",
+	//   "id": "speech.speech.recognize",
+	//   "parameterOrder": [],
+	//   "parameters": {},
+	//   "path": "v1p1beta1/speech:recognize",
+	//   "request": {
+	//     "$ref": "RecognizeRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "RecognizeResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
diff --git a/storage/v1/storage-api.json b/storage/v1/storage-api.json
index a5b62c6..49d0a51 100644
--- a/storage/v1/storage-api.json
+++ b/storage/v1/storage-api.json
@@ -26,7 +26,7 @@
   "description": "Stores and retrieves potentially large, immutable data objects.",
   "discoveryVersion": "v1",
   "documentationLink": "https://developers.google.com/storage/docs/json_api/",
-  "etag": "\"J3WqvAcMk4eQjJXvfSI4Yr8VouA/LSpI3fR5lOQdDA6XHHjB1Bie2kU\"",
+  "etag": "\"J3WqvAcMk4eQjJXvfSI4Yr8VouA/KPalWULMnQfaqumeaBhBrVfHFNM\"",
   "icons": {
     "x16": "https://www.google.com/images/icons/product/cloud_storage-16.png",
     "x32": "https://www.google.com/images/icons/product/cloud_storage-32.png"
@@ -2766,7 +2766,7 @@
       }
     }
   },
-  "revision": "20181013",
+  "revision": "20181109",
   "rootUrl": "https://www.googleapis.com/",
   "schemas": {
     "Bucket": {
@@ -2855,6 +2855,26 @@
           "description": "HTTP 1.1 Entity tag for the bucket.",
           "type": "string"
         },
+        "iamConfiguration": {
+          "description": "The bucket's IAM configuration.",
+          "properties": {
+            "bucketPolicyOnly": {
+              "properties": {
+                "enabled": {
+                  "description": "If set, access checks only use bucket-level IAM policies or above.",
+                  "type": "boolean"
+                },
+                "lockedTime": {
+                  "description": "The deadline time for changing iamConfiguration.bucketPolicyOnly.enabled from true to false in RFC 3339 format. iamConfiguration.bucketPolicyOnly.enabled may be changed from true to false until the locked time, after which the field is immutable.",
+                  "format": "date-time",
+                  "type": "string"
+                }
+              },
+              "type": "object"
+            }
+          },
+          "type": "object"
+        },
         "id": {
           "description": "The ID of the bucket. For buckets, the id and name properties are the same.",
           "type": "string"
diff --git a/storage/v1/storage-gen.go b/storage/v1/storage-gen.go
index b8eabcc..045df00 100644
--- a/storage/v1/storage-gen.go
+++ b/storage/v1/storage-gen.go
@@ -247,6 +247,9 @@
 	// Etag: HTTP 1.1 Entity tag for the bucket.
 	Etag string `json:"etag,omitempty"`
 
+	// IamConfiguration: The bucket's IAM configuration.
+	IamConfiguration *BucketIamConfiguration `json:"iamConfiguration,omitempty"`
+
 	// Id: The ID of the bucket. For buckets, the id and name properties are
 	// the same.
 	Id string `json:"id,omitempty"`
@@ -454,6 +457,69 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// BucketIamConfiguration: The bucket's IAM configuration.
+type BucketIamConfiguration struct {
+	BucketPolicyOnly *BucketIamConfigurationBucketPolicyOnly `json:"bucketPolicyOnly,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "BucketPolicyOnly") 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. "BucketPolicyOnly") 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 *BucketIamConfiguration) MarshalJSON() ([]byte, error) {
+	type NoMethod BucketIamConfiguration
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type BucketIamConfigurationBucketPolicyOnly struct {
+	// Enabled: If set, access checks only use bucket-level IAM policies or
+	// above.
+	Enabled bool `json:"enabled,omitempty"`
+
+	// LockedTime: The deadline time for changing
+	// iamConfiguration.bucketPolicyOnly.enabled from true to false in RFC
+	// 3339 format. iamConfiguration.bucketPolicyOnly.enabled may be changed
+	// from true to false until the locked time, after which the field is
+	// immutable.
+	LockedTime string `json:"lockedTime,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 *BucketIamConfigurationBucketPolicyOnly) MarshalJSON() ([]byte, error) {
+	type NoMethod BucketIamConfigurationBucketPolicyOnly
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // BucketLifecycle: The bucket's lifecycle configuration. See lifecycle
 // management for more information.
 type BucketLifecycle struct {
diff --git a/streetviewpublish/v1/streetviewpublish-api.json b/streetviewpublish/v1/streetviewpublish-api.json
index 330fff6..2bc6260 100644
--- a/streetviewpublish/v1/streetviewpublish-api.json
+++ b/streetviewpublish/v1/streetviewpublish-api.json
@@ -157,6 +157,11 @@
             "photoId"
           ],
           "parameters": {
+            "languageCode": {
+              "description": "The BCP-47 language code, such as \"en-US\" or \"sr-Latn\". For more\ninformation, see\nhttp://www.unicode.org/reports/tr35/#Unicode_locale_identifier.\nIf language_code is unspecified, the user's language preference for Google\nservices will be used.",
+              "location": "query",
+              "type": "string"
+            },
             "photoId": {
               "description": "Required. ID of the Photo.",
               "location": "path",
@@ -261,6 +266,11 @@
           "id": "streetviewpublish.photos.batchGet",
           "parameterOrder": [],
           "parameters": {
+            "languageCode": {
+              "description": "The BCP-47 language code, such as \"en-US\" or \"sr-Latn\". For more\ninformation, see\nhttp://www.unicode.org/reports/tr35/#Unicode_locale_identifier.\nIf language_code is unspecified, the user's language preference for Google\nservices will be used.",
+              "location": "query",
+              "type": "string"
+            },
             "photoIds": {
               "description": "Required. IDs of the Photos. For HTTP\nGET requests, the URL query parameter should be\n`photoIds=\u003cid1\u003e\u0026photoIds=\u003cid2\u003e\u0026...`.",
               "location": "query",
@@ -315,6 +325,11 @@
               "location": "query",
               "type": "string"
             },
+            "languageCode": {
+              "description": "The BCP-47 language code, such as \"en-US\" or \"sr-Latn\". For more\ninformation, see\nhttp://www.unicode.org/reports/tr35/#Unicode_locale_identifier.\nIf language_code is unspecified, the user's language preference for Google\nservices will be used.",
+              "location": "query",
+              "type": "string"
+            },
             "pageSize": {
               "description": "The maximum number of photos to return.\n`pageSize` must be non-negative. If `pageSize` is zero or is not provided,\nthe default page size of 100 will be used.\nThe number of photos returned in the response may be less than `pageSize`\nif the number of photos that belong to the user is less than `pageSize`.",
               "format": "int32",
@@ -347,7 +362,7 @@
       }
     }
   },
-  "revision": "20180927",
+  "revision": "20181128",
   "rootUrl": "https://streetviewpublish.googleapis.com/",
   "schemas": {
     "BatchDeletePhotosRequest": {
@@ -543,6 +558,20 @@
           "description": "Output only. The download URL for the photo bytes. This field is set only\nwhen\nGetPhotoRequest.view\nis set to\nPhotoView.INCLUDE_DOWNLOAD_URL.",
           "type": "string"
         },
+        "mapsPublishStatus": {
+          "description": "Output only. Status in Google Maps, whether this photo was published, or\nrejected for a possibly specified reason.",
+          "enum": [
+            "UNSPECIFIED_MAPS_PUBLISH_STATUS",
+            "PUBLISHED",
+            "REJECTED_UNKNOWN"
+          ],
+          "enumDescriptions": [
+            "The status of the photo is unknown.",
+            "The photo is published to the public through Google Maps.",
+            "The photo has been rejected for an unknown reason."
+          ],
+          "type": "string"
+        },
         "photoId": {
           "$ref": "PhotoId",
           "description": "Required when updating a photo. Output only when creating a photo.\nIdentifier for the photo, which is unique among all photos in\nGoogle."
@@ -566,6 +595,30 @@
           "description": "Output only. The thumbnail URL for showing a preview of the given photo.",
           "type": "string"
         },
+        "transferStatus": {
+          "description": "Output only. Status of rights transfer on this photo.",
+          "enum": [
+            "TRANSFER_STATUS_UNKNOWN",
+            "NEVER_TRANSFERRED",
+            "PENDING",
+            "COMPLETED",
+            "REJECTED",
+            "EXPIRED",
+            "CANCELLED",
+            "RECEIVED_VIA_TRANSFER"
+          ],
+          "enumDescriptions": [
+            "The status of this transfer is unspecified.",
+            "This photo has never been in a transfer.",
+            "This photo transfer has been initiated, but the receiver has not yet\nresponded.",
+            "The photo transfer has been completed, and this photo has been\ntransferred to the recipient.",
+            "The recipient rejected this photo transfer.",
+            "The photo transfer expired before the recipient took any action.",
+            "The sender cancelled this photo transfer.",
+            "The recipient owns this photo due to a rights transfer."
+          ],
+          "type": "string"
+        },
         "uploadReference": {
           "$ref": "UploadRef",
           "description": "Required when creating a photo. Input only. The resource URL where the\nphoto bytes are uploaded to."
@@ -608,6 +661,14 @@
       "description": "Place metadata for an entity.",
       "id": "Place",
       "properties": {
+        "languageCode": {
+          "description": "Output-only. The language_code that the name is localized with. This should\nbe the language_code specified in the request, but may be a fallback.",
+          "type": "string"
+        },
+        "name": {
+          "description": "Output-only. The name of the place, localized to the language_code.",
+          "type": "string"
+        },
         "placeId": {
           "description": "Place identifier, as described in\nhttps://developers.google.com/places/place-id.",
           "type": "string"
diff --git a/streetviewpublish/v1/streetviewpublish-gen.go b/streetviewpublish/v1/streetviewpublish-gen.go
index ae824d0..e07e659 100644
--- a/streetviewpublish/v1/streetviewpublish-gen.go
+++ b/streetviewpublish/v1/streetviewpublish-gen.go
@@ -573,6 +573,19 @@
 	// PhotoView.INCLUDE_DOWNLOAD_URL.
 	DownloadUrl string `json:"downloadUrl,omitempty"`
 
+	// MapsPublishStatus: Output only. Status in Google Maps, whether this
+	// photo was published, or
+	// rejected for a possibly specified reason.
+	//
+	// Possible values:
+	//   "UNSPECIFIED_MAPS_PUBLISH_STATUS" - The status of the photo is
+	// unknown.
+	//   "PUBLISHED" - The photo is published to the public through Google
+	// Maps.
+	//   "REJECTED_UNKNOWN" - The photo has been rejected for an unknown
+	// reason.
+	MapsPublishStatus string `json:"mapsPublishStatus,omitempty"`
+
 	// PhotoId: Required when updating a photo. Output only when creating a
 	// photo.
 	// Identifier for the photo, which is unique among all photos in
@@ -592,6 +605,26 @@
 	// the given photo.
 	ThumbnailUrl string `json:"thumbnailUrl,omitempty"`
 
+	// TransferStatus: Output only. Status of rights transfer on this photo.
+	//
+	// Possible values:
+	//   "TRANSFER_STATUS_UNKNOWN" - The status of this transfer is
+	// unspecified.
+	//   "NEVER_TRANSFERRED" - This photo has never been in a transfer.
+	//   "PENDING" - This photo transfer has been initiated, but the
+	// receiver has not yet
+	// responded.
+	//   "COMPLETED" - The photo transfer has been completed, and this photo
+	// has been
+	// transferred to the recipient.
+	//   "REJECTED" - The recipient rejected this photo transfer.
+	//   "EXPIRED" - The photo transfer expired before the recipient took
+	// any action.
+	//   "CANCELLED" - The sender cancelled this photo transfer.
+	//   "RECEIVED_VIA_TRANSFER" - The recipient owns this photo due to a
+	// rights transfer.
+	TransferStatus string `json:"transferStatus,omitempty"`
+
 	// UploadReference: Required when creating a photo. Input only. The
 	// resource URL where the
 	// photo bytes are uploaded to.
@@ -696,12 +729,21 @@
 
 // Place: Place metadata for an entity.
 type Place struct {
+	// LanguageCode: Output-only. The language_code that the name is
+	// localized with. This should
+	// be the language_code specified in the request, but may be a fallback.
+	LanguageCode string `json:"languageCode,omitempty"`
+
+	// Name: Output-only. The name of the place, localized to the
+	// language_code.
+	Name string `json:"name,omitempty"`
+
 	// PlaceId: Place identifier, as described
 	// in
 	// https://developers.google.com/places/place-id.
 	PlaceId string `json:"placeId,omitempty"`
 
-	// ForceSendFields is a list of field names (e.g. "PlaceId") to
+	// ForceSendFields is a list of field names (e.g. "LanguageCode") 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
@@ -709,10 +751,10 @@
 	// used to include empty fields in Patch requests.
 	ForceSendFields []string `json:"-"`
 
-	// NullFields is a list of field names (e.g. "PlaceId") 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
+	// NullFields is a list of field names (e.g. "LanguageCode") 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:"-"`
@@ -1361,6 +1403,20 @@
 	return c
 }
 
+// LanguageCode sets the optional parameter "languageCode": The BCP-47
+// language code, such as "en-US" or "sr-Latn". For more
+// information,
+// see
+// http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
+// If
+//  language_code is unspecified, the user's language preference for
+// Google
+// services will be used.
+func (c *PhotoGetCall) LanguageCode(languageCode string) *PhotoGetCall {
+	c.urlParams_.Set("languageCode", languageCode)
+	return c
+}
+
 // View sets the optional parameter "view": Specifies if a download URL
 // for the photo bytes should be returned in the
 // Photo response.
@@ -1479,6 +1535,11 @@
 	//     "photoId"
 	//   ],
 	//   "parameters": {
+	//     "languageCode": {
+	//       "description": "The BCP-47 language code, such as \"en-US\" or \"sr-Latn\". For more\ninformation, see\nhttp://www.unicode.org/reports/tr35/#Unicode_locale_identifier.\nIf language_code is unspecified, the user's language preference for Google\nservices will be used.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
 	//     "photoId": {
 	//       "description": "Required. ID of the Photo.",
 	//       "location": "path",
@@ -2037,6 +2098,20 @@
 	return c
 }
 
+// LanguageCode sets the optional parameter "languageCode": The BCP-47
+// language code, such as "en-US" or "sr-Latn". For more
+// information,
+// see
+// http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
+// If
+//  language_code is unspecified, the user's language preference for
+// Google
+// services will be used.
+func (c *PhotosBatchGetCall) LanguageCode(languageCode string) *PhotosBatchGetCall {
+	c.urlParams_.Set("languageCode", languageCode)
+	return c
+}
+
 // PhotoIds sets the optional parameter "photoIds": Required. IDs of the
 // Photos. For HTTP
 // GET requests, the URL query parameter should
@@ -2160,6 +2235,11 @@
 	//   "id": "streetviewpublish.photos.batchGet",
 	//   "parameterOrder": [],
 	//   "parameters": {
+	//     "languageCode": {
+	//       "description": "The BCP-47 language code, such as \"en-US\" or \"sr-Latn\". For more\ninformation, see\nhttp://www.unicode.org/reports/tr35/#Unicode_locale_identifier.\nIf language_code is unspecified, the user's language preference for Google\nservices will be used.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
 	//     "photoIds": {
 	//       "description": "Required. IDs of the Photos. For HTTP\nGET requests, the URL query parameter should be\n`photoIds=\u003cid1\u003e\u0026photoIds=\u003cid2\u003e\u0026...`.",
 	//       "location": "query",
@@ -2374,6 +2454,20 @@
 	return c
 }
 
+// LanguageCode sets the optional parameter "languageCode": The BCP-47
+// language code, such as "en-US" or "sr-Latn". For more
+// information,
+// see
+// http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
+// If
+//  language_code is unspecified, the user's language preference for
+// Google
+// services will be used.
+func (c *PhotosListCall) LanguageCode(languageCode string) *PhotosListCall {
+	c.urlParams_.Set("languageCode", languageCode)
+	return c
+}
+
 // PageSize sets the optional parameter "pageSize": The maximum number
 // of photos to return.
 // `pageSize` must be non-negative. If `pageSize` is zero or is not
@@ -2517,6 +2611,11 @@
 	//       "location": "query",
 	//       "type": "string"
 	//     },
+	//     "languageCode": {
+	//       "description": "The BCP-47 language code, such as \"en-US\" or \"sr-Latn\". For more\ninformation, see\nhttp://www.unicode.org/reports/tr35/#Unicode_locale_identifier.\nIf language_code is unspecified, the user's language preference for Google\nservices will be used.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
 	//     "pageSize": {
 	//       "description": "The maximum number of photos to return.\n`pageSize` must be non-negative. If `pageSize` is zero or is not provided,\nthe default page size of 100 will be used.\nThe number of photos returned in the response may be less than `pageSize`\nif the number of photos that belong to the user is less than `pageSize`.",
 	//       "format": "int32",
diff --git a/testing/v1/testing-api.json b/testing/v1/testing-api.json
index b519e2e..6e0633e 100644
--- a/testing/v1/testing-api.json
+++ b/testing/v1/testing-api.json
@@ -272,7 +272,7 @@
       }
     }
   },
-  "revision": "20181025",
+  "revision": "20181127",
   "rootUrl": "https://testing.googleapis.com/",
   "schemas": {
     "Account": {
@@ -356,6 +356,10 @@
           "$ref": "FileReference",
           "description": "The APK for the application under test."
         },
+        "appBundle": {
+          "$ref": "AppBundle",
+          "description": "A multi-apk app bundle for the application under test."
+        },
         "appPackageId": {
           "description": "The java package for the application under test.\nOptional, default is determined by examining the application's manifest.",
           "type": "string"
@@ -524,10 +528,6 @@
             "type": "string"
           },
           "type": "array"
-        },
-        "videoRecordingNotSupported": {
-          "description": "True if and only if tests with this model DO NOT have video output.\nSee also TestSpecification.disable_video_recording\n@OutputOnly",
-          "type": "boolean"
         }
       },
       "type": "object"
@@ -540,6 +540,10 @@
           "$ref": "FileReference",
           "description": "The APK for the application under test."
         },
+        "appBundle": {
+          "$ref": "AppBundle",
+          "description": "A multi-apk app bundle for the application under test."
+        },
         "appInitialActivity": {
           "description": "The initial activity that should be used to start the app.\nOptional",
           "type": "string"
@@ -608,6 +612,10 @@
           "$ref": "FileReference",
           "description": "The APK for the application under test."
         },
+        "appBundle": {
+          "$ref": "AppBundle",
+          "description": "A multi-apk app bundle for the application under test."
+        },
         "appPackageId": {
           "description": "The java package for the application under test.\nOptional, default is determined by examining the application's manifest.",
           "type": "string"
@@ -725,6 +733,17 @@
       },
       "type": "object"
     },
+    "AppBundle": {
+      "description": "An Android App Bundle file format, containing a BundleConfig.pb file,\na base module directory, zero or more dynamic feature module directories.\n\u003cp\u003eSee https://developer.android.com/guide/app-bundle/build for guidance on\nbuilding App Bundles.",
+      "id": "AppBundle",
+      "properties": {
+        "bundleLocation": {
+          "$ref": "FileReference",
+          "description": ".aab file representing the app bundle under test."
+        }
+      },
+      "type": "object"
+    },
     "CancelTestMatrixResponse": {
       "description": "Response containing the current state of the specified test matrix.",
       "id": "CancelTestMatrixResponse",
@@ -1391,10 +1410,6 @@
             "type": "string"
           },
           "type": "array"
-        },
-        "videoRecordingDisabled": {
-          "description": "Indicates that video will not be recorded for this execution either because\nthe user chose to disable it or the device does not support it.\nSee AndroidModel.video_recording_not_supported\n@OutputOnly",
-          "type": "boolean"
         }
       },
       "type": "object"
diff --git a/testing/v1/testing-gen.go b/testing/v1/testing-gen.go
index 1bdf458..4ee7f84 100644
--- a/testing/v1/testing-gen.go
+++ b/testing/v1/testing-gen.go
@@ -303,6 +303,9 @@
 	// AppApk: The APK for the application under test.
 	AppApk *FileReference `json:"appApk,omitempty"`
 
+	// AppBundle: A multi-apk app bundle for the application under test.
+	AppBundle *AppBundle `json:"appBundle,omitempty"`
+
 	// AppPackageId: The java package for the application under
 	// test.
 	// Optional, default is determined by examining the application's
@@ -544,12 +547,6 @@
 	// Examples: "default", "preview", "deprecated"
 	Tags []string `json:"tags,omitempty"`
 
-	// VideoRecordingNotSupported: True if and only if tests with this model
-	// DO NOT have video output.
-	// See also TestSpecification.disable_video_recording
-	// @OutputOnly
-	VideoRecordingNotSupported bool `json:"videoRecordingNotSupported,omitempty"`
-
 	// ForceSendFields is a list of field names (e.g. "Brand") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
@@ -580,6 +577,9 @@
 	// AppApk: The APK for the application under test.
 	AppApk *FileReference `json:"appApk,omitempty"`
 
+	// AppBundle: A multi-apk app bundle for the application under test.
+	AppBundle *AppBundle `json:"appBundle,omitempty"`
+
 	// AppInitialActivity: The initial activity that should be used to start
 	// the app.
 	// Optional
@@ -690,6 +690,9 @@
 	// AppApk: The APK for the application under test.
 	AppApk *FileReference `json:"appApk,omitempty"`
 
+	// AppBundle: A multi-apk app bundle for the application under test.
+	AppBundle *AppBundle `json:"appBundle,omitempty"`
+
 	// AppPackageId: The java package for the application under
 	// test.
 	// Optional, default is determined by examining the application's
@@ -909,6 +912,41 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// AppBundle: An Android App Bundle file format, containing a
+// BundleConfig.pb file,
+// a base module directory, zero or more dynamic feature module
+// directories.
+// <p>See https://developer.android.com/guide/app-bundle/build for
+// guidance on
+// building App Bundles.
+type AppBundle struct {
+	// BundleLocation: .aab file representing the app bundle under test.
+	BundleLocation *FileReference `json:"bundleLocation,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "BundleLocation") 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. "BundleLocation") 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 *AppBundle) MarshalJSON() ([]byte, error) {
+	type NoMethod AppBundle
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // CancelTestMatrixResponse: Response containing the current state of
 // the specified test matrix.
 type CancelTestMatrixResponse struct {
@@ -2269,13 +2307,6 @@
 	// @OutputOnly
 	ProgressMessages []string `json:"progressMessages,omitempty"`
 
-	// VideoRecordingDisabled: Indicates that video will not be recorded for
-	// this execution either because
-	// the user chose to disable it or the device does not support it.
-	// See AndroidModel.video_recording_not_supported
-	// @OutputOnly
-	VideoRecordingDisabled bool `json:"videoRecordingDisabled,omitempty"`
-
 	// ForceSendFields is a list of field names (e.g. "ErrorMessage") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
diff --git a/toolresults/v1beta3/toolresults-api.json b/toolresults/v1beta3/toolresults-api.json
index a2a6d00..c8f557e 100644
--- a/toolresults/v1beta3/toolresults-api.json
+++ b/toolresults/v1beta3/toolresults-api.json
@@ -15,7 +15,7 @@
   "description": "Reads and publishes results from Firebase Test Lab.",
   "discoveryVersion": "v1",
   "documentationLink": "https://firebase.google.com/docs/test-lab/",
-  "etag": "\"J3WqvAcMk4eQjJXvfSI4Yr8VouA/_Esioxt9mNFRR9ecCLcn5NMiXF8\"",
+  "etag": "\"J3WqvAcMk4eQjJXvfSI4Yr8VouA/y92ZBD_TKKKguL_TSM7yuUk3ht0\"",
   "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"
@@ -1161,7 +1161,7 @@
       }
     }
   },
-  "revision": "20181015",
+  "revision": "20181128",
   "rootUrl": "https://www.googleapis.com/",
   "schemas": {
     "AndroidAppInfo": {
@@ -2424,7 +2424,7 @@
       "type": "object"
     },
     "Timestamp": {
-      "description": "A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are \"smeared\" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt).\n\n# Examples\n\nExample 1: Compute Timestamp from POSIX `time()`.\n\nTimestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);\n\nExample 2: Compute Timestamp from POSIX `gettimeofday()`.\n\nstruct timeval tv; gettimeofday(\u0026tv, NULL);\n\nTimestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);\n\nExample 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\nFILETIME ft; GetSystemTimeAsFileTime(\u0026ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) \u003c\u003c 32) | ft.dwLowDateTime;\n\n// A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\nExample 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\nlong millis = System.currentTimeMillis();\n\nTimestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n\n\nExample 5: Compute Timestamp from current time in Python.\n\ntimestamp = Timestamp() timestamp.GetCurrentTime()\n\n# JSON Mapping\n\nIn JSON format, the Timestamp type is encoded as a string in the [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\" where {year} is always expressed using four digits while {month}, {day}, {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone is required. A proto3 JSON serializer should always use UTC (as indicated by \"Z\") when printing the Timestamp type and a proto3 JSON parser should be able to accept both UTC and other timezones (as indicated by an offset).\n\nFor example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past 01:30 UTC on January 15, 2017.\n\nIn JavaScript, one can convert a Date object to this format using the standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) method. In Python, a standard `datetime.datetime` object can be converted to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use the Joda Time's [`ISODateTimeFormat.dateTime()`]( http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime%2D%2D ) to obtain a formatter capable of generating timestamps in this format.",
+      "description": "A Timestamp represents a point in time independent of any time zone or local calendar, encoded as a count of seconds and fractions of seconds at nanosecond resolution. The count is relative to an epoch at UTC midnight on January 1, 1970, in the proleptic Gregorian calendar which extends the Gregorian calendar backwards to year one.\n\nAll minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap second table is needed for interpretation, using a [24-hour linear smear](https://developers.google.com/time/smear).\n\nThe range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n# Examples\n\nExample 1: Compute Timestamp from POSIX `time()`.\n\nTimestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);\n\nExample 2: Compute Timestamp from POSIX `gettimeofday()`.\n\nstruct timeval tv; gettimeofday(\u0026tv, NULL);\n\nTimestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);\n\nExample 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\nFILETIME ft; GetSystemTimeAsFileTime(\u0026ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) \u003c\u003c 32) | ft.dwLowDateTime;\n\n// A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\nExample 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\nlong millis = System.currentTimeMillis();\n\nTimestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n\n\nExample 5: Compute Timestamp from current time in Python.\n\ntimestamp = Timestamp() timestamp.GetCurrentTime()\n\n# JSON Mapping\n\nIn JSON format, the Timestamp type is encoded as a string in the [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\" where {year} is always expressed using four digits while {month}, {day}, {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone is required. A proto3 JSON serializer should always use UTC (as indicated by \"Z\") when printing the Timestamp type and a proto3 JSON parser should be able to accept both UTC and other timezones (as indicated by an offset).\n\nFor example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past 01:30 UTC on January 15, 2017.\n\nIn JavaScript, one can convert a Date object to this format using the standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) method. In Python, a standard `datetime.datetime` object can be converted to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use the Joda Time's [`ISODateTimeFormat.dateTime()`]( http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime%2D%2D ) to obtain a formatter capable of generating timestamps in this format.",
       "id": "Timestamp",
       "properties": {
         "nanos": {
diff --git a/toolresults/v1beta3/toolresults-gen.go b/toolresults/v1beta3/toolresults-gen.go
index 3354ac9..d46f4d1 100644
--- a/toolresults/v1beta3/toolresults-gen.go
+++ b/toolresults/v1beta3/toolresults-gen.go
@@ -2746,17 +2746,20 @@
 }
 
 // Timestamp: A Timestamp represents a point in time independent of any
-// time zone or calendar, represented as seconds and fractions of
-// seconds at nanosecond resolution in UTC Epoch time. It is encoded
-// using the Proleptic Gregorian Calendar which extends the Gregorian
-// calendar backwards to year one. It is encoded assuming all minutes
-// are 60 seconds long, i.e. leap seconds are "smeared" so that no leap
-// second table is needed for interpretation. Range is from
-// 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By
-// restricting to that range, we ensure that we can convert to and from
-// RFC 3339 date strings. See
-// [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc333
-// 9.txt).
+// time zone or local calendar, encoded as a count of seconds and
+// fractions of seconds at nanosecond resolution. The count is relative
+// to an epoch at UTC midnight on January 1, 1970, in the proleptic
+// Gregorian calendar which extends the Gregorian calendar backwards to
+// year one.
+//
+// All minutes are 60 seconds long. Leap seconds are "smeared" so that
+// no leap second table is needed for interpretation, using a [24-hour
+// linear smear](https://developers.google.com/time/smear).
+//
+// The range is from 0001-01-01T00:00:00Z to
+// 9999-12-31T23:59:59.999999999Z. By restricting to that range, we
+// ensure that we can convert to and from [RFC
+// 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.
 //
 // # Examples
 //
diff --git a/vault/v1/vault-api.json b/vault/v1/vault-api.json
index 22b2976..7ea595a 100644
--- a/vault/v1/vault-api.json
+++ b/vault/v1/vault-api.json
@@ -1024,7 +1024,7 @@
       }
     }
   },
-  "revision": "20181106",
+  "revision": "20181128",
   "rootUrl": "https://vault.googleapis.com/",
   "schemas": {
     "AccountInfo": {
@@ -1300,6 +1300,22 @@
         "mailOptions": {
           "$ref": "MailExportOptions",
           "description": "Option available for mail export."
+        },
+        "region": {
+          "description": "The requested export location.",
+          "enum": [
+            "EXPORT_REGION_UNSPECIFIED",
+            "ANY",
+            "US",
+            "EUROPE"
+          ],
+          "enumDescriptions": [
+            "The region is unspecified. Will be treated the same as ANY.",
+            "Any region.",
+            "US region.",
+            "Europe region."
+          ],
+          "type": "string"
         }
       },
       "type": "object"
@@ -1645,10 +1661,6 @@
             "PST as export format"
           ],
           "type": "string"
-        },
-        "showConfidentialModeContent": {
-          "description": "Set to true to export confidential mode content",
-          "type": "boolean"
         }
       },
       "type": "object"
diff --git a/vault/v1/vault-gen.go b/vault/v1/vault-gen.go
index a0c7e88..b4e1c65 100644
--- a/vault/v1/vault-gen.go
+++ b/vault/v1/vault-gen.go
@@ -632,6 +632,16 @@
 	// MailOptions: Option available for mail export.
 	MailOptions *MailExportOptions `json:"mailOptions,omitempty"`
 
+	// Region: The requested export location.
+	//
+	// Possible values:
+	//   "EXPORT_REGION_UNSPECIFIED" - The region is unspecified. Will be
+	// treated the same as ANY.
+	//   "ANY" - Any region.
+	//   "US" - US region.
+	//   "EUROPE" - Europe region.
+	Region string `json:"region,omitempty"`
+
 	// ForceSendFields is a list of field names (e.g. "DriveOptions") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
@@ -1284,10 +1294,6 @@
 	//   "PST" - PST as export format
 	ExportFormat string `json:"exportFormat,omitempty"`
 
-	// ShowConfidentialModeContent: Set to true to export confidential mode
-	// content
-	ShowConfidentialModeContent bool `json:"showConfidentialModeContent,omitempty"`
-
 	// ForceSendFields is a list of field names (e.g. "ExportFormat") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
diff --git a/vision/v1/vision-api.json b/vision/v1/vision-api.json
index 509b2b2..35523e3 100644
--- a/vision/v1/vision-api.json
+++ b/vision/v1/vision-api.json
@@ -906,7 +906,7 @@
       }
     }
   },
-  "revision": "20181031",
+  "revision": "20181112",
   "rootUrl": "https://vision.googleapis.com/",
   "schemas": {
     "AddProductToProductSetRequest": {
@@ -1195,7 +1195,7 @@
         },
         "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\n* when the text is horizontal it might look like:\n\n        0----1\n        |    |\n        3----2\n\n* when it's rotated 180 degrees around the top-left corner it becomes:\n\n        2----3\n        |    |\n        1----0\n\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\n* when the text is horizontal it might look like:\n\n        0----1\n        |    |\n        3----2\n\n* when it's rotated 180 degrees around the top-left corner it becomes:\n\n        2----3\n        |    |\n        1----0\n\n  and the vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results on the block. Range [0, 1].",
@@ -1869,7 +1869,7 @@
         },
         "boundingBox": {
           "$ref": "GoogleCloudVisionV1p1beta1BoundingPoly",
-          "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\n* when the text is horizontal it might look like:\n\n        0----1\n        |    |\n        3----2\n\n* when it's rotated 180 degrees around the top-left corner it becomes:\n\n        2----3\n        |    |\n        1----0\n\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\n* when the text is horizontal it might look like:\n\n        0----1\n        |    |\n        3----2\n\n* when it's rotated 180 degrees around the top-left corner it becomes:\n\n        2----3\n        |    |\n        1----0\n\n  and the vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results on the block. Range [0, 1].",
@@ -1894,6 +1894,13 @@
       "description": "A bounding polygon for the detected image annotation.",
       "id": "GoogleCloudVisionV1p1beta1BoundingPoly",
       "properties": {
+        "normalizedVertices": {
+          "description": "The bounding polygon normalized vertices.",
+          "items": {
+            "$ref": "GoogleCloudVisionV1p1beta1NormalizedVertex"
+          },
+          "type": "array"
+        },
         "vertices": {
           "description": "The bounding polygon vertices.",
           "items": {
@@ -2405,6 +2412,23 @@
       },
       "type": "object"
     },
+    "GoogleCloudVisionV1p1beta1NormalizedVertex": {
+      "description": "A vertex represents a 2D point in the image.\nNOTE: the normalized vertex coordinates are relative to the original image\nand range from 0 to 1.",
+      "id": "GoogleCloudVisionV1p1beta1NormalizedVertex",
+      "properties": {
+        "x": {
+          "description": "X coordinate.",
+          "format": "float",
+          "type": "number"
+        },
+        "y": {
+          "description": "Y coordinate.",
+          "format": "float",
+          "type": "number"
+        }
+      },
+      "type": "object"
+    },
     "GoogleCloudVisionV1p1beta1OperationMetadata": {
       "description": "Contains metadata for the BatchAnnotateImages operation.",
       "id": "GoogleCloudVisionV1p1beta1OperationMetadata",
@@ -2495,7 +2519,7 @@
       "properties": {
         "boundingBox": {
           "$ref": "GoogleCloudVisionV1p1beta1BoundingPoly",
-          "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)."
+          "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 vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results for the paragraph. Range [0, 1].",
@@ -3038,7 +3062,7 @@
       "properties": {
         "boundingBox": {
           "$ref": "GoogleCloudVisionV1p1beta1BoundingPoly",
-          "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)."
+          "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 vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results for the word. Range [0, 1].",
@@ -3209,7 +3233,7 @@
         },
         "boundingBox": {
           "$ref": "GoogleCloudVisionV1p2beta1BoundingPoly",
-          "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\n* when the text is horizontal it might look like:\n\n        0----1\n        |    |\n        3----2\n\n* when it's rotated 180 degrees around the top-left corner it becomes:\n\n        2----3\n        |    |\n        1----0\n\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\n* when the text is horizontal it might look like:\n\n        0----1\n        |    |\n        3----2\n\n* when it's rotated 180 degrees around the top-left corner it becomes:\n\n        2----3\n        |    |\n        1----0\n\n  and the vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results on the block. Range [0, 1].",
@@ -3859,7 +3883,7 @@
       "properties": {
         "boundingBox": {
           "$ref": "GoogleCloudVisionV1p2beta1BoundingPoly",
-          "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)."
+          "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 vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results for the paragraph. Range [0, 1].",
@@ -4402,7 +4426,7 @@
       "properties": {
         "boundingBox": {
           "$ref": "GoogleCloudVisionV1p2beta1BoundingPoly",
-          "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)."
+          "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 vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results for the word. Range [0, 1].",
@@ -4608,7 +4632,7 @@
         },
         "boundingBox": {
           "$ref": "GoogleCloudVisionV1p3beta1BoundingPoly",
-          "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\n* when the text is horizontal it might look like:\n\n        0----1\n        |    |\n        3----2\n\n* when it's rotated 180 degrees around the top-left corner it becomes:\n\n        2----3\n        |    |\n        1----0\n\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\n* when the text is horizontal it might look like:\n\n        0----1\n        |    |\n        3----2\n\n* when it's rotated 180 degrees around the top-left corner it becomes:\n\n        2----3\n        |    |\n        1----0\n\n  and the vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results on the block. Range [0, 1].",
@@ -5279,7 +5303,7 @@
       "properties": {
         "boundingBox": {
           "$ref": "GoogleCloudVisionV1p3beta1BoundingPoly",
-          "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)."
+          "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 vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results for the paragraph. Range [0, 1].",
@@ -5844,7 +5868,7 @@
       "properties": {
         "boundingBox": {
           "$ref": "GoogleCloudVisionV1p3beta1BoundingPoly",
-          "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)."
+          "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 vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results for the word. Range [0, 1].",
@@ -6452,7 +6476,7 @@
       "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)."
+          "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 vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results for the paragraph. Range [0, 1].",
@@ -7036,7 +7060,7 @@
       "properties": {
         "boundingBox": {
           "$ref": "BoundingPoly",
-          "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)."
+          "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 vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results for the word. Range [0, 1].",
diff --git a/vision/v1/vision-gen.go b/vision/v1/vision-gen.go
index 83a053f..ba774d2 100644
--- a/vision/v1/vision-gen.go
+++ b/vision/v1/vision-gen.go
@@ -699,7 +699,7 @@
 	//         |    |
 	//         1----0
 	//
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results on the block. Range [0, 1].
@@ -1981,7 +1981,7 @@
 	//         |    |
 	//         1----0
 	//
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *GoogleCloudVisionV1p1beta1BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results on the block. Range [0, 1].
@@ -2034,23 +2034,27 @@
 // GoogleCloudVisionV1p1beta1BoundingPoly: A bounding polygon for the
 // detected image annotation.
 type GoogleCloudVisionV1p1beta1BoundingPoly struct {
+	// NormalizedVertices: The bounding polygon normalized vertices.
+	NormalizedVertices []*GoogleCloudVisionV1p1beta1NormalizedVertex `json:"normalizedVertices,omitempty"`
+
 	// Vertices: The bounding polygon vertices.
 	Vertices []*GoogleCloudVisionV1p1beta1Vertex `json:"vertices,omitempty"`
 
-	// ForceSendFields is a list of field names (e.g. "Vertices") to
-	// unconditionally include in API requests. By default, fields with
+	// ForceSendFields is a list of field names (e.g. "NormalizedVertices")
+	// 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. "Vertices") 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 is a list of field names (e.g. "NormalizedVertices") 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:"-"`
 }
 
@@ -2882,6 +2886,57 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// GoogleCloudVisionV1p1beta1NormalizedVertex: A vertex represents a 2D
+// point in the image.
+// NOTE: the normalized vertex coordinates are relative to the original
+// image
+// and range from 0 to 1.
+type GoogleCloudVisionV1p1beta1NormalizedVertex struct {
+	// X: X coordinate.
+	X float64 `json:"x,omitempty"`
+
+	// Y: Y coordinate.
+	Y float64 `json:"y,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "X") 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. "X") 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 *GoogleCloudVisionV1p1beta1NormalizedVertex) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p1beta1NormalizedVertex
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *GoogleCloudVisionV1p1beta1NormalizedVertex) UnmarshalJSON(data []byte) error {
+	type NoMethod GoogleCloudVisionV1p1beta1NormalizedVertex
+	var s1 struct {
+		X gensupport.JSONFloat64 `json:"x"`
+		Y gensupport.JSONFloat64 `json:"y"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.X = float64(s1.X)
+	s.Y = float64(s1.Y)
+	return nil
+}
+
 // GoogleCloudVisionV1p1beta1OperationMetadata: Contains metadata for
 // the BatchAnnotateImages operation.
 type GoogleCloudVisionV1p1beta1OperationMetadata struct {
@@ -3051,7 +3106,7 @@
 	//      2----3
 	//      |    |
 	//      1----0
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *GoogleCloudVisionV1p1beta1BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results for the paragraph. Range
@@ -4085,7 +4140,7 @@
 	//      2----3
 	//      |    |
 	//      1----0
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *GoogleCloudVisionV1p1beta1BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results for the word. Range [0, 1].
@@ -4354,7 +4409,7 @@
 	//         |    |
 	//         1----0
 	//
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *GoogleCloudVisionV1p2beta1BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results on the block. Range [0, 1].
@@ -5479,7 +5534,7 @@
 	//      2----3
 	//      |    |
 	//      1----0
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *GoogleCloudVisionV1p2beta1BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results for the paragraph. Range
@@ -6513,7 +6568,7 @@
 	//      2----3
 	//      |    |
 	//      1----0
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *GoogleCloudVisionV1p2beta1BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results for the word. Range [0, 1].
@@ -6838,7 +6893,7 @@
 	//         |    |
 	//         1----0
 	//
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *GoogleCloudVisionV1p3beta1BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results on the block. Range [0, 1].
@@ -8011,7 +8066,7 @@
 	//      2----3
 	//      |    |
 	//      1----0
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *GoogleCloudVisionV1p3beta1BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results for the paragraph. Range
@@ -9105,7 +9160,7 @@
 	//      2----3
 	//      |    |
 	//      1----0
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *GoogleCloudVisionV1p3beta1BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results for the word. Range [0, 1].
@@ -10425,7 +10480,7 @@
 	//      2----3
 	//      |    |
 	//      1----0
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results for the paragraph. Range
@@ -11658,7 +11713,7 @@
 	//      2----3
 	//      |    |
 	//      1----0
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results for the word. Range [0, 1].
diff --git a/vision/v1p1beta1/vision-api.json b/vision/v1p1beta1/vision-api.json
index 3d9ea5b..c9afd66 100644
--- a/vision/v1p1beta1/vision-api.json
+++ b/vision/v1p1beta1/vision-api.json
@@ -154,7 +154,7 @@
       }
     }
   },
-  "revision": "20181031",
+  "revision": "20181112",
   "rootUrl": "https://vision.googleapis.com/",
   "schemas": {
     "AnnotateFileResponse": {
@@ -342,7 +342,7 @@
         },
         "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\n* when the text is horizontal it might look like:\n\n        0----1\n        |    |\n        3----2\n\n* when it's rotated 180 degrees around the top-left corner it becomes:\n\n        2----3\n        |    |\n        1----0\n\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\n* when the text is horizontal it might look like:\n\n        0----1\n        |    |\n        3----2\n\n* when it's rotated 180 degrees around the top-left corner it becomes:\n\n        2----3\n        |    |\n        1----0\n\n  and the vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results on the block. Range [0, 1].",
@@ -1029,7 +1029,7 @@
         },
         "boundingBox": {
           "$ref": "GoogleCloudVisionV1p1beta1BoundingPoly",
-          "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\n* when the text is horizontal it might look like:\n\n        0----1\n        |    |\n        3----2\n\n* when it's rotated 180 degrees around the top-left corner it becomes:\n\n        2----3\n        |    |\n        1----0\n\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\n* when the text is horizontal it might look like:\n\n        0----1\n        |    |\n        3----2\n\n* when it's rotated 180 degrees around the top-left corner it becomes:\n\n        2----3\n        |    |\n        1----0\n\n  and the vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results on the block. Range [0, 1].",
@@ -1054,6 +1054,13 @@
       "description": "A bounding polygon for the detected image annotation.",
       "id": "GoogleCloudVisionV1p1beta1BoundingPoly",
       "properties": {
+        "normalizedVertices": {
+          "description": "The bounding polygon normalized vertices.",
+          "items": {
+            "$ref": "GoogleCloudVisionV1p1beta1NormalizedVertex"
+          },
+          "type": "array"
+        },
         "vertices": {
           "description": "The bounding polygon vertices.",
           "items": {
@@ -1706,6 +1713,23 @@
       },
       "type": "object"
     },
+    "GoogleCloudVisionV1p1beta1NormalizedVertex": {
+      "description": "A vertex represents a 2D point in the image.\nNOTE: the normalized vertex coordinates are relative to the original image\nand range from 0 to 1.",
+      "id": "GoogleCloudVisionV1p1beta1NormalizedVertex",
+      "properties": {
+        "x": {
+          "description": "X coordinate.",
+          "format": "float",
+          "type": "number"
+        },
+        "y": {
+          "description": "Y coordinate.",
+          "format": "float",
+          "type": "number"
+        }
+      },
+      "type": "object"
+    },
     "GoogleCloudVisionV1p1beta1OperationMetadata": {
       "description": "Contains metadata for the BatchAnnotateImages operation.",
       "id": "GoogleCloudVisionV1p1beta1OperationMetadata",
@@ -1796,7 +1820,7 @@
       "properties": {
         "boundingBox": {
           "$ref": "GoogleCloudVisionV1p1beta1BoundingPoly",
-          "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)."
+          "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 vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results for the paragraph. Range [0, 1].",
@@ -2376,7 +2400,7 @@
       "properties": {
         "boundingBox": {
           "$ref": "GoogleCloudVisionV1p1beta1BoundingPoly",
-          "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)."
+          "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 vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results for the word. Range [0, 1].",
@@ -2547,7 +2571,7 @@
         },
         "boundingBox": {
           "$ref": "GoogleCloudVisionV1p2beta1BoundingPoly",
-          "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\n* when the text is horizontal it might look like:\n\n        0----1\n        |    |\n        3----2\n\n* when it's rotated 180 degrees around the top-left corner it becomes:\n\n        2----3\n        |    |\n        1----0\n\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\n* when the text is horizontal it might look like:\n\n        0----1\n        |    |\n        3----2\n\n* when it's rotated 180 degrees around the top-left corner it becomes:\n\n        2----3\n        |    |\n        1----0\n\n  and the vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results on the block. Range [0, 1].",
@@ -3197,7 +3221,7 @@
       "properties": {
         "boundingBox": {
           "$ref": "GoogleCloudVisionV1p2beta1BoundingPoly",
-          "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)."
+          "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 vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results for the paragraph. Range [0, 1].",
@@ -3740,7 +3764,7 @@
       "properties": {
         "boundingBox": {
           "$ref": "GoogleCloudVisionV1p2beta1BoundingPoly",
-          "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)."
+          "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 vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results for the word. Range [0, 1].",
@@ -3946,7 +3970,7 @@
         },
         "boundingBox": {
           "$ref": "GoogleCloudVisionV1p3beta1BoundingPoly",
-          "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\n* when the text is horizontal it might look like:\n\n        0----1\n        |    |\n        3----2\n\n* when it's rotated 180 degrees around the top-left corner it becomes:\n\n        2----3\n        |    |\n        1----0\n\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\n* when the text is horizontal it might look like:\n\n        0----1\n        |    |\n        3----2\n\n* when it's rotated 180 degrees around the top-left corner it becomes:\n\n        2----3\n        |    |\n        1----0\n\n  and the vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results on the block. Range [0, 1].",
@@ -4617,7 +4641,7 @@
       "properties": {
         "boundingBox": {
           "$ref": "GoogleCloudVisionV1p3beta1BoundingPoly",
-          "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)."
+          "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 vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results for the paragraph. Range [0, 1].",
@@ -5182,7 +5206,7 @@
       "properties": {
         "boundingBox": {
           "$ref": "GoogleCloudVisionV1p3beta1BoundingPoly",
-          "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)."
+          "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 vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results for the word. Range [0, 1].",
@@ -5586,7 +5610,7 @@
       "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)."
+          "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 vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results for the paragraph. Range [0, 1].",
@@ -6098,7 +6122,7 @@
       "properties": {
         "boundingBox": {
           "$ref": "BoundingPoly",
-          "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)."
+          "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 vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results for the word. Range [0, 1].",
diff --git a/vision/v1p1beta1/vision-gen.go b/vision/v1p1beta1/vision-gen.go
index b21e162..79a1489 100644
--- a/vision/v1p1beta1/vision-gen.go
+++ b/vision/v1p1beta1/vision-gen.go
@@ -390,7 +390,7 @@
 	//         |    |
 	//         1----0
 	//
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results on the block. Range [0, 1].
@@ -1713,7 +1713,7 @@
 	//         |    |
 	//         1----0
 	//
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *GoogleCloudVisionV1p1beta1BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results on the block. Range [0, 1].
@@ -1766,23 +1766,27 @@
 // GoogleCloudVisionV1p1beta1BoundingPoly: A bounding polygon for the
 // detected image annotation.
 type GoogleCloudVisionV1p1beta1BoundingPoly struct {
+	// NormalizedVertices: The bounding polygon normalized vertices.
+	NormalizedVertices []*GoogleCloudVisionV1p1beta1NormalizedVertex `json:"normalizedVertices,omitempty"`
+
 	// Vertices: The bounding polygon vertices.
 	Vertices []*GoogleCloudVisionV1p1beta1Vertex `json:"vertices,omitempty"`
 
-	// ForceSendFields is a list of field names (e.g. "Vertices") to
-	// unconditionally include in API requests. By default, fields with
+	// ForceSendFields is a list of field names (e.g. "NormalizedVertices")
+	// 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. "Vertices") 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 is a list of field names (e.g. "NormalizedVertices") 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:"-"`
 }
 
@@ -2912,6 +2916,57 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// GoogleCloudVisionV1p1beta1NormalizedVertex: A vertex represents a 2D
+// point in the image.
+// NOTE: the normalized vertex coordinates are relative to the original
+// image
+// and range from 0 to 1.
+type GoogleCloudVisionV1p1beta1NormalizedVertex struct {
+	// X: X coordinate.
+	X float64 `json:"x,omitempty"`
+
+	// Y: Y coordinate.
+	Y float64 `json:"y,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "X") 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. "X") 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 *GoogleCloudVisionV1p1beta1NormalizedVertex) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p1beta1NormalizedVertex
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *GoogleCloudVisionV1p1beta1NormalizedVertex) UnmarshalJSON(data []byte) error {
+	type NoMethod GoogleCloudVisionV1p1beta1NormalizedVertex
+	var s1 struct {
+		X gensupport.JSONFloat64 `json:"x"`
+		Y gensupport.JSONFloat64 `json:"y"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.X = float64(s1.X)
+	s.Y = float64(s1.Y)
+	return nil
+}
+
 // GoogleCloudVisionV1p1beta1OperationMetadata: Contains metadata for
 // the BatchAnnotateImages operation.
 type GoogleCloudVisionV1p1beta1OperationMetadata struct {
@@ -3081,7 +3136,7 @@
 	//      2----3
 	//      |    |
 	//      1----0
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *GoogleCloudVisionV1p1beta1BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results for the paragraph. Range
@@ -4205,7 +4260,7 @@
 	//      2----3
 	//      |    |
 	//      1----0
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *GoogleCloudVisionV1p1beta1BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results for the word. Range [0, 1].
@@ -4474,7 +4529,7 @@
 	//         |    |
 	//         1----0
 	//
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *GoogleCloudVisionV1p2beta1BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results on the block. Range [0, 1].
@@ -5599,7 +5654,7 @@
 	//      2----3
 	//      |    |
 	//      1----0
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *GoogleCloudVisionV1p2beta1BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results for the paragraph. Range
@@ -6633,7 +6688,7 @@
 	//      2----3
 	//      |    |
 	//      1----0
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *GoogleCloudVisionV1p2beta1BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results for the word. Range [0, 1].
@@ -6958,7 +7013,7 @@
 	//         |    |
 	//         1----0
 	//
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *GoogleCloudVisionV1p3beta1BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results on the block. Range [0, 1].
@@ -8131,7 +8186,7 @@
 	//      2----3
 	//      |    |
 	//      1----0
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *GoogleCloudVisionV1p3beta1BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results for the paragraph. Range
@@ -9225,7 +9280,7 @@
 	//      2----3
 	//      |    |
 	//      1----0
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *GoogleCloudVisionV1p3beta1BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results for the word. Range [0, 1].
@@ -9996,7 +10051,7 @@
 	//      2----3
 	//      |    |
 	//      1----0
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results for the paragraph. Range
@@ -11036,7 +11091,7 @@
 	//      2----3
 	//      |    |
 	//      1----0
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results for the word. Range [0, 1].
diff --git a/vision/v1p2beta1/vision-api.json b/vision/v1p2beta1/vision-api.json
index 9d5f3ce..ac91787 100644
--- a/vision/v1p2beta1/vision-api.json
+++ b/vision/v1p2beta1/vision-api.json
@@ -154,7 +154,7 @@
       }
     }
   },
-  "revision": "20181031",
+  "revision": "20181112",
   "rootUrl": "https://vision.googleapis.com/",
   "schemas": {
     "AnnotateFileResponse": {
@@ -342,7 +342,7 @@
         },
         "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\n* when the text is horizontal it might look like:\n\n        0----1\n        |    |\n        3----2\n\n* when it's rotated 180 degrees around the top-left corner it becomes:\n\n        2----3\n        |    |\n        1----0\n\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\n* when the text is horizontal it might look like:\n\n        0----1\n        |    |\n        3----2\n\n* when it's rotated 180 degrees around the top-left corner it becomes:\n\n        2----3\n        |    |\n        1----0\n\n  and the vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results on the block. Range [0, 1].",
@@ -939,7 +939,7 @@
         },
         "boundingBox": {
           "$ref": "GoogleCloudVisionV1p1beta1BoundingPoly",
-          "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\n* when the text is horizontal it might look like:\n\n        0----1\n        |    |\n        3----2\n\n* when it's rotated 180 degrees around the top-left corner it becomes:\n\n        2----3\n        |    |\n        1----0\n\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\n* when the text is horizontal it might look like:\n\n        0----1\n        |    |\n        3----2\n\n* when it's rotated 180 degrees around the top-left corner it becomes:\n\n        2----3\n        |    |\n        1----0\n\n  and the vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results on the block. Range [0, 1].",
@@ -964,6 +964,13 @@
       "description": "A bounding polygon for the detected image annotation.",
       "id": "GoogleCloudVisionV1p1beta1BoundingPoly",
       "properties": {
+        "normalizedVertices": {
+          "description": "The bounding polygon normalized vertices.",
+          "items": {
+            "$ref": "GoogleCloudVisionV1p1beta1NormalizedVertex"
+          },
+          "type": "array"
+        },
         "vertices": {
           "description": "The bounding polygon vertices.",
           "items": {
@@ -1475,6 +1482,23 @@
       },
       "type": "object"
     },
+    "GoogleCloudVisionV1p1beta1NormalizedVertex": {
+      "description": "A vertex represents a 2D point in the image.\nNOTE: the normalized vertex coordinates are relative to the original image\nand range from 0 to 1.",
+      "id": "GoogleCloudVisionV1p1beta1NormalizedVertex",
+      "properties": {
+        "x": {
+          "description": "X coordinate.",
+          "format": "float",
+          "type": "number"
+        },
+        "y": {
+          "description": "Y coordinate.",
+          "format": "float",
+          "type": "number"
+        }
+      },
+      "type": "object"
+    },
     "GoogleCloudVisionV1p1beta1OperationMetadata": {
       "description": "Contains metadata for the BatchAnnotateImages operation.",
       "id": "GoogleCloudVisionV1p1beta1OperationMetadata",
@@ -1565,7 +1589,7 @@
       "properties": {
         "boundingBox": {
           "$ref": "GoogleCloudVisionV1p1beta1BoundingPoly",
-          "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)."
+          "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 vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results for the paragraph. Range [0, 1].",
@@ -2108,7 +2132,7 @@
       "properties": {
         "boundingBox": {
           "$ref": "GoogleCloudVisionV1p1beta1BoundingPoly",
-          "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)."
+          "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 vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results for the word. Range [0, 1].",
@@ -2369,7 +2393,7 @@
         },
         "boundingBox": {
           "$ref": "GoogleCloudVisionV1p2beta1BoundingPoly",
-          "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\n* when the text is horizontal it might look like:\n\n        0----1\n        |    |\n        3----2\n\n* when it's rotated 180 degrees around the top-left corner it becomes:\n\n        2----3\n        |    |\n        1----0\n\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\n* when the text is horizontal it might look like:\n\n        0----1\n        |    |\n        3----2\n\n* when it's rotated 180 degrees around the top-left corner it becomes:\n\n        2----3\n        |    |\n        1----0\n\n  and the vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results on the block. Range [0, 1].",
@@ -3160,7 +3184,7 @@
       "properties": {
         "boundingBox": {
           "$ref": "GoogleCloudVisionV1p2beta1BoundingPoly",
-          "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)."
+          "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 vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results for the paragraph. Range [0, 1].",
@@ -3740,7 +3764,7 @@
       "properties": {
         "boundingBox": {
           "$ref": "GoogleCloudVisionV1p2beta1BoundingPoly",
-          "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)."
+          "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 vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results for the word. Range [0, 1].",
@@ -3946,7 +3970,7 @@
         },
         "boundingBox": {
           "$ref": "GoogleCloudVisionV1p3beta1BoundingPoly",
-          "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\n* when the text is horizontal it might look like:\n\n        0----1\n        |    |\n        3----2\n\n* when it's rotated 180 degrees around the top-left corner it becomes:\n\n        2----3\n        |    |\n        1----0\n\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\n* when the text is horizontal it might look like:\n\n        0----1\n        |    |\n        3----2\n\n* when it's rotated 180 degrees around the top-left corner it becomes:\n\n        2----3\n        |    |\n        1----0\n\n  and the vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results on the block. Range [0, 1].",
@@ -4617,7 +4641,7 @@
       "properties": {
         "boundingBox": {
           "$ref": "GoogleCloudVisionV1p3beta1BoundingPoly",
-          "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)."
+          "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 vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results for the paragraph. Range [0, 1].",
@@ -5182,7 +5206,7 @@
       "properties": {
         "boundingBox": {
           "$ref": "GoogleCloudVisionV1p3beta1BoundingPoly",
-          "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)."
+          "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 vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results for the word. Range [0, 1].",
@@ -5586,7 +5610,7 @@
       "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)."
+          "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 vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results for the paragraph. Range [0, 1].",
@@ -6098,7 +6122,7 @@
       "properties": {
         "boundingBox": {
           "$ref": "BoundingPoly",
-          "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)."
+          "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 vertex order will still be (0, 1, 2, 3)."
         },
         "confidence": {
           "description": "Confidence of the OCR results for the word. Range [0, 1].",
diff --git a/vision/v1p2beta1/vision-gen.go b/vision/v1p2beta1/vision-gen.go
index 382e54f..3cd459a 100644
--- a/vision/v1p2beta1/vision-gen.go
+++ b/vision/v1p2beta1/vision-gen.go
@@ -390,7 +390,7 @@
 	//         |    |
 	//         1----0
 	//
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results on the block. Range [0, 1].
@@ -1543,7 +1543,7 @@
 	//         |    |
 	//         1----0
 	//
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *GoogleCloudVisionV1p1beta1BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results on the block. Range [0, 1].
@@ -1596,23 +1596,27 @@
 // GoogleCloudVisionV1p1beta1BoundingPoly: A bounding polygon for the
 // detected image annotation.
 type GoogleCloudVisionV1p1beta1BoundingPoly struct {
+	// NormalizedVertices: The bounding polygon normalized vertices.
+	NormalizedVertices []*GoogleCloudVisionV1p1beta1NormalizedVertex `json:"normalizedVertices,omitempty"`
+
 	// Vertices: The bounding polygon vertices.
 	Vertices []*GoogleCloudVisionV1p1beta1Vertex `json:"vertices,omitempty"`
 
-	// ForceSendFields is a list of field names (e.g. "Vertices") to
-	// unconditionally include in API requests. By default, fields with
+	// ForceSendFields is a list of field names (e.g. "NormalizedVertices")
+	// 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. "Vertices") 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 is a list of field names (e.g. "NormalizedVertices") 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:"-"`
 }
 
@@ -2444,6 +2448,57 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// GoogleCloudVisionV1p1beta1NormalizedVertex: A vertex represents a 2D
+// point in the image.
+// NOTE: the normalized vertex coordinates are relative to the original
+// image
+// and range from 0 to 1.
+type GoogleCloudVisionV1p1beta1NormalizedVertex struct {
+	// X: X coordinate.
+	X float64 `json:"x,omitempty"`
+
+	// Y: Y coordinate.
+	Y float64 `json:"y,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "X") 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. "X") 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 *GoogleCloudVisionV1p1beta1NormalizedVertex) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p1beta1NormalizedVertex
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *GoogleCloudVisionV1p1beta1NormalizedVertex) UnmarshalJSON(data []byte) error {
+	type NoMethod GoogleCloudVisionV1p1beta1NormalizedVertex
+	var s1 struct {
+		X gensupport.JSONFloat64 `json:"x"`
+		Y gensupport.JSONFloat64 `json:"y"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.X = float64(s1.X)
+	s.Y = float64(s1.Y)
+	return nil
+}
+
 // GoogleCloudVisionV1p1beta1OperationMetadata: Contains metadata for
 // the BatchAnnotateImages operation.
 type GoogleCloudVisionV1p1beta1OperationMetadata struct {
@@ -2613,7 +2668,7 @@
 	//      2----3
 	//      |    |
 	//      1----0
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *GoogleCloudVisionV1p1beta1BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results for the paragraph. Range
@@ -3647,7 +3702,7 @@
 	//      2----3
 	//      |    |
 	//      1----0
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *GoogleCloudVisionV1p1beta1BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results for the word. Range [0, 1].
@@ -4086,7 +4141,7 @@
 	//         |    |
 	//         1----0
 	//
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *GoogleCloudVisionV1p2beta1BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results on the block. Range [0, 1].
@@ -5509,7 +5564,7 @@
 	//      2----3
 	//      |    |
 	//      1----0
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *GoogleCloudVisionV1p2beta1BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results for the paragraph. Range
@@ -6633,7 +6688,7 @@
 	//      2----3
 	//      |    |
 	//      1----0
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *GoogleCloudVisionV1p2beta1BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results for the word. Range [0, 1].
@@ -6958,7 +7013,7 @@
 	//         |    |
 	//         1----0
 	//
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *GoogleCloudVisionV1p3beta1BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results on the block. Range [0, 1].
@@ -8131,7 +8186,7 @@
 	//      2----3
 	//      |    |
 	//      1----0
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *GoogleCloudVisionV1p3beta1BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results for the paragraph. Range
@@ -9225,7 +9280,7 @@
 	//      2----3
 	//      |    |
 	//      1----0
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *GoogleCloudVisionV1p3beta1BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results for the word. Range [0, 1].
@@ -9996,7 +10051,7 @@
 	//      2----3
 	//      |    |
 	//      1----0
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results for the paragraph. Range
@@ -11036,7 +11091,7 @@
 	//      2----3
 	//      |    |
 	//      1----0
-	//   and the vertice order will still be (0, 1, 2, 3).
+	//   and the vertex order will still be (0, 1, 2, 3).
 	BoundingBox *BoundingPoly `json:"boundingBox,omitempty"`
 
 	// Confidence: Confidence of the OCR results for the word. Range [0, 1].