google-api-go-client: update all APIs

Requested by sqladmin team.

Change-Id: Ifd7f163af74a099acb82d1985095c46fc90c39c2
Reviewed-on: https://code-review.googlesource.com/3620
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
diff --git a/adexchangebuyer/v1.2/adexchangebuyer-gen.go b/adexchangebuyer/v1.2/adexchangebuyer-gen.go
index bca8d3c..c4f977c 100644
--- a/adexchangebuyer/v1.2/adexchangebuyer-gen.go
+++ b/adexchangebuyer/v1.2/adexchangebuyer-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "adexchangebuyer:v1.2"
 const apiName = "adexchangebuyer"
diff --git a/adexchangebuyer/v1.3/adexchangebuyer-gen.go b/adexchangebuyer/v1.3/adexchangebuyer-gen.go
index 31bc541..41dd758 100644
--- a/adexchangebuyer/v1.3/adexchangebuyer-gen.go
+++ b/adexchangebuyer/v1.3/adexchangebuyer-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "adexchangebuyer:v1.3"
 const apiName = "adexchangebuyer"
diff --git a/adexchangebuyer/v1.4/adexchangebuyer-gen.go b/adexchangebuyer/v1.4/adexchangebuyer-gen.go
index 511916f..ab9f903 100644
--- a/adexchangebuyer/v1.4/adexchangebuyer-gen.go
+++ b/adexchangebuyer/v1.4/adexchangebuyer-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "adexchangebuyer:v1.4"
 const apiName = "adexchangebuyer"
diff --git a/adexchangeseller/v1.1/adexchangeseller-gen.go b/adexchangeseller/v1.1/adexchangeseller-gen.go
index 1c2b7e0..4d183b4 100644
--- a/adexchangeseller/v1.1/adexchangeseller-gen.go
+++ b/adexchangeseller/v1.1/adexchangeseller-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "adexchangeseller:v1.1"
 const apiName = "adexchangeseller"
diff --git a/adexchangeseller/v1/adexchangeseller-gen.go b/adexchangeseller/v1/adexchangeseller-gen.go
index 0557a3a..cc2e32e 100644
--- a/adexchangeseller/v1/adexchangeseller-gen.go
+++ b/adexchangeseller/v1/adexchangeseller-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "adexchangeseller:v1"
 const apiName = "adexchangeseller"
diff --git a/adexchangeseller/v2.0/adexchangeseller-gen.go b/adexchangeseller/v2.0/adexchangeseller-gen.go
index 1b31130..8c4dd6c 100644
--- a/adexchangeseller/v2.0/adexchangeseller-gen.go
+++ b/adexchangeseller/v2.0/adexchangeseller-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "adexchangeseller:v2.0"
 const apiName = "adexchangeseller"
diff --git a/admin/datatransfer/v1/admin-gen.go b/admin/datatransfer/v1/admin-gen.go
index ff30b18..1ba6e1f 100644
--- a/admin/datatransfer/v1/admin-gen.go
+++ b/admin/datatransfer/v1/admin-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "admin:datatransfer_v1"
 const apiName = "admin"
diff --git a/admin/directory/v1/admin-api.json b/admin/directory/v1/admin-api.json
index 034ec9f..3362b22 100644
--- a/admin/directory/v1/admin-api.json
+++ b/admin/directory/v1/admin-api.json
@@ -1,12 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/uQEY1lxUpBjGfWxd7mioMh_V8P8\"",
+ "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/pRlNMQbyfGTi-02uw0zCmogMSuU\"",
  "discoveryVersion": "v1",
  "id": "admin:directory_v1",
  "name": "admin",
  "canonicalName": "directory",
  "version": "directory_v1",
- "revision": "20150720",
+ "revision": "20151005",
  "title": "Admin Directory API",
  "description": "The Admin SDK Directory API lets you view and manage enterprise resources such as users and groups, administrative notifications, security features, and more.",
  "ownerDomain": "google.com",
@@ -71,6 +71,12 @@
  "auth": {
   "oauth2": {
    "scopes": {
+    "https://www.googleapis.com/auth/admin.directory.customer": {
+     "description": "View and manage customer related information"
+    },
+    "https://www.googleapis.com/auth/admin.directory.customer.readonly": {
+     "description": "View customer related information"
+    },
     "https://www.googleapis.com/auth/admin.directory.device.chromeos": {
      "description": "View and manage your Chrome OS devices' metadata"
     },
@@ -86,6 +92,12 @@
     "https://www.googleapis.com/auth/admin.directory.device.mobile.readonly": {
      "description": "View your mobile devices' metadata"
     },
+    "https://www.googleapis.com/auth/admin.directory.domain": {
+     "description": "View and manage the provisioning of domains for your customers"
+    },
+    "https://www.googleapis.com/auth/admin.directory.domain.readonly": {
+     "description": "View domains related to your customers"
+    },
     "https://www.googleapis.com/auth/admin.directory.group": {
      "description": "View and manage the provisioning of groups on your domain"
     },
@@ -107,6 +119,12 @@
     "https://www.googleapis.com/auth/admin.directory.orgunit.readonly": {
      "description": "View organization units on your domain"
     },
+    "https://www.googleapis.com/auth/admin.directory.rolemanagement": {
+     "description": "Manage delegated admin roles for your domain"
+    },
+    "https://www.googleapis.com/auth/admin.directory.rolemanagement.readonly": {
+     "description": "View delegated admin roles for your domain"
+    },
     "https://www.googleapis.com/auth/admin.directory.user": {
      "description": "View and manage the provisioning of users on your domain"
     },
@@ -463,6 +481,223 @@
     }
    }
   },
+  "Customer": {
+   "id": "Customer",
+   "type": "object",
+   "description": "JSON template for Customer Resource object in Directory API.",
+   "properties": {
+    "alternateEmail": {
+     "type": "string",
+     "description": "The customer's secondary contact email address. This email address cannot be on the same domain as the customerDomain"
+    },
+    "customerCreationTime": {
+     "type": "string",
+     "description": "The customer's creation time (Readonly)",
+     "format": "date-time"
+    },
+    "customerDomain": {
+     "type": "string",
+     "description": "The customer's primary domain name string. Do not include the www prefix when creating a new customer."
+    },
+    "etag": {
+     "type": "string",
+     "description": "ETag of the resource."
+    },
+    "id": {
+     "type": "string",
+     "description": "The unique ID for the customer's Google account. (Readonly)"
+    },
+    "kind": {
+     "type": "string",
+     "description": "Identifies the resource as a customer. Value: admin#directory#customer",
+     "default": "admin#directory#customer"
+    },
+    "language": {
+     "type": "string",
+     "description": "The customer's ISO 639-2 language code. The default value is en-US"
+    },
+    "phoneNumber": {
+     "type": "string",
+     "description": "The customer's contact phone number in E.164 format."
+    },
+    "postalAddress": {
+     "$ref": "CustomerPostalAddress",
+     "description": "The customer's postal address information."
+    }
+   }
+  },
+  "CustomerPostalAddress": {
+   "id": "CustomerPostalAddress",
+   "type": "object",
+   "description": "JSON template for postal address of a customer.",
+   "properties": {
+    "addressLine1": {
+     "type": "string",
+     "description": "A customer's physical address. The address can be composed of one to three lines."
+    },
+    "addressLine2": {
+     "type": "string",
+     "description": "Address line 2 of the address."
+    },
+    "addressLine3": {
+     "type": "string",
+     "description": "Address line 3 of the address."
+    },
+    "contactName": {
+     "type": "string",
+     "description": "The customer contact's name."
+    },
+    "countryCode": {
+     "type": "string",
+     "description": "This is a required property. For countryCode information see the ISO 3166 country code elements."
+    },
+    "locality": {
+     "type": "string",
+     "description": "Name of the locality. An example of a locality value is the city of San Francisco."
+    },
+    "organizationName": {
+     "type": "string",
+     "description": "The company or company division name."
+    },
+    "postalCode": {
+     "type": "string",
+     "description": "The postal code. A postalCode example is a postal zip code such as 10009. This is in accordance with - http://portablecontacts.net/draft-spec.html#address_element."
+    },
+    "region": {
+     "type": "string",
+     "description": "Name of the region. An example of a region value is NY for the state of New York."
+    }
+   }
+  },
+  "DomainAlias": {
+   "id": "DomainAlias",
+   "type": "object",
+   "description": "JSON template for Domain Alias object in Directory API.",
+   "properties": {
+    "creationTime": {
+     "type": "string",
+     "description": "The creation time of the domain alias. (Read-only).",
+     "format": "int64"
+    },
+    "domainAliasName": {
+     "type": "string",
+     "description": "The domain alias name."
+    },
+    "etag": {
+     "type": "string",
+     "description": "ETag of the resource."
+    },
+    "kind": {
+     "type": "string",
+     "description": "Kind of resource this is.",
+     "default": "admin#directory#domainAlias"
+    },
+    "parentDomainName": {
+     "type": "string",
+     "description": "The parent domain name that the domain alias is associated with. This can either be a primary or secondary domain name within a customer.",
+     "annotations": {
+      "required": [
+       "directory.domains.insert"
+      ]
+     }
+    },
+    "verified": {
+     "type": "boolean",
+     "description": "Indicates the verification state of a domain alias. (Read-only)"
+    }
+   }
+  },
+  "DomainAliases": {
+   "id": "DomainAliases",
+   "type": "object",
+   "description": "JSON response template to list domain aliases in Directory API.",
+   "properties": {
+    "domainAliases": {
+     "type": "array",
+     "description": "List of domain alias objects.",
+     "items": {
+      "$ref": "DomainAlias"
+     }
+    },
+    "etag": {
+     "type": "string",
+     "description": "ETag of the resource."
+    },
+    "kind": {
+     "type": "string",
+     "description": "Kind of resource this is.",
+     "default": "admin#directory#domainAliases"
+    }
+   }
+  },
+  "Domains": {
+   "id": "Domains",
+   "type": "object",
+   "description": "JSON template for Domain object in Directory API.",
+   "properties": {
+    "creationTime": {
+     "type": "string",
+     "description": "Creation time of the domain. (Read-only).",
+     "format": "int64"
+    },
+    "domainAliases": {
+     "type": "array",
+     "description": "List of domain alias objects. (Read-only)",
+     "items": {
+      "$ref": "DomainAlias"
+     }
+    },
+    "domainName": {
+     "type": "string",
+     "description": "The domain name of the customer.",
+     "annotations": {
+      "required": [
+       "directory.domains.insert"
+      ]
+     }
+    },
+    "etag": {
+     "type": "string",
+     "description": "ETag of the resource."
+    },
+    "isPrimary": {
+     "type": "boolean",
+     "description": "Indicates if the domain is a primary domain (Read-only)."
+    },
+    "kind": {
+     "type": "string",
+     "description": "Kind of resource this is.",
+     "default": "admin#directory#domain"
+    },
+    "verified": {
+     "type": "boolean",
+     "description": "Indicates the verification state of a domain. (Read-only)."
+    }
+   }
+  },
+  "Domains2": {
+   "id": "Domains2",
+   "type": "object",
+   "description": "JSON response template to list Domains in Directory API.",
+   "properties": {
+    "domains": {
+     "type": "array",
+     "description": "List of domain objects.",
+     "items": {
+      "$ref": "Domains"
+     }
+    },
+    "etag": {
+     "type": "string",
+     "description": "ETag of the resource."
+    },
+    "kind": {
+     "type": "string",
+     "description": "Kind of resource this is.",
+     "default": "admin#directory#domains"
+    }
+   }
+  },
   "Group": {
    "id": "Group",
    "type": "object",
@@ -974,6 +1209,222 @@
     }
    }
   },
+  "Privilege": {
+   "id": "Privilege",
+   "type": "object",
+   "description": "JSON template for privilege resource in Directory API.",
+   "properties": {
+    "childPrivileges": {
+     "type": "array",
+     "description": "A list of child privileges. Privileges for a service form a tree. Each privilege can have a list of child privileges; this list is empty for a leaf privilege.",
+     "items": {
+      "$ref": "Privilege"
+     }
+    },
+    "etag": {
+     "type": "string",
+     "description": "ETag of the resource."
+    },
+    "isOuScopable": {
+     "type": "boolean",
+     "description": "If the privilege can be restricted to an organization unit."
+    },
+    "kind": {
+     "type": "string",
+     "description": "The type of the API resource. This is always admin#directory#privilege.",
+     "default": "admin#directory#privilege"
+    },
+    "privilegeName": {
+     "type": "string",
+     "description": "The name of the privilege."
+    },
+    "serviceId": {
+     "type": "string",
+     "description": "The obfuscated ID of the service this privilege is for."
+    },
+    "serviceName": {
+     "type": "string",
+     "description": "The name of the service this privilege is for."
+    }
+   }
+  },
+  "Privileges": {
+   "id": "Privileges",
+   "type": "object",
+   "description": "JSON response template for List privileges operation in Directory API.",
+   "properties": {
+    "etag": {
+     "type": "string",
+     "description": "ETag of the resource."
+    },
+    "items": {
+     "type": "array",
+     "description": "A list of Privilege resources.",
+     "items": {
+      "$ref": "Privilege"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "The type of the API resource. This is always admin#directory#privileges.",
+     "default": "admin#directory#privileges"
+    }
+   }
+  },
+  "Role": {
+   "id": "Role",
+   "type": "object",
+   "description": "JSON template for role resource in Directory API.",
+   "properties": {
+    "etag": {
+     "type": "string",
+     "description": "ETag of the resource."
+    },
+    "isSuperAdminRole": {
+     "type": "boolean",
+     "description": "Returns true if the role is a super admin role."
+    },
+    "isSystemRole": {
+     "type": "boolean",
+     "description": "Returns true if this is a pre-defined system role."
+    },
+    "kind": {
+     "type": "string",
+     "description": "The type of the API resource. This is always admin#directory#role.",
+     "default": "admin#directory#role"
+    },
+    "roleDescription": {
+     "type": "string",
+     "description": "A short description of the role."
+    },
+    "roleId": {
+     "type": "string",
+     "description": "ID of the role.",
+     "format": "int64"
+    },
+    "roleName": {
+     "type": "string",
+     "description": "Name of the role.",
+     "annotations": {
+      "required": [
+       "directory.roles.insert"
+      ]
+     }
+    },
+    "rolePrivileges": {
+     "type": "array",
+     "description": "The set of privileges that are granted to this role.",
+     "items": {
+      "type": "object",
+      "properties": {
+       "privilegeName": {
+        "type": "string",
+        "description": "The name of the privilege."
+       },
+       "serviceId": {
+        "type": "string",
+        "description": "The obfuscated ID of the service this privilege is for."
+       }
+      }
+     },
+     "annotations": {
+      "required": [
+       "directory.roles.insert"
+      ]
+     }
+    }
+   }
+  },
+  "RoleAssignment": {
+   "id": "RoleAssignment",
+   "type": "object",
+   "description": "JSON template for roleAssignment resource in Directory API.",
+   "properties": {
+    "assignedTo": {
+     "type": "string",
+     "description": "The unique ID of the user this role is assigned to."
+    },
+    "etag": {
+     "type": "string",
+     "description": "ETag of the resource."
+    },
+    "kind": {
+     "type": "string",
+     "description": "The type of the API resource. This is always admin#directory#roleAssignment.",
+     "default": "admin#directory#roleAssignment"
+    },
+    "orgUnitId": {
+     "type": "string",
+     "description": "If the role is restricted to an organization unit, this contains the ID for the organization unit the exercise of this role is restricted to."
+    },
+    "roleAssignmentId": {
+     "type": "string",
+     "description": "ID of this roleAssignment.",
+     "format": "int64"
+    },
+    "roleId": {
+     "type": "string",
+     "description": "The ID of the role that is assigned.",
+     "format": "int64"
+    },
+    "scopeType": {
+     "type": "string",
+     "description": "The scope in which this role is assigned. Possible values are: \n- CUSTOMER\n- ORG_UNIT"
+    }
+   }
+  },
+  "RoleAssignments": {
+   "id": "RoleAssignments",
+   "type": "object",
+   "description": "JSON response template for List roleAssignments operation in Directory API.",
+   "properties": {
+    "etag": {
+     "type": "string",
+     "description": "ETag of the resource."
+    },
+    "items": {
+     "type": "array",
+     "description": "A list of RoleAssignment resources.",
+     "items": {
+      "$ref": "RoleAssignment"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "The type of the API resource. This is always admin#directory#roleAssignments.",
+     "default": "admin#directory#roleAssignments"
+    },
+    "nextPageToken": {
+     "type": "string"
+    }
+   }
+  },
+  "Roles": {
+   "id": "Roles",
+   "type": "object",
+   "description": "JSON response template for List roles operation in Directory API.",
+   "properties": {
+    "etag": {
+     "type": "string",
+     "description": "ETag of the resource."
+    },
+    "items": {
+     "type": "array",
+     "description": "A list of Role resources.",
+     "items": {
+      "$ref": "Role"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "The type of the API resource. This is always admin#directory#roles.",
+     "default": "admin#directory#roles"
+    },
+    "nextPageToken": {
+     "type": "string"
+    }
+   }
+  },
   "Schema": {
    "id": "Schema",
    "type": "object",
@@ -1185,11 +1636,13 @@
     },
     "agreedToTerms": {
      "type": "boolean",
-     "description": "Indicates if user has agreed to terms (Read-only)"
+     "description": "Indicates if user has agreed to terms (Read-only)",
+     "readOnly": true
     },
     "aliases": {
      "type": "array",
      "description": "List of aliases (Read-only)",
+     "readOnly": true,
      "items": {
       "type": "string"
      }
@@ -1201,7 +1654,8 @@
     "creationTime": {
      "type": "string",
      "description": "User's Google account creation time. (Read-only)",
-     "format": "date-time"
+     "format": "date-time",
+     "readOnly": true
     },
     "customSchemas": {
      "type": "object",
@@ -1212,18 +1666,21 @@
     },
     "customerId": {
      "type": "string",
-     "description": "CustomerId of User (Read-only)"
+     "description": "CustomerId of User (Read-only)",
+     "readOnly": true
     },
     "deletionTime": {
      "type": "string",
-     "format": "date-time"
+     "format": "date-time",
+     "readOnly": true
     },
     "emails": {
      "type": "any"
     },
     "etag": {
      "type": "string",
-     "description": "ETag of the resource."
+     "description": "ETag of the resource.",
+     "readOnly": true
     },
     "externalIds": {
      "type": "any"
@@ -1249,25 +1706,30 @@
     },
     "isAdmin": {
      "type": "boolean",
-     "description": "Boolean indicating if the user is admin (Read-only)"
+     "description": "Boolean indicating if the user is admin (Read-only)",
+     "readOnly": true
     },
     "isDelegatedAdmin": {
      "type": "boolean",
-     "description": "Boolean indicating if the user is delegated admin (Read-only)"
+     "description": "Boolean indicating if the user is delegated admin (Read-only)",
+     "readOnly": true
     },
     "isMailboxSetup": {
      "type": "boolean",
-     "description": "Is mailbox setup (Read-only)"
+     "description": "Is mailbox setup (Read-only)",
+     "readOnly": true
     },
     "kind": {
      "type": "string",
      "description": "Kind of resource this is.",
-     "default": "admin#directory#user"
+     "default": "admin#directory#user",
+     "readOnly": true
     },
     "lastLoginTime": {
      "type": "string",
      "description": "User's last login time. (Read-only)",
-     "format": "date-time"
+     "format": "date-time",
+     "readOnly": true
     },
     "name": {
      "$ref": "UserName",
@@ -1281,6 +1743,7 @@
     "nonEditableAliases": {
      "type": "array",
      "description": "List of non editable aliases (Read-only)",
+     "readOnly": true,
      "items": {
       "type": "string"
      }
@@ -1325,15 +1788,18 @@
     },
     "suspensionReason": {
      "type": "string",
-     "description": "Suspension reason if user is suspended (Read-only)"
+     "description": "Suspension reason if user is suspended (Read-only)",
+     "readOnly": true
     },
     "thumbnailPhotoEtag": {
      "type": "string",
-     "description": "ETag of the user's photo (Read-only)"
+     "description": "ETag of the user's photo (Read-only)",
+     "readOnly": true
     },
     "thumbnailPhotoUrl": {
      "type": "string",
-     "description": "Photo Url of the user (Read-only)"
+     "description": "Photo Url of the user (Read-only)",
+     "readOnly": true
     },
     "websites": {
      "type": "any"
@@ -2131,6 +2597,315 @@
     }
    }
   },
+  "customers": {
+   "methods": {
+    "get": {
+     "id": "directory.customers.get",
+     "path": "customers/{customerKey}",
+     "httpMethod": "GET",
+     "description": "Retrives a customer.",
+     "parameters": {
+      "customerKey": {
+       "type": "string",
+       "description": "Id of the customer to be retrieved",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "customerKey"
+     ],
+     "response": {
+      "$ref": "Customer"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.customer",
+      "https://www.googleapis.com/auth/admin.directory.customer.readonly"
+     ]
+    },
+    "patch": {
+     "id": "directory.customers.patch",
+     "path": "customers/{customerKey}",
+     "httpMethod": "PATCH",
+     "description": "Updates a customer. This method supports patch semantics.",
+     "parameters": {
+      "customerKey": {
+       "type": "string",
+       "description": "Id of the customer to be updated",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "customerKey"
+     ],
+     "request": {
+      "$ref": "Customer"
+     },
+     "response": {
+      "$ref": "Customer"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.customer"
+     ]
+    },
+    "update": {
+     "id": "directory.customers.update",
+     "path": "customers/{customerKey}",
+     "httpMethod": "PUT",
+     "description": "Updates a customer.",
+     "parameters": {
+      "customerKey": {
+       "type": "string",
+       "description": "Id of the customer to be updated",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "customerKey"
+     ],
+     "request": {
+      "$ref": "Customer"
+     },
+     "response": {
+      "$ref": "Customer"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.customer"
+     ]
+    }
+   }
+  },
+  "domainAliases": {
+   "methods": {
+    "delete": {
+     "id": "directory.domainAliases.delete",
+     "path": "customer/{customer}/domainaliases/{domainAliasName}",
+     "httpMethod": "DELETE",
+     "description": "Deletes a Domain Alias of the customer.",
+     "parameters": {
+      "customer": {
+       "type": "string",
+       "description": "Immutable id of the Google Apps account.",
+       "required": true,
+       "location": "path"
+      },
+      "domainAliasName": {
+       "type": "string",
+       "description": "Name of domain alias to be retrieved.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "customer",
+      "domainAliasName"
+     ],
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.domain"
+     ]
+    },
+    "get": {
+     "id": "directory.domainAliases.get",
+     "path": "customer/{customer}/domainaliases/{domainAliasName}",
+     "httpMethod": "GET",
+     "description": "Retrieves a domain alias of the customer.",
+     "parameters": {
+      "customer": {
+       "type": "string",
+       "description": "Immutable id of the Google Apps account.",
+       "required": true,
+       "location": "path"
+      },
+      "domainAliasName": {
+       "type": "string",
+       "description": "Name of domain alias to be retrieved.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "customer",
+      "domainAliasName"
+     ],
+     "response": {
+      "$ref": "DomainAlias"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.domain",
+      "https://www.googleapis.com/auth/admin.directory.domain.readonly"
+     ]
+    },
+    "insert": {
+     "id": "directory.domainAliases.insert",
+     "path": "customer/{customer}/domainaliases",
+     "httpMethod": "POST",
+     "description": "Inserts a Domain alias of the customer.",
+     "parameters": {
+      "customer": {
+       "type": "string",
+       "description": "Immutable id of the Google Apps account.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "customer"
+     ],
+     "request": {
+      "$ref": "DomainAlias"
+     },
+     "response": {
+      "$ref": "DomainAlias"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.domain"
+     ]
+    },
+    "list": {
+     "id": "directory.domainAliases.list",
+     "path": "customer/{customer}/domainaliases",
+     "httpMethod": "GET",
+     "description": "Lists the domain aliases of the customer.",
+     "parameters": {
+      "customer": {
+       "type": "string",
+       "description": "Immutable id of the Google Apps account.",
+       "required": true,
+       "location": "path"
+      },
+      "parentDomainName": {
+       "type": "string",
+       "description": "Name of the parent domain for which domain aliases are to be fetched.",
+       "location": "query"
+      }
+     },
+     "parameterOrder": [
+      "customer"
+     ],
+     "response": {
+      "$ref": "DomainAliases"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.domain",
+      "https://www.googleapis.com/auth/admin.directory.domain.readonly"
+     ]
+    }
+   }
+  },
+  "domains": {
+   "methods": {
+    "delete": {
+     "id": "directory.domains.delete",
+     "path": "customer/{customer}/domains/{domainName}",
+     "httpMethod": "DELETE",
+     "description": "Deletes a domain of the customer.",
+     "parameters": {
+      "customer": {
+       "type": "string",
+       "description": "Immutable id of the Google Apps account.",
+       "required": true,
+       "location": "path"
+      },
+      "domainName": {
+       "type": "string",
+       "description": "Name of domain to be deleted",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "customer",
+      "domainName"
+     ],
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.domain"
+     ]
+    },
+    "get": {
+     "id": "directory.domains.get",
+     "path": "customer/{customer}/domains/{domainName}",
+     "httpMethod": "GET",
+     "description": "Retrives a domain of the customer.",
+     "parameters": {
+      "customer": {
+       "type": "string",
+       "description": "Immutable id of the Google Apps account.",
+       "required": true,
+       "location": "path"
+      },
+      "domainName": {
+       "type": "string",
+       "description": "Name of domain to be retrieved",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "customer",
+      "domainName"
+     ],
+     "response": {
+      "$ref": "Domains"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.domain",
+      "https://www.googleapis.com/auth/admin.directory.domain.readonly"
+     ]
+    },
+    "insert": {
+     "id": "directory.domains.insert",
+     "path": "customer/{customer}/domains",
+     "httpMethod": "POST",
+     "description": "Inserts a domain of the customer.",
+     "parameters": {
+      "customer": {
+       "type": "string",
+       "description": "Immutable id of the Google Apps account.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "customer"
+     ],
+     "request": {
+      "$ref": "Domains"
+     },
+     "response": {
+      "$ref": "Domains"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.domain"
+     ]
+    },
+    "list": {
+     "id": "directory.domains.list",
+     "path": "customer/{customer}/domains",
+     "httpMethod": "GET",
+     "description": "Lists the domains of the customer.",
+     "parameters": {
+      "customer": {
+       "type": "string",
+       "description": "Immutable id of the Google Apps account.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "customer"
+     ],
+     "response": {
+      "$ref": "Domains2"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.domain",
+      "https://www.googleapis.com/auth/admin.directory.domain.readonly"
+     ]
+    }
+   }
+  },
   "groups": {
    "methods": {
     "delete": {
@@ -3142,6 +3917,360 @@
     }
    }
   },
+  "privileges": {
+   "methods": {
+    "list": {
+     "id": "directory.privileges.list",
+     "path": "customer/{customer}/roles/ALL/privileges",
+     "httpMethod": "GET",
+     "description": "Retrieves a paginated list of all privileges for a customer.",
+     "parameters": {
+      "customer": {
+       "type": "string",
+       "description": "Immutable ID of the Google Apps account.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "customer"
+     ],
+     "response": {
+      "$ref": "Privileges"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.rolemanagement",
+      "https://www.googleapis.com/auth/admin.directory.rolemanagement.readonly"
+     ]
+    }
+   }
+  },
+  "roleAssignments": {
+   "methods": {
+    "delete": {
+     "id": "directory.roleAssignments.delete",
+     "path": "customer/{customer}/roleassignments/{roleAssignmentId}",
+     "httpMethod": "DELETE",
+     "description": "Deletes a role assignment.",
+     "parameters": {
+      "customer": {
+       "type": "string",
+       "description": "Immutable ID of the Google Apps account.",
+       "required": true,
+       "location": "path"
+      },
+      "roleAssignmentId": {
+       "type": "string",
+       "description": "Immutable ID of the role assignment.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "customer",
+      "roleAssignmentId"
+     ],
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.rolemanagement"
+     ]
+    },
+    "get": {
+     "id": "directory.roleAssignments.get",
+     "path": "customer/{customer}/roleassignments/{roleAssignmentId}",
+     "httpMethod": "GET",
+     "description": "Retrieve a role assignment.",
+     "parameters": {
+      "customer": {
+       "type": "string",
+       "description": "Immutable ID of the Google Apps account.",
+       "required": true,
+       "location": "path"
+      },
+      "roleAssignmentId": {
+       "type": "string",
+       "description": "Immutable ID of the role assignment.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "customer",
+      "roleAssignmentId"
+     ],
+     "response": {
+      "$ref": "RoleAssignment"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.rolemanagement",
+      "https://www.googleapis.com/auth/admin.directory.rolemanagement.readonly"
+     ]
+    },
+    "insert": {
+     "id": "directory.roleAssignments.insert",
+     "path": "customer/{customer}/roleassignments",
+     "httpMethod": "POST",
+     "description": "Creates a role assignment.",
+     "parameters": {
+      "customer": {
+       "type": "string",
+       "description": "Immutable ID of the Google Apps account.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "customer"
+     ],
+     "request": {
+      "$ref": "RoleAssignment"
+     },
+     "response": {
+      "$ref": "RoleAssignment"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.rolemanagement"
+     ]
+    },
+    "list": {
+     "id": "directory.roleAssignments.list",
+     "path": "customer/{customer}/roleassignments",
+     "httpMethod": "GET",
+     "description": "Retrieves a paginated list of all roleAssignments.",
+     "parameters": {
+      "customer": {
+       "type": "string",
+       "description": "Immutable ID of the Google Apps account.",
+       "required": true,
+       "location": "path"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "Maximum number of results to return.",
+       "format": "int32",
+       "minimum": "1",
+       "maximum": "200",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "Token to specify the next page in the list.",
+       "location": "query"
+      },
+      "roleId": {
+       "type": "string",
+       "description": "Immutable ID of a role. If included in the request, returns only role assignments containing this role ID.",
+       "location": "query"
+      },
+      "userKey": {
+       "type": "string",
+       "description": "The user's primary email address, alias email address, or unique user ID. If included in the request, returns role assignments only for this user.",
+       "location": "query"
+      }
+     },
+     "parameterOrder": [
+      "customer"
+     ],
+     "response": {
+      "$ref": "RoleAssignments"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.rolemanagement",
+      "https://www.googleapis.com/auth/admin.directory.rolemanagement.readonly"
+     ]
+    }
+   }
+  },
+  "roles": {
+   "methods": {
+    "delete": {
+     "id": "directory.roles.delete",
+     "path": "customer/{customer}/roles/{roleId}",
+     "httpMethod": "DELETE",
+     "description": "Deletes a role.",
+     "parameters": {
+      "customer": {
+       "type": "string",
+       "description": "Immutable ID of the Google Apps account.",
+       "required": true,
+       "location": "path"
+      },
+      "roleId": {
+       "type": "string",
+       "description": "Immutable ID of the role.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "customer",
+      "roleId"
+     ],
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.rolemanagement"
+     ]
+    },
+    "get": {
+     "id": "directory.roles.get",
+     "path": "customer/{customer}/roles/{roleId}",
+     "httpMethod": "GET",
+     "description": "Retrieves a role.",
+     "parameters": {
+      "customer": {
+       "type": "string",
+       "description": "Immutable ID of the Google Apps account.",
+       "required": true,
+       "location": "path"
+      },
+      "roleId": {
+       "type": "string",
+       "description": "Immutable ID of the role.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "customer",
+      "roleId"
+     ],
+     "response": {
+      "$ref": "Role"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.rolemanagement",
+      "https://www.googleapis.com/auth/admin.directory.rolemanagement.readonly"
+     ]
+    },
+    "insert": {
+     "id": "directory.roles.insert",
+     "path": "customer/{customer}/roles",
+     "httpMethod": "POST",
+     "description": "Creates a role.",
+     "parameters": {
+      "customer": {
+       "type": "string",
+       "description": "Immutable ID of the Google Apps account.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "customer"
+     ],
+     "request": {
+      "$ref": "Role"
+     },
+     "response": {
+      "$ref": "Role"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.rolemanagement"
+     ]
+    },
+    "list": {
+     "id": "directory.roles.list",
+     "path": "customer/{customer}/roles",
+     "httpMethod": "GET",
+     "description": "Retrieves a paginated list of all the roles in a domain.",
+     "parameters": {
+      "customer": {
+       "type": "string",
+       "description": "Immutable id of the Google Apps account.",
+       "required": true,
+       "location": "path"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "Maximum number of results to return.",
+       "format": "int32",
+       "minimum": "1",
+       "maximum": "100",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "Token to specify the next page in the list.",
+       "location": "query"
+      }
+     },
+     "parameterOrder": [
+      "customer"
+     ],
+     "response": {
+      "$ref": "Roles"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.rolemanagement",
+      "https://www.googleapis.com/auth/admin.directory.rolemanagement.readonly"
+     ]
+    },
+    "patch": {
+     "id": "directory.roles.patch",
+     "path": "customer/{customer}/roles/{roleId}",
+     "httpMethod": "PATCH",
+     "description": "Updates a role. This method supports patch semantics.",
+     "parameters": {
+      "customer": {
+       "type": "string",
+       "description": "Immutable ID of the Google Apps account.",
+       "required": true,
+       "location": "path"
+      },
+      "roleId": {
+       "type": "string",
+       "description": "Immutable ID of the role.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "customer",
+      "roleId"
+     ],
+     "request": {
+      "$ref": "Role"
+     },
+     "response": {
+      "$ref": "Role"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.rolemanagement"
+     ]
+    },
+    "update": {
+     "id": "directory.roles.update",
+     "path": "customer/{customer}/roles/{roleId}",
+     "httpMethod": "PUT",
+     "description": "Updates a role.",
+     "parameters": {
+      "customer": {
+       "type": "string",
+       "description": "Immutable ID of the Google Apps account.",
+       "required": true,
+       "location": "path"
+      },
+      "roleId": {
+       "type": "string",
+       "description": "Immutable ID of the role.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "customer",
+      "roleId"
+     ],
+     "request": {
+      "$ref": "Role"
+     },
+     "response": {
+      "$ref": "Role"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.rolemanagement"
+     ]
+    }
+   }
+  },
   "schemas": {
    "methods": {
     "delete": {
diff --git a/admin/directory/v1/admin-gen.go b/admin/directory/v1/admin-gen.go
index e38aa6c..fb70345 100644
--- a/admin/directory/v1/admin-gen.go
+++ b/admin/directory/v1/admin-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "admin:directory_v1"
 const apiName = "admin"
@@ -45,6 +47,12 @@
 
 // OAuth2 scopes used by this API.
 const (
+	// View and manage customer related information
+	AdminDirectoryCustomerScope = "https://www.googleapis.com/auth/admin.directory.customer"
+
+	// View customer related information
+	AdminDirectoryCustomerReadonlyScope = "https://www.googleapis.com/auth/admin.directory.customer.readonly"
+
 	// View and manage your Chrome OS devices' metadata
 	AdminDirectoryDeviceChromeosScope = "https://www.googleapis.com/auth/admin.directory.device.chromeos"
 
@@ -60,6 +68,12 @@
 	// View your mobile devices' metadata
 	AdminDirectoryDeviceMobileReadonlyScope = "https://www.googleapis.com/auth/admin.directory.device.mobile.readonly"
 
+	// View and manage the provisioning of domains for your customers
+	AdminDirectoryDomainScope = "https://www.googleapis.com/auth/admin.directory.domain"
+
+	// View domains related to your customers
+	AdminDirectoryDomainReadonlyScope = "https://www.googleapis.com/auth/admin.directory.domain.readonly"
+
 	// View and manage the provisioning of groups on your domain
 	AdminDirectoryGroupScope = "https://www.googleapis.com/auth/admin.directory.group"
 
@@ -81,6 +95,12 @@
 	// View organization units on your domain
 	AdminDirectoryOrgunitReadonlyScope = "https://www.googleapis.com/auth/admin.directory.orgunit.readonly"
 
+	// Manage delegated admin roles for your domain
+	AdminDirectoryRolemanagementScope = "https://www.googleapis.com/auth/admin.directory.rolemanagement"
+
+	// View delegated admin roles for your domain
+	AdminDirectoryRolemanagementReadonlyScope = "https://www.googleapis.com/auth/admin.directory.rolemanagement.readonly"
+
 	// View and manage the provisioning of users on your domain
 	AdminDirectoryUserScope = "https://www.googleapis.com/auth/admin.directory.user"
 
@@ -111,11 +131,17 @@
 	s.Asps = NewAspsService(s)
 	s.Channels = NewChannelsService(s)
 	s.Chromeosdevices = NewChromeosdevicesService(s)
+	s.Customers = NewCustomersService(s)
+	s.DomainAliases = NewDomainAliasesService(s)
+	s.Domains = NewDomainsService(s)
 	s.Groups = NewGroupsService(s)
 	s.Members = NewMembersService(s)
 	s.Mobiledevices = NewMobiledevicesService(s)
 	s.Notifications = NewNotificationsService(s)
 	s.Orgunits = NewOrgunitsService(s)
+	s.Privileges = NewPrivilegesService(s)
+	s.RoleAssignments = NewRoleAssignmentsService(s)
+	s.Roles = NewRolesService(s)
 	s.Schemas = NewSchemasService(s)
 	s.Tokens = NewTokensService(s)
 	s.Users = NewUsersService(s)
@@ -134,6 +160,12 @@
 
 	Chromeosdevices *ChromeosdevicesService
 
+	Customers *CustomersService
+
+	DomainAliases *DomainAliasesService
+
+	Domains *DomainsService
+
 	Groups *GroupsService
 
 	Members *MembersService
@@ -144,6 +176,12 @@
 
 	Orgunits *OrgunitsService
 
+	Privileges *PrivilegesService
+
+	RoleAssignments *RoleAssignmentsService
+
+	Roles *RolesService
+
 	Schemas *SchemasService
 
 	Tokens *TokensService
@@ -187,6 +225,33 @@
 	s *Service
 }
 
+func NewCustomersService(s *Service) *CustomersService {
+	rs := &CustomersService{s: s}
+	return rs
+}
+
+type CustomersService struct {
+	s *Service
+}
+
+func NewDomainAliasesService(s *Service) *DomainAliasesService {
+	rs := &DomainAliasesService{s: s}
+	return rs
+}
+
+type DomainAliasesService struct {
+	s *Service
+}
+
+func NewDomainsService(s *Service) *DomainsService {
+	rs := &DomainsService{s: s}
+	return rs
+}
+
+type DomainsService struct {
+	s *Service
+}
+
 func NewGroupsService(s *Service) *GroupsService {
 	rs := &GroupsService{s: s}
 	rs.Aliases = NewGroupsAliasesService(s)
@@ -244,6 +309,33 @@
 	s *Service
 }
 
+func NewPrivilegesService(s *Service) *PrivilegesService {
+	rs := &PrivilegesService{s: s}
+	return rs
+}
+
+type PrivilegesService struct {
+	s *Service
+}
+
+func NewRoleAssignmentsService(s *Service) *RoleAssignmentsService {
+	rs := &RoleAssignmentsService{s: s}
+	return rs
+}
+
+type RoleAssignmentsService struct {
+	s *Service
+}
+
+func NewRolesService(s *Service) *RolesService {
+	rs := &RolesService{s: s}
+	return rs
+}
+
+type RolesService struct {
+	s *Service
+}
+
 func NewSchemasService(s *Service) *SchemasService {
 	rs := &SchemasService{s: s}
 	return rs
@@ -692,6 +784,255 @@
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
 
+// Customer: JSON template for Customer Resource object in Directory
+// API.
+type Customer struct {
+	// AlternateEmail: The customer's secondary contact email address. This
+	// email address cannot be on the same domain as the customerDomain
+	AlternateEmail string `json:"alternateEmail,omitempty"`
+
+	// CustomerCreationTime: The customer's creation time (Readonly)
+	CustomerCreationTime string `json:"customerCreationTime,omitempty"`
+
+	// CustomerDomain: The customer's primary domain name string. Do not
+	// include the www prefix when creating a new customer.
+	CustomerDomain string `json:"customerDomain,omitempty"`
+
+	// Etag: ETag of the resource.
+	Etag string `json:"etag,omitempty"`
+
+	// Id: The unique ID for the customer's Google account. (Readonly)
+	Id string `json:"id,omitempty"`
+
+	// Kind: Identifies the resource as a customer. Value:
+	// admin#directory#customer
+	Kind string `json:"kind,omitempty"`
+
+	// Language: The customer's ISO 639-2 language code. The default value
+	// is en-US
+	Language string `json:"language,omitempty"`
+
+	// PhoneNumber: The customer's contact phone number in E.164 format.
+	PhoneNumber string `json:"phoneNumber,omitempty"`
+
+	// PostalAddress: The customer's postal address information.
+	PostalAddress *CustomerPostalAddress `json:"postalAddress,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "AlternateEmail") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *Customer) MarshalJSON() ([]byte, error) {
+	type noMethod Customer
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// CustomerPostalAddress: JSON template for postal address of a
+// customer.
+type CustomerPostalAddress struct {
+	// AddressLine1: A customer's physical address. The address can be
+	// composed of one to three lines.
+	AddressLine1 string `json:"addressLine1,omitempty"`
+
+	// AddressLine2: Address line 2 of the address.
+	AddressLine2 string `json:"addressLine2,omitempty"`
+
+	// AddressLine3: Address line 3 of the address.
+	AddressLine3 string `json:"addressLine3,omitempty"`
+
+	// ContactName: The customer contact's name.
+	ContactName string `json:"contactName,omitempty"`
+
+	// CountryCode: This is a required property. For countryCode information
+	// see the ISO 3166 country code elements.
+	CountryCode string `json:"countryCode,omitempty"`
+
+	// Locality: Name of the locality. An example of a locality value is the
+	// city of San Francisco.
+	Locality string `json:"locality,omitempty"`
+
+	// OrganizationName: The company or company division name.
+	OrganizationName string `json:"organizationName,omitempty"`
+
+	// PostalCode: The postal code. A postalCode example is a postal zip
+	// code such as 10009. This is in accordance with -
+	// http://portablecontacts.net/draft-spec.html#address_element.
+	PostalCode string `json:"postalCode,omitempty"`
+
+	// Region: Name of the region. An example of a region value is NY for
+	// the state of New York.
+	Region string `json:"region,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "AddressLine1") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *CustomerPostalAddress) MarshalJSON() ([]byte, error) {
+	type noMethod CustomerPostalAddress
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// DomainAlias: JSON template for Domain Alias object in Directory API.
+type DomainAlias struct {
+	// CreationTime: The creation time of the domain alias. (Read-only).
+	CreationTime int64 `json:"creationTime,omitempty,string"`
+
+	// DomainAliasName: The domain alias name.
+	DomainAliasName string `json:"domainAliasName,omitempty"`
+
+	// Etag: ETag of the resource.
+	Etag string `json:"etag,omitempty"`
+
+	// Kind: Kind of resource this is.
+	Kind string `json:"kind,omitempty"`
+
+	// ParentDomainName: The parent domain name that the domain alias is
+	// associated with. This can either be a primary or secondary domain
+	// name within a customer.
+	ParentDomainName string `json:"parentDomainName,omitempty"`
+
+	// Verified: Indicates the verification state of a domain alias.
+	// (Read-only)
+	Verified bool `json:"verified,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:"-"`
+}
+
+func (s *DomainAlias) MarshalJSON() ([]byte, error) {
+	type noMethod DomainAlias
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// DomainAliases: JSON response template to list domain aliases in
+// Directory API.
+type DomainAliases struct {
+	// DomainAliases: List of domain alias objects.
+	DomainAliases []*DomainAlias `json:"domainAliases,omitempty"`
+
+	// Etag: ETag of the resource.
+	Etag string `json:"etag,omitempty"`
+
+	// Kind: Kind of resource this is.
+	Kind string `json:"kind,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "DomainAliases") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *DomainAliases) MarshalJSON() ([]byte, error) {
+	type noMethod DomainAliases
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// Domains: JSON template for Domain object in Directory API.
+type Domains struct {
+	// CreationTime: Creation time of the domain. (Read-only).
+	CreationTime int64 `json:"creationTime,omitempty,string"`
+
+	// DomainAliases: List of domain alias objects. (Read-only)
+	DomainAliases []*DomainAlias `json:"domainAliases,omitempty"`
+
+	// DomainName: The domain name of the customer.
+	DomainName string `json:"domainName,omitempty"`
+
+	// Etag: ETag of the resource.
+	Etag string `json:"etag,omitempty"`
+
+	// IsPrimary: Indicates if the domain is a primary domain (Read-only).
+	IsPrimary bool `json:"isPrimary,omitempty"`
+
+	// Kind: Kind of resource this is.
+	Kind string `json:"kind,omitempty"`
+
+	// Verified: Indicates the verification state of a domain. (Read-only).
+	Verified bool `json:"verified,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:"-"`
+}
+
+func (s *Domains) MarshalJSON() ([]byte, error) {
+	type noMethod Domains
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// Domains2: JSON response template to list Domains in Directory API.
+type Domains2 struct {
+	// Domains: List of domain objects.
+	Domains []*Domains `json:"domains,omitempty"`
+
+	// Etag: ETag of the resource.
+	Etag string `json:"etag,omitempty"`
+
+	// Kind: Kind of resource this is.
+	Kind string `json:"kind,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Domains") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *Domains2) MarshalJSON() ([]byte, error) {
+	type noMethod Domains2
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
 // Group: JSON template for Group resource in Directory API.
 type Group struct {
 	// AdminCreated: Is the group created by admin (Read-only) *
@@ -1225,6 +1566,265 @@
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
 
+// Privilege: JSON template for privilege resource in Directory API.
+type Privilege struct {
+	// ChildPrivileges: A list of child privileges. Privileges for a service
+	// form a tree. Each privilege can have a list of child privileges; this
+	// list is empty for a leaf privilege.
+	ChildPrivileges []*Privilege `json:"childPrivileges,omitempty"`
+
+	// Etag: ETag of the resource.
+	Etag string `json:"etag,omitempty"`
+
+	// IsOuScopable: If the privilege can be restricted to an organization
+	// unit.
+	IsOuScopable bool `json:"isOuScopable,omitempty"`
+
+	// Kind: The type of the API resource. This is always
+	// admin#directory#privilege.
+	Kind string `json:"kind,omitempty"`
+
+	// PrivilegeName: The name of the privilege.
+	PrivilegeName string `json:"privilegeName,omitempty"`
+
+	// ServiceId: The obfuscated ID of the service this privilege is for.
+	ServiceId string `json:"serviceId,omitempty"`
+
+	// ServiceName: The name of the service this privilege is for.
+	ServiceName string `json:"serviceName,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ChildPrivileges") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *Privilege) MarshalJSON() ([]byte, error) {
+	type noMethod Privilege
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// Privileges: JSON response template for List privileges operation in
+// Directory API.
+type Privileges struct {
+	// Etag: ETag of the resource.
+	Etag string `json:"etag,omitempty"`
+
+	// Items: A list of Privilege resources.
+	Items []*Privilege `json:"items,omitempty"`
+
+	// Kind: The type of the API resource. This is always
+	// admin#directory#privileges.
+	Kind string `json:"kind,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Etag") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *Privileges) MarshalJSON() ([]byte, error) {
+	type noMethod Privileges
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// Role: JSON template for role resource in Directory API.
+type Role struct {
+	// Etag: ETag of the resource.
+	Etag string `json:"etag,omitempty"`
+
+	// IsSuperAdminRole: Returns true if the role is a super admin role.
+	IsSuperAdminRole bool `json:"isSuperAdminRole,omitempty"`
+
+	// IsSystemRole: Returns true if this is a pre-defined system role.
+	IsSystemRole bool `json:"isSystemRole,omitempty"`
+
+	// Kind: The type of the API resource. This is always
+	// admin#directory#role.
+	Kind string `json:"kind,omitempty"`
+
+	// RoleDescription: A short description of the role.
+	RoleDescription string `json:"roleDescription,omitempty"`
+
+	// RoleId: ID of the role.
+	RoleId int64 `json:"roleId,omitempty,string"`
+
+	// RoleName: Name of the role.
+	RoleName string `json:"roleName,omitempty"`
+
+	// RolePrivileges: The set of privileges that are granted to this role.
+	RolePrivileges []*RoleRolePrivileges `json:"rolePrivileges,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Etag") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *Role) MarshalJSON() ([]byte, error) {
+	type noMethod Role
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+type RoleRolePrivileges struct {
+	// PrivilegeName: The name of the privilege.
+	PrivilegeName string `json:"privilegeName,omitempty"`
+
+	// ServiceId: The obfuscated ID of the service this privilege is for.
+	ServiceId string `json:"serviceId,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "PrivilegeName") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *RoleRolePrivileges) MarshalJSON() ([]byte, error) {
+	type noMethod RoleRolePrivileges
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// RoleAssignment: JSON template for roleAssignment resource in
+// Directory API.
+type RoleAssignment struct {
+	// AssignedTo: The unique ID of the user this role is assigned to.
+	AssignedTo string `json:"assignedTo,omitempty"`
+
+	// Etag: ETag of the resource.
+	Etag string `json:"etag,omitempty"`
+
+	// Kind: The type of the API resource. This is always
+	// admin#directory#roleAssignment.
+	Kind string `json:"kind,omitempty"`
+
+	// OrgUnitId: If the role is restricted to an organization unit, this
+	// contains the ID for the organization unit the exercise of this role
+	// is restricted to.
+	OrgUnitId string `json:"orgUnitId,omitempty"`
+
+	// RoleAssignmentId: ID of this roleAssignment.
+	RoleAssignmentId int64 `json:"roleAssignmentId,omitempty,string"`
+
+	// RoleId: The ID of the role that is assigned.
+	RoleId int64 `json:"roleId,omitempty,string"`
+
+	// ScopeType: The scope in which this role is assigned. Possible values
+	// are:
+	// - CUSTOMER
+	// - ORG_UNIT
+	ScopeType string `json:"scopeType,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "AssignedTo") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *RoleAssignment) MarshalJSON() ([]byte, error) {
+	type noMethod RoleAssignment
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// RoleAssignments: JSON response template for List roleAssignments
+// operation in Directory API.
+type RoleAssignments struct {
+	// Etag: ETag of the resource.
+	Etag string `json:"etag,omitempty"`
+
+	// Items: A list of RoleAssignment resources.
+	Items []*RoleAssignment `json:"items,omitempty"`
+
+	// Kind: The type of the API resource. This is always
+	// admin#directory#roleAssignments.
+	Kind string `json:"kind,omitempty"`
+
+	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. "Etag") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *RoleAssignments) MarshalJSON() ([]byte, error) {
+	type noMethod RoleAssignments
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// Roles: JSON response template for List roles operation in Directory
+// API.
+type Roles struct {
+	// Etag: ETag of the resource.
+	Etag string `json:"etag,omitempty"`
+
+	// Items: A list of Role resources.
+	Items []*Role `json:"items,omitempty"`
+
+	// Kind: The type of the API resource. This is always
+	// admin#directory#roles.
+	Kind string `json:"kind,omitempty"`
+
+	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. "Etag") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *Roles) MarshalJSON() ([]byte, error) {
+	type noMethod Roles
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
 // Schema: JSON template for Schema resource in Directory API.
 type Schema struct {
 	// Etag: ETag of the resource.
@@ -3342,6 +3942,1364 @@
 
 }
 
+// method id "directory.customers.get":
+
+type CustomersGetCall struct {
+	s           *Service
+	customerKey string
+	opt_        map[string]interface{}
+	ctx_        context.Context
+}
+
+// Get: Retrives a customer.
+func (r *CustomersService) Get(customerKey string) *CustomersGetCall {
+	c := &CustomersGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.customerKey = customerKey
+	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 *CustomersGetCall) Fields(s ...googleapi.Field) *CustomersGetCall {
+	c.opt_["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 *CustomersGetCall) IfNoneMatch(entityTag string) *CustomersGetCall {
+	c.opt_["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 *CustomersGetCall) Context(ctx context.Context) *CustomersGetCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *CustomersGetCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "customers/{customerKey}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"customerKey": c.customerKey,
+	})
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if v, ok := c.opt_["ifNoneMatch"]; ok {
+		req.Header.Set("If-None-Match", fmt.Sprintf("%v", v))
+	}
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "directory.customers.get" call.
+// Exactly one of *Customer or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Customer.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 *CustomersGetCall) Do() (*Customer, error) {
+	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 := &Customer{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrives a customer.",
+	//   "httpMethod": "GET",
+	//   "id": "directory.customers.get",
+	//   "parameterOrder": [
+	//     "customerKey"
+	//   ],
+	//   "parameters": {
+	//     "customerKey": {
+	//       "description": "Id of the customer to be retrieved",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "customers/{customerKey}",
+	//   "response": {
+	//     "$ref": "Customer"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.customer",
+	//     "https://www.googleapis.com/auth/admin.directory.customer.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "directory.customers.patch":
+
+type CustomersPatchCall struct {
+	s           *Service
+	customerKey string
+	customer    *Customer
+	opt_        map[string]interface{}
+	ctx_        context.Context
+}
+
+// Patch: Updates a customer. This method supports patch semantics.
+func (r *CustomersService) Patch(customerKey string, customer *Customer) *CustomersPatchCall {
+	c := &CustomersPatchCall{s: r.s, opt_: make(map[string]interface{})}
+	c.customerKey = customerKey
+	c.customer = customer
+	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 *CustomersPatchCall) Fields(s ...googleapi.Field) *CustomersPatchCall {
+	c.opt_["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 *CustomersPatchCall) Context(ctx context.Context) *CustomersPatchCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *CustomersPatchCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.customer)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "customers/{customerKey}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("PATCH", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"customerKey": c.customerKey,
+	})
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "directory.customers.patch" call.
+// Exactly one of *Customer or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Customer.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 *CustomersPatchCall) Do() (*Customer, error) {
+	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 := &Customer{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates a customer. This method supports patch semantics.",
+	//   "httpMethod": "PATCH",
+	//   "id": "directory.customers.patch",
+	//   "parameterOrder": [
+	//     "customerKey"
+	//   ],
+	//   "parameters": {
+	//     "customerKey": {
+	//       "description": "Id of the customer to be updated",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "customers/{customerKey}",
+	//   "request": {
+	//     "$ref": "Customer"
+	//   },
+	//   "response": {
+	//     "$ref": "Customer"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.customer"
+	//   ]
+	// }
+
+}
+
+// method id "directory.customers.update":
+
+type CustomersUpdateCall struct {
+	s           *Service
+	customerKey string
+	customer    *Customer
+	opt_        map[string]interface{}
+	ctx_        context.Context
+}
+
+// Update: Updates a customer.
+func (r *CustomersService) Update(customerKey string, customer *Customer) *CustomersUpdateCall {
+	c := &CustomersUpdateCall{s: r.s, opt_: make(map[string]interface{})}
+	c.customerKey = customerKey
+	c.customer = customer
+	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 *CustomersUpdateCall) Fields(s ...googleapi.Field) *CustomersUpdateCall {
+	c.opt_["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 *CustomersUpdateCall) Context(ctx context.Context) *CustomersUpdateCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *CustomersUpdateCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.customer)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "customers/{customerKey}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("PUT", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"customerKey": c.customerKey,
+	})
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "directory.customers.update" call.
+// Exactly one of *Customer or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Customer.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 *CustomersUpdateCall) Do() (*Customer, error) {
+	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 := &Customer{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates a customer.",
+	//   "httpMethod": "PUT",
+	//   "id": "directory.customers.update",
+	//   "parameterOrder": [
+	//     "customerKey"
+	//   ],
+	//   "parameters": {
+	//     "customerKey": {
+	//       "description": "Id of the customer to be updated",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "customers/{customerKey}",
+	//   "request": {
+	//     "$ref": "Customer"
+	//   },
+	//   "response": {
+	//     "$ref": "Customer"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.customer"
+	//   ]
+	// }
+
+}
+
+// method id "directory.domainAliases.delete":
+
+type DomainAliasesDeleteCall struct {
+	s               *Service
+	customer        string
+	domainAliasName string
+	opt_            map[string]interface{}
+	ctx_            context.Context
+}
+
+// Delete: Deletes a Domain Alias of the customer.
+func (r *DomainAliasesService) Delete(customer string, domainAliasName string) *DomainAliasesDeleteCall {
+	c := &DomainAliasesDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.customer = customer
+	c.domainAliasName = domainAliasName
+	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 *DomainAliasesDeleteCall) Fields(s ...googleapi.Field) *DomainAliasesDeleteCall {
+	c.opt_["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 *DomainAliasesDeleteCall) Context(ctx context.Context) *DomainAliasesDeleteCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *DomainAliasesDeleteCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customer}/domainaliases/{domainAliasName}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"customer":        c.customer,
+		"domainAliasName": c.domainAliasName,
+	})
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "directory.domainAliases.delete" call.
+func (c *DomainAliasesDeleteCall) Do() error {
+	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 a Domain Alias of the customer.",
+	//   "httpMethod": "DELETE",
+	//   "id": "directory.domainAliases.delete",
+	//   "parameterOrder": [
+	//     "customer",
+	//     "domainAliasName"
+	//   ],
+	//   "parameters": {
+	//     "customer": {
+	//       "description": "Immutable id of the Google Apps account.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "domainAliasName": {
+	//       "description": "Name of domain alias to be retrieved.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "customer/{customer}/domainaliases/{domainAliasName}",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.domain"
+	//   ]
+	// }
+
+}
+
+// method id "directory.domainAliases.get":
+
+type DomainAliasesGetCall struct {
+	s               *Service
+	customer        string
+	domainAliasName string
+	opt_            map[string]interface{}
+	ctx_            context.Context
+}
+
+// Get: Retrieves a domain alias of the customer.
+func (r *DomainAliasesService) Get(customer string, domainAliasName string) *DomainAliasesGetCall {
+	c := &DomainAliasesGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.customer = customer
+	c.domainAliasName = domainAliasName
+	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 *DomainAliasesGetCall) Fields(s ...googleapi.Field) *DomainAliasesGetCall {
+	c.opt_["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 *DomainAliasesGetCall) IfNoneMatch(entityTag string) *DomainAliasesGetCall {
+	c.opt_["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 *DomainAliasesGetCall) Context(ctx context.Context) *DomainAliasesGetCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *DomainAliasesGetCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customer}/domainaliases/{domainAliasName}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"customer":        c.customer,
+		"domainAliasName": c.domainAliasName,
+	})
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if v, ok := c.opt_["ifNoneMatch"]; ok {
+		req.Header.Set("If-None-Match", fmt.Sprintf("%v", v))
+	}
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "directory.domainAliases.get" call.
+// Exactly one of *DomainAlias or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *DomainAlias.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 *DomainAliasesGetCall) Do() (*DomainAlias, error) {
+	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 := &DomainAlias{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves a domain alias of the customer.",
+	//   "httpMethod": "GET",
+	//   "id": "directory.domainAliases.get",
+	//   "parameterOrder": [
+	//     "customer",
+	//     "domainAliasName"
+	//   ],
+	//   "parameters": {
+	//     "customer": {
+	//       "description": "Immutable id of the Google Apps account.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "domainAliasName": {
+	//       "description": "Name of domain alias to be retrieved.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "customer/{customer}/domainaliases/{domainAliasName}",
+	//   "response": {
+	//     "$ref": "DomainAlias"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.domain",
+	//     "https://www.googleapis.com/auth/admin.directory.domain.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "directory.domainAliases.insert":
+
+type DomainAliasesInsertCall struct {
+	s           *Service
+	customer    string
+	domainalias *DomainAlias
+	opt_        map[string]interface{}
+	ctx_        context.Context
+}
+
+// Insert: Inserts a Domain alias of the customer.
+func (r *DomainAliasesService) Insert(customer string, domainalias *DomainAlias) *DomainAliasesInsertCall {
+	c := &DomainAliasesInsertCall{s: r.s, opt_: make(map[string]interface{})}
+	c.customer = customer
+	c.domainalias = domainalias
+	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 *DomainAliasesInsertCall) Fields(s ...googleapi.Field) *DomainAliasesInsertCall {
+	c.opt_["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 *DomainAliasesInsertCall) Context(ctx context.Context) *DomainAliasesInsertCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *DomainAliasesInsertCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.domainalias)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customer}/domainaliases")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"customer": c.customer,
+	})
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "directory.domainAliases.insert" call.
+// Exactly one of *DomainAlias or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *DomainAlias.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 *DomainAliasesInsertCall) Do() (*DomainAlias, error) {
+	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 := &DomainAlias{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Inserts a Domain alias of the customer.",
+	//   "httpMethod": "POST",
+	//   "id": "directory.domainAliases.insert",
+	//   "parameterOrder": [
+	//     "customer"
+	//   ],
+	//   "parameters": {
+	//     "customer": {
+	//       "description": "Immutable id of the Google Apps account.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "customer/{customer}/domainaliases",
+	//   "request": {
+	//     "$ref": "DomainAlias"
+	//   },
+	//   "response": {
+	//     "$ref": "DomainAlias"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.domain"
+	//   ]
+	// }
+
+}
+
+// method id "directory.domainAliases.list":
+
+type DomainAliasesListCall struct {
+	s        *Service
+	customer string
+	opt_     map[string]interface{}
+	ctx_     context.Context
+}
+
+// List: Lists the domain aliases of the customer.
+func (r *DomainAliasesService) List(customer string) *DomainAliasesListCall {
+	c := &DomainAliasesListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.customer = customer
+	return c
+}
+
+// ParentDomainName sets the optional parameter "parentDomainName": Name
+// of the parent domain for which domain aliases are to be fetched.
+func (c *DomainAliasesListCall) ParentDomainName(parentDomainName string) *DomainAliasesListCall {
+	c.opt_["parentDomainName"] = parentDomainName
+	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 *DomainAliasesListCall) Fields(s ...googleapi.Field) *DomainAliasesListCall {
+	c.opt_["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 *DomainAliasesListCall) IfNoneMatch(entityTag string) *DomainAliasesListCall {
+	c.opt_["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 *DomainAliasesListCall) Context(ctx context.Context) *DomainAliasesListCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *DomainAliasesListCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["parentDomainName"]; ok {
+		params.Set("parentDomainName", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customer}/domainaliases")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"customer": c.customer,
+	})
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if v, ok := c.opt_["ifNoneMatch"]; ok {
+		req.Header.Set("If-None-Match", fmt.Sprintf("%v", v))
+	}
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "directory.domainAliases.list" call.
+// Exactly one of *DomainAliases or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *DomainAliases.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 *DomainAliasesListCall) Do() (*DomainAliases, error) {
+	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 := &DomainAliases{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists the domain aliases of the customer.",
+	//   "httpMethod": "GET",
+	//   "id": "directory.domainAliases.list",
+	//   "parameterOrder": [
+	//     "customer"
+	//   ],
+	//   "parameters": {
+	//     "customer": {
+	//       "description": "Immutable id of the Google Apps account.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "parentDomainName": {
+	//       "description": "Name of the parent domain for which domain aliases are to be fetched.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "customer/{customer}/domainaliases",
+	//   "response": {
+	//     "$ref": "DomainAliases"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.domain",
+	//     "https://www.googleapis.com/auth/admin.directory.domain.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "directory.domains.delete":
+
+type DomainsDeleteCall struct {
+	s          *Service
+	customer   string
+	domainName string
+	opt_       map[string]interface{}
+	ctx_       context.Context
+}
+
+// Delete: Deletes a domain of the customer.
+func (r *DomainsService) Delete(customer string, domainName string) *DomainsDeleteCall {
+	c := &DomainsDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.customer = customer
+	c.domainName = domainName
+	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 *DomainsDeleteCall) Fields(s ...googleapi.Field) *DomainsDeleteCall {
+	c.opt_["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 *DomainsDeleteCall) Context(ctx context.Context) *DomainsDeleteCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *DomainsDeleteCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customer}/domains/{domainName}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"customer":   c.customer,
+		"domainName": c.domainName,
+	})
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "directory.domains.delete" call.
+func (c *DomainsDeleteCall) Do() error {
+	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 a domain of the customer.",
+	//   "httpMethod": "DELETE",
+	//   "id": "directory.domains.delete",
+	//   "parameterOrder": [
+	//     "customer",
+	//     "domainName"
+	//   ],
+	//   "parameters": {
+	//     "customer": {
+	//       "description": "Immutable id of the Google Apps account.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "domainName": {
+	//       "description": "Name of domain to be deleted",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "customer/{customer}/domains/{domainName}",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.domain"
+	//   ]
+	// }
+
+}
+
+// method id "directory.domains.get":
+
+type DomainsGetCall struct {
+	s          *Service
+	customer   string
+	domainName string
+	opt_       map[string]interface{}
+	ctx_       context.Context
+}
+
+// Get: Retrives a domain of the customer.
+func (r *DomainsService) Get(customer string, domainName string) *DomainsGetCall {
+	c := &DomainsGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.customer = customer
+	c.domainName = domainName
+	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 *DomainsGetCall) Fields(s ...googleapi.Field) *DomainsGetCall {
+	c.opt_["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 *DomainsGetCall) IfNoneMatch(entityTag string) *DomainsGetCall {
+	c.opt_["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 *DomainsGetCall) Context(ctx context.Context) *DomainsGetCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *DomainsGetCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customer}/domains/{domainName}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"customer":   c.customer,
+		"domainName": c.domainName,
+	})
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if v, ok := c.opt_["ifNoneMatch"]; ok {
+		req.Header.Set("If-None-Match", fmt.Sprintf("%v", v))
+	}
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "directory.domains.get" call.
+// Exactly one of *Domains or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Domains.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 *DomainsGetCall) Do() (*Domains, error) {
+	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 := &Domains{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrives a domain of the customer.",
+	//   "httpMethod": "GET",
+	//   "id": "directory.domains.get",
+	//   "parameterOrder": [
+	//     "customer",
+	//     "domainName"
+	//   ],
+	//   "parameters": {
+	//     "customer": {
+	//       "description": "Immutable id of the Google Apps account.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "domainName": {
+	//       "description": "Name of domain to be retrieved",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "customer/{customer}/domains/{domainName}",
+	//   "response": {
+	//     "$ref": "Domains"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.domain",
+	//     "https://www.googleapis.com/auth/admin.directory.domain.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "directory.domains.insert":
+
+type DomainsInsertCall struct {
+	s        *Service
+	customer string
+	domains  *Domains
+	opt_     map[string]interface{}
+	ctx_     context.Context
+}
+
+// Insert: Inserts a domain of the customer.
+func (r *DomainsService) Insert(customer string, domains *Domains) *DomainsInsertCall {
+	c := &DomainsInsertCall{s: r.s, opt_: make(map[string]interface{})}
+	c.customer = customer
+	c.domains = domains
+	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 *DomainsInsertCall) Fields(s ...googleapi.Field) *DomainsInsertCall {
+	c.opt_["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 *DomainsInsertCall) Context(ctx context.Context) *DomainsInsertCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *DomainsInsertCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.domains)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customer}/domains")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"customer": c.customer,
+	})
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "directory.domains.insert" call.
+// Exactly one of *Domains or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Domains.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 *DomainsInsertCall) Do() (*Domains, error) {
+	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 := &Domains{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Inserts a domain of the customer.",
+	//   "httpMethod": "POST",
+	//   "id": "directory.domains.insert",
+	//   "parameterOrder": [
+	//     "customer"
+	//   ],
+	//   "parameters": {
+	//     "customer": {
+	//       "description": "Immutable id of the Google Apps account.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "customer/{customer}/domains",
+	//   "request": {
+	//     "$ref": "Domains"
+	//   },
+	//   "response": {
+	//     "$ref": "Domains"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.domain"
+	//   ]
+	// }
+
+}
+
+// method id "directory.domains.list":
+
+type DomainsListCall struct {
+	s        *Service
+	customer string
+	opt_     map[string]interface{}
+	ctx_     context.Context
+}
+
+// List: Lists the domains of the customer.
+func (r *DomainsService) List(customer string) *DomainsListCall {
+	c := &DomainsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.customer = customer
+	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 *DomainsListCall) Fields(s ...googleapi.Field) *DomainsListCall {
+	c.opt_["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 *DomainsListCall) IfNoneMatch(entityTag string) *DomainsListCall {
+	c.opt_["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 *DomainsListCall) Context(ctx context.Context) *DomainsListCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *DomainsListCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customer}/domains")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"customer": c.customer,
+	})
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if v, ok := c.opt_["ifNoneMatch"]; ok {
+		req.Header.Set("If-None-Match", fmt.Sprintf("%v", v))
+	}
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "directory.domains.list" call.
+// Exactly one of *Domains2 or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Domains2.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 *DomainsListCall) Do() (*Domains2, error) {
+	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 := &Domains2{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists the domains of the customer.",
+	//   "httpMethod": "GET",
+	//   "id": "directory.domains.list",
+	//   "parameterOrder": [
+	//     "customer"
+	//   ],
+	//   "parameters": {
+	//     "customer": {
+	//       "description": "Immutable id of the Google Apps account.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "customer/{customer}/domains",
+	//   "response": {
+	//     "$ref": "Domains2"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.domain",
+	//     "https://www.googleapis.com/auth/admin.directory.domain.readonly"
+	//   ]
+	// }
+
+}
+
 // method id "directory.groups.delete":
 
 type GroupsDeleteCall struct {
@@ -7382,6 +9340,1467 @@
 
 }
 
+// method id "directory.privileges.list":
+
+type PrivilegesListCall struct {
+	s        *Service
+	customer string
+	opt_     map[string]interface{}
+	ctx_     context.Context
+}
+
+// List: Retrieves a paginated list of all privileges for a customer.
+func (r *PrivilegesService) List(customer string) *PrivilegesListCall {
+	c := &PrivilegesListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.customer = customer
+	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 *PrivilegesListCall) Fields(s ...googleapi.Field) *PrivilegesListCall {
+	c.opt_["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 *PrivilegesListCall) IfNoneMatch(entityTag string) *PrivilegesListCall {
+	c.opt_["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 *PrivilegesListCall) Context(ctx context.Context) *PrivilegesListCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *PrivilegesListCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customer}/roles/ALL/privileges")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"customer": c.customer,
+	})
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if v, ok := c.opt_["ifNoneMatch"]; ok {
+		req.Header.Set("If-None-Match", fmt.Sprintf("%v", v))
+	}
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "directory.privileges.list" call.
+// Exactly one of *Privileges or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *Privileges.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 *PrivilegesListCall) Do() (*Privileges, error) {
+	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 := &Privileges{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves a paginated list of all privileges for a customer.",
+	//   "httpMethod": "GET",
+	//   "id": "directory.privileges.list",
+	//   "parameterOrder": [
+	//     "customer"
+	//   ],
+	//   "parameters": {
+	//     "customer": {
+	//       "description": "Immutable ID of the Google Apps account.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "customer/{customer}/roles/ALL/privileges",
+	//   "response": {
+	//     "$ref": "Privileges"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.rolemanagement",
+	//     "https://www.googleapis.com/auth/admin.directory.rolemanagement.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "directory.roleAssignments.delete":
+
+type RoleAssignmentsDeleteCall struct {
+	s                *Service
+	customer         string
+	roleAssignmentId string
+	opt_             map[string]interface{}
+	ctx_             context.Context
+}
+
+// Delete: Deletes a role assignment.
+func (r *RoleAssignmentsService) Delete(customer string, roleAssignmentId string) *RoleAssignmentsDeleteCall {
+	c := &RoleAssignmentsDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.customer = customer
+	c.roleAssignmentId = roleAssignmentId
+	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 *RoleAssignmentsDeleteCall) Fields(s ...googleapi.Field) *RoleAssignmentsDeleteCall {
+	c.opt_["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 *RoleAssignmentsDeleteCall) Context(ctx context.Context) *RoleAssignmentsDeleteCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *RoleAssignmentsDeleteCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customer}/roleassignments/{roleAssignmentId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"customer":         c.customer,
+		"roleAssignmentId": c.roleAssignmentId,
+	})
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "directory.roleAssignments.delete" call.
+func (c *RoleAssignmentsDeleteCall) Do() error {
+	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 a role assignment.",
+	//   "httpMethod": "DELETE",
+	//   "id": "directory.roleAssignments.delete",
+	//   "parameterOrder": [
+	//     "customer",
+	//     "roleAssignmentId"
+	//   ],
+	//   "parameters": {
+	//     "customer": {
+	//       "description": "Immutable ID of the Google Apps account.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "roleAssignmentId": {
+	//       "description": "Immutable ID of the role assignment.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "customer/{customer}/roleassignments/{roleAssignmentId}",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.rolemanagement"
+	//   ]
+	// }
+
+}
+
+// method id "directory.roleAssignments.get":
+
+type RoleAssignmentsGetCall struct {
+	s                *Service
+	customer         string
+	roleAssignmentId string
+	opt_             map[string]interface{}
+	ctx_             context.Context
+}
+
+// Get: Retrieve a role assignment.
+func (r *RoleAssignmentsService) Get(customer string, roleAssignmentId string) *RoleAssignmentsGetCall {
+	c := &RoleAssignmentsGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.customer = customer
+	c.roleAssignmentId = roleAssignmentId
+	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 *RoleAssignmentsGetCall) Fields(s ...googleapi.Field) *RoleAssignmentsGetCall {
+	c.opt_["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 *RoleAssignmentsGetCall) IfNoneMatch(entityTag string) *RoleAssignmentsGetCall {
+	c.opt_["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 *RoleAssignmentsGetCall) Context(ctx context.Context) *RoleAssignmentsGetCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *RoleAssignmentsGetCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customer}/roleassignments/{roleAssignmentId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"customer":         c.customer,
+		"roleAssignmentId": c.roleAssignmentId,
+	})
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if v, ok := c.opt_["ifNoneMatch"]; ok {
+		req.Header.Set("If-None-Match", fmt.Sprintf("%v", v))
+	}
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "directory.roleAssignments.get" call.
+// Exactly one of *RoleAssignment or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *RoleAssignment.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 *RoleAssignmentsGetCall) Do() (*RoleAssignment, error) {
+	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 := &RoleAssignment{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieve a role assignment.",
+	//   "httpMethod": "GET",
+	//   "id": "directory.roleAssignments.get",
+	//   "parameterOrder": [
+	//     "customer",
+	//     "roleAssignmentId"
+	//   ],
+	//   "parameters": {
+	//     "customer": {
+	//       "description": "Immutable ID of the Google Apps account.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "roleAssignmentId": {
+	//       "description": "Immutable ID of the role assignment.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "customer/{customer}/roleassignments/{roleAssignmentId}",
+	//   "response": {
+	//     "$ref": "RoleAssignment"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.rolemanagement",
+	//     "https://www.googleapis.com/auth/admin.directory.rolemanagement.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "directory.roleAssignments.insert":
+
+type RoleAssignmentsInsertCall struct {
+	s              *Service
+	customer       string
+	roleassignment *RoleAssignment
+	opt_           map[string]interface{}
+	ctx_           context.Context
+}
+
+// Insert: Creates a role assignment.
+func (r *RoleAssignmentsService) Insert(customer string, roleassignment *RoleAssignment) *RoleAssignmentsInsertCall {
+	c := &RoleAssignmentsInsertCall{s: r.s, opt_: make(map[string]interface{})}
+	c.customer = customer
+	c.roleassignment = roleassignment
+	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 *RoleAssignmentsInsertCall) Fields(s ...googleapi.Field) *RoleAssignmentsInsertCall {
+	c.opt_["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 *RoleAssignmentsInsertCall) Context(ctx context.Context) *RoleAssignmentsInsertCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *RoleAssignmentsInsertCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.roleassignment)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customer}/roleassignments")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"customer": c.customer,
+	})
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "directory.roleAssignments.insert" call.
+// Exactly one of *RoleAssignment or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *RoleAssignment.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 *RoleAssignmentsInsertCall) Do() (*RoleAssignment, error) {
+	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 := &RoleAssignment{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Creates a role assignment.",
+	//   "httpMethod": "POST",
+	//   "id": "directory.roleAssignments.insert",
+	//   "parameterOrder": [
+	//     "customer"
+	//   ],
+	//   "parameters": {
+	//     "customer": {
+	//       "description": "Immutable ID of the Google Apps account.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "customer/{customer}/roleassignments",
+	//   "request": {
+	//     "$ref": "RoleAssignment"
+	//   },
+	//   "response": {
+	//     "$ref": "RoleAssignment"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.rolemanagement"
+	//   ]
+	// }
+
+}
+
+// method id "directory.roleAssignments.list":
+
+type RoleAssignmentsListCall struct {
+	s        *Service
+	customer string
+	opt_     map[string]interface{}
+	ctx_     context.Context
+}
+
+// List: Retrieves a paginated list of all roleAssignments.
+func (r *RoleAssignmentsService) List(customer string) *RoleAssignmentsListCall {
+	c := &RoleAssignmentsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.customer = customer
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": Maximum number
+// of results to return.
+func (c *RoleAssignmentsListCall) MaxResults(maxResults int64) *RoleAssignmentsListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Token to specify
+// the next page in the list.
+func (c *RoleAssignmentsListCall) PageToken(pageToken string) *RoleAssignmentsListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+// RoleId sets the optional parameter "roleId": Immutable ID of a role.
+// If included in the request, returns only role assignments containing
+// this role ID.
+func (c *RoleAssignmentsListCall) RoleId(roleId string) *RoleAssignmentsListCall {
+	c.opt_["roleId"] = roleId
+	return c
+}
+
+// UserKey sets the optional parameter "userKey": The user's primary
+// email address, alias email address, or unique user ID. If included in
+// the request, returns role assignments only for this user.
+func (c *RoleAssignmentsListCall) UserKey(userKey string) *RoleAssignmentsListCall {
+	c.opt_["userKey"] = userKey
+	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 *RoleAssignmentsListCall) Fields(s ...googleapi.Field) *RoleAssignmentsListCall {
+	c.opt_["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 *RoleAssignmentsListCall) IfNoneMatch(entityTag string) *RoleAssignmentsListCall {
+	c.opt_["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 *RoleAssignmentsListCall) Context(ctx context.Context) *RoleAssignmentsListCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *RoleAssignmentsListCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["maxResults"]; ok {
+		params.Set("maxResults", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["pageToken"]; ok {
+		params.Set("pageToken", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["roleId"]; ok {
+		params.Set("roleId", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["userKey"]; ok {
+		params.Set("userKey", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customer}/roleassignments")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"customer": c.customer,
+	})
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if v, ok := c.opt_["ifNoneMatch"]; ok {
+		req.Header.Set("If-None-Match", fmt.Sprintf("%v", v))
+	}
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "directory.roleAssignments.list" call.
+// Exactly one of *RoleAssignments or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *RoleAssignments.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 *RoleAssignmentsListCall) Do() (*RoleAssignments, error) {
+	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 := &RoleAssignments{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves a paginated list of all roleAssignments.",
+	//   "httpMethod": "GET",
+	//   "id": "directory.roleAssignments.list",
+	//   "parameterOrder": [
+	//     "customer"
+	//   ],
+	//   "parameters": {
+	//     "customer": {
+	//       "description": "Immutable ID of the Google Apps account.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "description": "Maximum number of results to return.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "maximum": "200",
+	//       "minimum": "1",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Token to specify the next page in the list.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "roleId": {
+	//       "description": "Immutable ID of a role. If included in the request, returns only role assignments containing this role ID.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "userKey": {
+	//       "description": "The user's primary email address, alias email address, or unique user ID. If included in the request, returns role assignments only for this user.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "customer/{customer}/roleassignments",
+	//   "response": {
+	//     "$ref": "RoleAssignments"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.rolemanagement",
+	//     "https://www.googleapis.com/auth/admin.directory.rolemanagement.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "directory.roles.delete":
+
+type RolesDeleteCall struct {
+	s        *Service
+	customer string
+	roleId   string
+	opt_     map[string]interface{}
+	ctx_     context.Context
+}
+
+// Delete: Deletes a role.
+func (r *RolesService) Delete(customer string, roleId string) *RolesDeleteCall {
+	c := &RolesDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.customer = customer
+	c.roleId = roleId
+	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 *RolesDeleteCall) Fields(s ...googleapi.Field) *RolesDeleteCall {
+	c.opt_["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 *RolesDeleteCall) Context(ctx context.Context) *RolesDeleteCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *RolesDeleteCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customer}/roles/{roleId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"customer": c.customer,
+		"roleId":   c.roleId,
+	})
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "directory.roles.delete" call.
+func (c *RolesDeleteCall) Do() error {
+	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 a role.",
+	//   "httpMethod": "DELETE",
+	//   "id": "directory.roles.delete",
+	//   "parameterOrder": [
+	//     "customer",
+	//     "roleId"
+	//   ],
+	//   "parameters": {
+	//     "customer": {
+	//       "description": "Immutable ID of the Google Apps account.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "roleId": {
+	//       "description": "Immutable ID of the role.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "customer/{customer}/roles/{roleId}",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.rolemanagement"
+	//   ]
+	// }
+
+}
+
+// method id "directory.roles.get":
+
+type RolesGetCall struct {
+	s        *Service
+	customer string
+	roleId   string
+	opt_     map[string]interface{}
+	ctx_     context.Context
+}
+
+// Get: Retrieves a role.
+func (r *RolesService) Get(customer string, roleId string) *RolesGetCall {
+	c := &RolesGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.customer = customer
+	c.roleId = roleId
+	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 *RolesGetCall) Fields(s ...googleapi.Field) *RolesGetCall {
+	c.opt_["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 *RolesGetCall) IfNoneMatch(entityTag string) *RolesGetCall {
+	c.opt_["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 *RolesGetCall) Context(ctx context.Context) *RolesGetCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *RolesGetCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customer}/roles/{roleId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"customer": c.customer,
+		"roleId":   c.roleId,
+	})
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if v, ok := c.opt_["ifNoneMatch"]; ok {
+		req.Header.Set("If-None-Match", fmt.Sprintf("%v", v))
+	}
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "directory.roles.get" call.
+// Exactly one of *Role or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Role.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 *RolesGetCall) Do() (*Role, error) {
+	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 := &Role{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves a role.",
+	//   "httpMethod": "GET",
+	//   "id": "directory.roles.get",
+	//   "parameterOrder": [
+	//     "customer",
+	//     "roleId"
+	//   ],
+	//   "parameters": {
+	//     "customer": {
+	//       "description": "Immutable ID of the Google Apps account.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "roleId": {
+	//       "description": "Immutable ID of the role.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "customer/{customer}/roles/{roleId}",
+	//   "response": {
+	//     "$ref": "Role"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.rolemanagement",
+	//     "https://www.googleapis.com/auth/admin.directory.rolemanagement.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "directory.roles.insert":
+
+type RolesInsertCall struct {
+	s        *Service
+	customer string
+	role     *Role
+	opt_     map[string]interface{}
+	ctx_     context.Context
+}
+
+// Insert: Creates a role.
+func (r *RolesService) Insert(customer string, role *Role) *RolesInsertCall {
+	c := &RolesInsertCall{s: r.s, opt_: make(map[string]interface{})}
+	c.customer = customer
+	c.role = role
+	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 *RolesInsertCall) Fields(s ...googleapi.Field) *RolesInsertCall {
+	c.opt_["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 *RolesInsertCall) Context(ctx context.Context) *RolesInsertCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *RolesInsertCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.role)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customer}/roles")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"customer": c.customer,
+	})
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "directory.roles.insert" call.
+// Exactly one of *Role or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Role.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 *RolesInsertCall) Do() (*Role, error) {
+	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 := &Role{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Creates a role.",
+	//   "httpMethod": "POST",
+	//   "id": "directory.roles.insert",
+	//   "parameterOrder": [
+	//     "customer"
+	//   ],
+	//   "parameters": {
+	//     "customer": {
+	//       "description": "Immutable ID of the Google Apps account.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "customer/{customer}/roles",
+	//   "request": {
+	//     "$ref": "Role"
+	//   },
+	//   "response": {
+	//     "$ref": "Role"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.rolemanagement"
+	//   ]
+	// }
+
+}
+
+// method id "directory.roles.list":
+
+type RolesListCall struct {
+	s        *Service
+	customer string
+	opt_     map[string]interface{}
+	ctx_     context.Context
+}
+
+// List: Retrieves a paginated list of all the roles in a domain.
+func (r *RolesService) List(customer string) *RolesListCall {
+	c := &RolesListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.customer = customer
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": Maximum number
+// of results to return.
+func (c *RolesListCall) MaxResults(maxResults int64) *RolesListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Token to specify
+// the next page in the list.
+func (c *RolesListCall) PageToken(pageToken string) *RolesListCall {
+	c.opt_["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 *RolesListCall) Fields(s ...googleapi.Field) *RolesListCall {
+	c.opt_["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 *RolesListCall) IfNoneMatch(entityTag string) *RolesListCall {
+	c.opt_["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 *RolesListCall) Context(ctx context.Context) *RolesListCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *RolesListCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["maxResults"]; ok {
+		params.Set("maxResults", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["pageToken"]; ok {
+		params.Set("pageToken", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customer}/roles")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"customer": c.customer,
+	})
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if v, ok := c.opt_["ifNoneMatch"]; ok {
+		req.Header.Set("If-None-Match", fmt.Sprintf("%v", v))
+	}
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "directory.roles.list" call.
+// Exactly one of *Roles or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Roles.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 *RolesListCall) Do() (*Roles, error) {
+	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 := &Roles{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves a paginated list of all the roles in a domain.",
+	//   "httpMethod": "GET",
+	//   "id": "directory.roles.list",
+	//   "parameterOrder": [
+	//     "customer"
+	//   ],
+	//   "parameters": {
+	//     "customer": {
+	//       "description": "Immutable id of the Google Apps account.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "description": "Maximum number of results to return.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "maximum": "100",
+	//       "minimum": "1",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Token to specify the next page in the list.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "customer/{customer}/roles",
+	//   "response": {
+	//     "$ref": "Roles"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.rolemanagement",
+	//     "https://www.googleapis.com/auth/admin.directory.rolemanagement.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "directory.roles.patch":
+
+type RolesPatchCall struct {
+	s        *Service
+	customer string
+	roleId   string
+	role     *Role
+	opt_     map[string]interface{}
+	ctx_     context.Context
+}
+
+// Patch: Updates a role. This method supports patch semantics.
+func (r *RolesService) Patch(customer string, roleId string, role *Role) *RolesPatchCall {
+	c := &RolesPatchCall{s: r.s, opt_: make(map[string]interface{})}
+	c.customer = customer
+	c.roleId = roleId
+	c.role = role
+	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 *RolesPatchCall) Fields(s ...googleapi.Field) *RolesPatchCall {
+	c.opt_["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 *RolesPatchCall) Context(ctx context.Context) *RolesPatchCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *RolesPatchCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.role)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customer}/roles/{roleId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("PATCH", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"customer": c.customer,
+		"roleId":   c.roleId,
+	})
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "directory.roles.patch" call.
+// Exactly one of *Role or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Role.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 *RolesPatchCall) Do() (*Role, error) {
+	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 := &Role{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates a role. This method supports patch semantics.",
+	//   "httpMethod": "PATCH",
+	//   "id": "directory.roles.patch",
+	//   "parameterOrder": [
+	//     "customer",
+	//     "roleId"
+	//   ],
+	//   "parameters": {
+	//     "customer": {
+	//       "description": "Immutable ID of the Google Apps account.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "roleId": {
+	//       "description": "Immutable ID of the role.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "customer/{customer}/roles/{roleId}",
+	//   "request": {
+	//     "$ref": "Role"
+	//   },
+	//   "response": {
+	//     "$ref": "Role"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.rolemanagement"
+	//   ]
+	// }
+
+}
+
+// method id "directory.roles.update":
+
+type RolesUpdateCall struct {
+	s        *Service
+	customer string
+	roleId   string
+	role     *Role
+	opt_     map[string]interface{}
+	ctx_     context.Context
+}
+
+// Update: Updates a role.
+func (r *RolesService) Update(customer string, roleId string, role *Role) *RolesUpdateCall {
+	c := &RolesUpdateCall{s: r.s, opt_: make(map[string]interface{})}
+	c.customer = customer
+	c.roleId = roleId
+	c.role = role
+	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 *RolesUpdateCall) Fields(s ...googleapi.Field) *RolesUpdateCall {
+	c.opt_["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 *RolesUpdateCall) Context(ctx context.Context) *RolesUpdateCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *RolesUpdateCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.role)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customer}/roles/{roleId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("PUT", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"customer": c.customer,
+		"roleId":   c.roleId,
+	})
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "directory.roles.update" call.
+// Exactly one of *Role or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Role.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 *RolesUpdateCall) Do() (*Role, error) {
+	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 := &Role{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates a role.",
+	//   "httpMethod": "PUT",
+	//   "id": "directory.roles.update",
+	//   "parameterOrder": [
+	//     "customer",
+	//     "roleId"
+	//   ],
+	//   "parameters": {
+	//     "customer": {
+	//       "description": "Immutable ID of the Google Apps account.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "roleId": {
+	//       "description": "Immutable ID of the role.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "customer/{customer}/roles/{roleId}",
+	//   "request": {
+	//     "$ref": "Role"
+	//   },
+	//   "response": {
+	//     "$ref": "Role"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.rolemanagement"
+	//   ]
+	// }
+
+}
+
 // method id "directory.schemas.delete":
 
 type SchemasDeleteCall struct {
diff --git a/admin/email_migration/v2/admin-gen.go b/admin/email_migration/v2/admin-gen.go
index 22c577d..00df426 100644
--- a/admin/email_migration/v2/admin-gen.go
+++ b/admin/email_migration/v2/admin-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "admin:email_migration_v2"
 const apiName = "admin"
diff --git a/admin/reports/v1/admin-gen.go b/admin/reports/v1/admin-gen.go
index a90669b..3ed847b 100644
--- a/admin/reports/v1/admin-gen.go
+++ b/admin/reports/v1/admin-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "admin:reports_v1"
 const apiName = "admin"
diff --git a/adsense/v1.2/adsense-gen.go b/adsense/v1.2/adsense-gen.go
index 069c4e9..7fe175b 100644
--- a/adsense/v1.2/adsense-gen.go
+++ b/adsense/v1.2/adsense-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "adsense:v1.2"
 const apiName = "adsense"
diff --git a/adsense/v1.3/adsense-gen.go b/adsense/v1.3/adsense-gen.go
index d0df3bc..a6c05b9 100644
--- a/adsense/v1.3/adsense-gen.go
+++ b/adsense/v1.3/adsense-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "adsense:v1.3"
 const apiName = "adsense"
diff --git a/adsense/v1.4/adsense-api.json b/adsense/v1.4/adsense-api.json
index f7d6f49..f67a90c 100644
--- a/adsense/v1.4/adsense-api.json
+++ b/adsense/v1.4/adsense-api.json
@@ -1,12 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/wiZb5dkU0x3zrMckXzFKcTNAp8w\"",
+ "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/0LJdy3bhVfuPDmaGtJK4_nceDoU\"",
  "discoveryVersion": "v1",
  "id": "adsense:v1.4",
  "name": "adsense",
  "canonicalName": "AdSense",
  "version": "v1.4",
- "revision": "20141218",
+ "revision": "20151013",
  "title": "AdSense Management API",
  "description": "Gives AdSense publishers access to their inventory and the ability to generate reports",
  "ownerDomain": "google.com",
@@ -86,6 +86,10 @@
    "id": "Account",
    "type": "object",
    "properties": {
+    "creation_time": {
+     "type": "string",
+     "format": "int64"
+    },
     "id": {
      "type": "string",
      "description": "Unique identifier of this account."
diff --git a/adsense/v1.4/adsense-gen.go b/adsense/v1.4/adsense-gen.go
index 89288fd..638c8f9 100644
--- a/adsense/v1.4/adsense-gen.go
+++ b/adsense/v1.4/adsense-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "adsense:v1.4"
 const apiName = "adsense"
@@ -386,6 +388,8 @@
 }
 
 type Account struct {
+	CreationTime int64 `json:"creation_time,omitempty,string"`
+
 	// Id: Unique identifier of this account.
 	Id string `json:"id,omitempty"`
 
@@ -408,7 +412,7 @@
 	// server.
 	googleapi.ServerResponse `json:"-"`
 
-	// ForceSendFields is a list of field names (e.g. "Id") to
+	// 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
diff --git a/adsensehost/v4.1/adsensehost-gen.go b/adsensehost/v4.1/adsensehost-gen.go
index 58ccb65..3b8d030 100644
--- a/adsensehost/v4.1/adsensehost-gen.go
+++ b/adsensehost/v4.1/adsensehost-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "adsensehost:v4.1"
 const apiName = "adsensehost"
diff --git a/analytics/v2.4/analytics-gen.go b/analytics/v2.4/analytics-gen.go
index ef78a4a..b0bdf2a 100644
--- a/analytics/v2.4/analytics-gen.go
+++ b/analytics/v2.4/analytics-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "analytics:v2.4"
 const apiName = "analytics"
diff --git a/analytics/v3/analytics-gen.go b/analytics/v3/analytics-gen.go
index d46dfb9..634d8ba 100644
--- a/analytics/v3/analytics-gen.go
+++ b/analytics/v3/analytics-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "analytics:v3"
 const apiName = "analytics"
diff --git a/androidenterprise/v1/androidenterprise-gen.go b/androidenterprise/v1/androidenterprise-gen.go
index 78cea11..e2d8664 100644
--- a/androidenterprise/v1/androidenterprise-gen.go
+++ b/androidenterprise/v1/androidenterprise-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "androidenterprise:v1"
 const apiName = "androidenterprise"
diff --git a/androidpublisher/v1.1/androidpublisher-gen.go b/androidpublisher/v1.1/androidpublisher-gen.go
index 969bb82..ca55607 100644
--- a/androidpublisher/v1.1/androidpublisher-gen.go
+++ b/androidpublisher/v1.1/androidpublisher-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "androidpublisher:v1.1"
 const apiName = "androidpublisher"
diff --git a/androidpublisher/v1/androidpublisher-gen.go b/androidpublisher/v1/androidpublisher-gen.go
index fb80f37..f2f5321 100644
--- a/androidpublisher/v1/androidpublisher-gen.go
+++ b/androidpublisher/v1/androidpublisher-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "androidpublisher:v1"
 const apiName = "androidpublisher"
diff --git a/androidpublisher/v2/androidpublisher-gen.go b/androidpublisher/v2/androidpublisher-gen.go
index dc9ac82..e88b027 100644
--- a/androidpublisher/v2/androidpublisher-gen.go
+++ b/androidpublisher/v2/androidpublisher-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "androidpublisher:v2"
 const apiName = "androidpublisher"
diff --git a/api-list.json b/api-list.json
index 97eb976..41f792a 100644
--- a/api-list.json
+++ b/api-list.json
@@ -1238,6 +1238,22 @@
   },
   {
    "kind": "discovery#directoryItem",
+   "id": "cloudtrace:v1",
+   "name": "cloudtrace",
+   "version": "v1",
+   "title": "Google Cloud Trace API",
+   "description": "The Google Cloud Trace API provides services for reading and writing runtime trace data for Cloud applications.",
+   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/cloudtrace/v1/rest",
+   "discoveryLink": "./apis/cloudtrace/v1/rest",
+   "icons": {
+    "x16": "http://www.google.com/images/icons/product/search-16.gif",
+    "x32": "http://www.google.com/images/icons/product/search-32.gif"
+   },
+   "documentationLink": "https://cloud.google.com/tools/cloud-trace",
+   "preferred": true
+  },
+  {
+   "kind": "discovery#directoryItem",
    "id": "container:v1",
    "name": "container",
    "version": "v1",
@@ -1298,6 +1314,22 @@
     "x32": "http://www.google.com/images/icons/product/search-32.gif"
    },
    "documentationLink": "https://cloud.google.com/logging/docs/",
+   "preferred": false
+  },
+  {
+   "kind": "discovery#directoryItem",
+   "id": "logging:v2beta1",
+   "name": "logging",
+   "version": "v2beta1",
+   "title": "Google Cloud Logging API",
+   "description": "Google Cloud Logging API lets you create logs, ingest log entries, and manage log sinks.",
+   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/logging/v2beta1/rest",
+   "discoveryLink": "./apis/logging/v2beta1/rest",
+   "icons": {
+    "x16": "http://www.google.com/images/icons/product/search-16.gif",
+    "x32": "http://www.google.com/images/icons/product/search-32.gif"
+   },
+   "documentationLink": "https://cloud.google.com/logging/docs/",
    "preferred": true
   },
   {
@@ -1430,6 +1462,22 @@
   },
   {
    "kind": "discovery#directoryItem",
+   "id": "youtubereporting:v1",
+   "name": "youtubereporting",
+   "version": "v1",
+   "title": "YouTube Reporting API",
+   "description": "An API to schedule reporting jobs and download the resulting bulk data reports about YouTube channels, videos etc. in the form of CSV files.",
+   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/youtubereporting/v1/rest",
+   "discoveryLink": "./apis/youtubereporting/v1/rest",
+   "icons": {
+    "x16": "http://www.google.com/images/icons/product/search-16.gif",
+    "x32": "http://www.google.com/images/icons/product/search-32.gif"
+   },
+   "documentationLink": "https://developers.google.com/youtube/reporting/v1/reports/",
+   "preferred": true
+  },
+  {
+   "kind": "discovery#directoryItem",
    "id": "identitytoolkit:v3",
    "name": "identitytoolkit",
    "version": "v3",
@@ -1962,7 +2010,7 @@
    "id": "storage:v1beta1",
    "name": "storage",
    "version": "v1beta1",
-   "title": "Cloud Storage API",
+   "title": "Cloud Storage JSON API",
    "description": "Lets you store and retrieve potentially-large, immutable data objects.",
    "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/storage/v1beta1/rest",
    "discoveryLink": "./apis/storage/v1beta1/rest",
@@ -1981,7 +2029,7 @@
    "id": "storage:v1beta2",
    "name": "storage",
    "version": "v1beta2",
-   "title": "Cloud Storage API",
+   "title": "Cloud Storage JSON API",
    "description": "Lets you store and retrieve potentially-large, immutable data objects.",
    "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/storage/v1beta2/rest",
    "discoveryLink": "./apis/storage/v1beta2/rest",
diff --git a/appengine/v1beta4/appengine-gen.go b/appengine/v1beta4/appengine-gen.go
index dbc54ef..7c4ca94 100644
--- a/appengine/v1beta4/appengine-gen.go
+++ b/appengine/v1beta4/appengine-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "appengine:v1beta4"
 const apiName = "appengine"
diff --git a/appsactivity/v1/appsactivity-gen.go b/appsactivity/v1/appsactivity-gen.go
index 1158ca9..6522074 100644
--- a/appsactivity/v1/appsactivity-gen.go
+++ b/appsactivity/v1/appsactivity-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "appsactivity:v1"
 const apiName = "appsactivity"
diff --git a/appstate/v1/appstate-gen.go b/appstate/v1/appstate-gen.go
index 41d05e4..d65077a 100644
--- a/appstate/v1/appstate-gen.go
+++ b/appstate/v1/appstate-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "appstate:v1"
 const apiName = "appstate"
diff --git a/autoscaler/v1beta2/autoscaler-gen.go b/autoscaler/v1beta2/autoscaler-gen.go
index f9373b6..71439ab 100644
--- a/autoscaler/v1beta2/autoscaler-gen.go
+++ b/autoscaler/v1beta2/autoscaler-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "autoscaler:v1beta2"
 const apiName = "autoscaler"
diff --git a/bigquery/v2/bigquery-gen.go b/bigquery/v2/bigquery-gen.go
index a1adbec..279f8ae 100644
--- a/bigquery/v2/bigquery-gen.go
+++ b/bigquery/v2/bigquery-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "bigquery:v2"
 const apiName = "bigquery"
diff --git a/blogger/v2/blogger-gen.go b/blogger/v2/blogger-gen.go
index 615bab9..05b8f64 100644
--- a/blogger/v2/blogger-gen.go
+++ b/blogger/v2/blogger-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "blogger:v2"
 const apiName = "blogger"
diff --git a/blogger/v3/blogger-gen.go b/blogger/v3/blogger-gen.go
index d1fc80e..d66ef09 100644
--- a/blogger/v3/blogger-gen.go
+++ b/blogger/v3/blogger-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "blogger:v3"
 const apiName = "blogger"
diff --git a/books/v1/books-api.json b/books/v1/books-api.json
index 00eb463..ca35431 100644
--- a/books/v1/books-api.json
+++ b/books/v1/books-api.json
@@ -1,11 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/5UMRPQM2lE_tfb1BMv9TTmTYYF8\"",
+ "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/NfC6HUSyutjMUJzqUOocETnJU2I\"",
  "discoveryVersion": "v1",
  "id": "books:v1",
  "name": "books",
  "version": "v1",
- "revision": "20150318",
+ "revision": "20150921",
  "title": "Books API",
  "description": "Lets you search for books and manage your Google Books library.",
  "ownerDomain": "google.com",
@@ -750,6 +750,71 @@
     }
    }
   },
+  "Discoveryclusters": {
+   "id": "Discoveryclusters",
+   "type": "object",
+   "properties": {
+    "clusters": {
+     "type": "array",
+     "items": {
+      "type": "object",
+      "properties": {
+       "banner_with_content_container": {
+        "type": "object",
+        "properties": {
+         "fillColorArgb": {
+          "type": "string"
+         },
+         "imageUrl": {
+          "type": "string"
+         },
+         "maskColorArgb": {
+          "type": "string"
+         },
+         "moreButtonText": {
+          "type": "string"
+         },
+         "moreButtonUrl": {
+          "type": "string"
+         },
+         "textColorArgb": {
+          "type": "string"
+         }
+        }
+       },
+       "subTitle": {
+        "type": "string"
+       },
+       "title": {
+        "type": "string"
+       },
+       "totalVolumes": {
+        "type": "integer",
+        "format": "int32"
+       },
+       "uid": {
+        "type": "string"
+       },
+       "volumes": {
+        "type": "array",
+        "items": {
+         "$ref": "Volume"
+        }
+       }
+      }
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Resorce type.",
+     "default": "books#discovery#clusters"
+    },
+    "totalClusters": {
+     "type": "integer",
+     "format": "int32"
+    }
+   }
+  },
   "DownloadAccessRestriction": {
    "id": "DownloadAccessRestriction",
    "type": "object",
@@ -1069,6 +1134,29 @@
     }
    }
   },
+  "Notification": {
+   "id": "Notification",
+   "type": "object",
+   "properties": {
+    "body": {
+     "type": "string"
+    },
+    "iconUrl": {
+     "type": "string"
+    },
+    "kind": {
+     "type": "string",
+     "description": "Resource type.",
+     "default": "books#notification"
+    },
+    "linkUrl": {
+     "type": "string"
+    },
+    "title": {
+     "type": "string"
+    }
+   }
+  },
   "Offers": {
    "id": "Offers",
    "type": "object",
@@ -1266,6 +1354,19 @@
        "type": "boolean"
       }
      }
+    },
+    "notification": {
+     "type": "object",
+     "properties": {
+      "moreFromAuthors": {
+       "type": "object",
+       "properties": {
+        "opted_state": {
+         "type": "string"
+        }
+       }
+      }
+     }
     }
    }
   },
@@ -1537,6 +1638,11 @@
      "type": "object",
      "description": "User specific information related to this volume. (e.g. page this user last read or whether they purchased this book)",
      "properties": {
+      "acquisitionType": {
+       "type": "integer",
+       "description": "How this volume was acquired.",
+       "format": "int32"
+      },
       "copy": {
        "type": "object",
        "description": "Copy/Paste accounting information.",
@@ -1558,6 +1664,11 @@
         }
        }
       },
+      "entitlementType": {
+       "type": "integer",
+       "description": "Whether this volume is purchased, sample, pd download etc.",
+       "format": "int32"
+      },
       "isInMyBooks": {
        "type": "boolean",
        "description": "Whether or not this volume is currently in \"my books.\""
@@ -2153,7 +2264,7 @@
      "id": "books.dictionary.listOfflineMetadata",
      "path": "dictionary/listOfflineMetadata",
      "httpMethod": "GET",
-     "description": "Returns a list of offline dictionary meatadata available",
+     "description": "Returns a list of offline dictionary metadata available",
      "parameters": {
       "cpksver": {
        "type": "string",
@@ -3379,6 +3490,43 @@
     }
    }
   },
+  "notification": {
+   "methods": {
+    "get": {
+     "id": "books.notification.get",
+     "path": "notification/get",
+     "httpMethod": "GET",
+     "description": "Returns notification details for a given notification id.",
+     "parameters": {
+      "locale": {
+       "type": "string",
+       "description": "ISO-639-1 language and ISO-3166-1 country code. Ex: 'en_US'. Used for generating notification title and body.",
+       "location": "query"
+      },
+      "notification_id": {
+       "type": "string",
+       "description": "String to identify the notification.",
+       "required": true,
+       "location": "query"
+      },
+      "source": {
+       "type": "string",
+       "description": "String to identify the originator of this request.",
+       "location": "query"
+      }
+     },
+     "parameterOrder": [
+      "notification_id"
+     ],
+     "response": {
+      "$ref": "Notification"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/books"
+     ]
+    }
+   }
+  },
   "onboarding": {
    "methods": {
     "listCategories": {
@@ -3451,6 +3599,47 @@
     }
    }
   },
+  "personalizedstream": {
+   "methods": {
+    "get": {
+     "id": "books.personalizedstream.get",
+     "path": "personalizedstream/get",
+     "httpMethod": "GET",
+     "description": "Returns a stream of personalized book clusters",
+     "parameters": {
+      "locale": {
+       "type": "string",
+       "description": "ISO-639-1 language and ISO-3166-1 country code. Ex: 'en_US'. Used for generating recommendations.",
+       "location": "query"
+      },
+      "maxAllowedMaturityRating": {
+       "type": "string",
+       "description": "The maximum allowed maturity rating of returned recommendations. Books with a higher maturity rating are filtered out.",
+       "enum": [
+        "mature",
+        "not-mature"
+       ],
+       "enumDescriptions": [
+        "Show books which are rated mature or lower.",
+        "Show books which are rated not mature."
+       ],
+       "location": "query"
+      },
+      "source": {
+       "type": "string",
+       "description": "String to identify the originator of this request.",
+       "location": "query"
+      }
+     },
+     "response": {
+      "$ref": "Discoveryclusters"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/books"
+     ]
+    }
+   }
+  },
   "promooffer": {
    "methods": {
     "accept": {
diff --git a/books/v1/books-gen.go b/books/v1/books-gen.go
index 1d125b2..09c47f7 100644
--- a/books/v1/books-gen.go
+++ b/books/v1/books-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "books:v1"
 const apiName = "books"
@@ -60,7 +62,9 @@
 	s.Layers = NewLayersService(s)
 	s.Myconfig = NewMyconfigService(s)
 	s.Mylibrary = NewMylibraryService(s)
+	s.Notification = NewNotificationService(s)
 	s.Onboarding = NewOnboardingService(s)
+	s.Personalizedstream = NewPersonalizedstreamService(s)
 	s.Promooffer = NewPromoofferService(s)
 	s.Volumes = NewVolumesService(s)
 	return s, nil
@@ -83,8 +87,12 @@
 
 	Mylibrary *MylibraryService
 
+	Notification *NotificationService
+
 	Onboarding *OnboardingService
 
+	Personalizedstream *PersonalizedstreamService
+
 	Promooffer *PromoofferService
 
 	Volumes *VolumesService
@@ -235,6 +243,15 @@
 	s *Service
 }
 
+func NewNotificationService(s *Service) *NotificationService {
+	rs := &NotificationService{s: s}
+	return rs
+}
+
+type NotificationService struct {
+	s *Service
+}
+
 func NewOnboardingService(s *Service) *OnboardingService {
 	rs := &OnboardingService{s: s}
 	return rs
@@ -244,6 +261,15 @@
 	s *Service
 }
 
+func NewPersonalizedstreamService(s *Service) *PersonalizedstreamService {
+	rs := &PersonalizedstreamService{s: s}
+	return rs
+}
+
+type PersonalizedstreamService struct {
+	s *Service
+}
+
 func NewPromoofferService(s *Service) *PromoofferService {
 	rs := &PromoofferService{s: s}
 	return rs
@@ -1295,6 +1321,90 @@
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
 
+type Discoveryclusters struct {
+	Clusters []*DiscoveryclustersClusters `json:"clusters,omitempty"`
+
+	// Kind: Resorce type.
+	Kind string `json:"kind,omitempty"`
+
+	TotalClusters int64 `json:"totalClusters,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Clusters") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *Discoveryclusters) MarshalJSON() ([]byte, error) {
+	type noMethod Discoveryclusters
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+type DiscoveryclustersClusters struct {
+	BannerWithContentContainer *DiscoveryclustersClustersBannerWithContentContainer `json:"banner_with_content_container,omitempty"`
+
+	SubTitle string `json:"subTitle,omitempty"`
+
+	Title string `json:"title,omitempty"`
+
+	TotalVolumes int64 `json:"totalVolumes,omitempty"`
+
+	Uid string `json:"uid,omitempty"`
+
+	Volumes []*Volume `json:"volumes,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g.
+	// "BannerWithContentContainer") to unconditionally include in API
+	// requests. By default, fields with empty values are omitted from API
+	// requests. However, any non-pointer, non-interface field appearing in
+	// ForceSendFields will be sent to the server regardless of whether the
+	// field is empty or not. This may be used to include empty fields in
+	// Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *DiscoveryclustersClusters) MarshalJSON() ([]byte, error) {
+	type noMethod DiscoveryclustersClusters
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+type DiscoveryclustersClustersBannerWithContentContainer struct {
+	FillColorArgb string `json:"fillColorArgb,omitempty"`
+
+	ImageUrl string `json:"imageUrl,omitempty"`
+
+	MaskColorArgb string `json:"maskColorArgb,omitempty"`
+
+	MoreButtonText string `json:"moreButtonText,omitempty"`
+
+	MoreButtonUrl string `json:"moreButtonUrl,omitempty"`
+
+	TextColorArgb string `json:"textColorArgb,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "FillColorArgb") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *DiscoveryclustersClustersBannerWithContentContainer) MarshalJSON() ([]byte, error) {
+	type noMethod DiscoveryclustersClustersBannerWithContentContainer
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
 type DownloadAccessRestriction struct {
 	// DeviceAllowed: If restricted, whether access is granted for this
 	// (user, device, volume).
@@ -1711,6 +1821,37 @@
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
 
+type Notification struct {
+	Body string `json:"body,omitempty"`
+
+	IconUrl string `json:"iconUrl,omitempty"`
+
+	// Kind: Resource type.
+	Kind string `json:"kind,omitempty"`
+
+	LinkUrl string `json:"linkUrl,omitempty"`
+
+	Title string `json:"title,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// 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:"-"`
+}
+
+func (s *Notification) MarshalJSON() ([]byte, error) {
+	type noMethod Notification
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
 type Offers struct {
 	// Items: A list of offers.
 	Items []*OffersItems `json:"items,omitempty"`
@@ -1965,6 +2106,8 @@
 	// purposes.
 	NotesExport *UsersettingsNotesExport `json:"notesExport,omitempty"`
 
+	Notification *UsersettingsNotification `json:"notification,omitempty"`
+
 	// ServerResponse contains the HTTP response code and headers from the
 	// server.
 	googleapi.ServerResponse `json:"-"`
@@ -2006,6 +2149,42 @@
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
 
+type UsersettingsNotification struct {
+	MoreFromAuthors *UsersettingsNotificationMoreFromAuthors `json:"moreFromAuthors,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "MoreFromAuthors") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *UsersettingsNotification) MarshalJSON() ([]byte, error) {
+	type noMethod UsersettingsNotification
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+type UsersettingsNotificationMoreFromAuthors struct {
+	OptedState string `json:"opted_state,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "OptedState") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *UsersettingsNotificationMoreFromAuthors) MarshalJSON() ([]byte, error) {
+	type noMethod UsersettingsNotificationMoreFromAuthors
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
 type Volume struct {
 	// AccessInfo: Any information about a volume related to reading or
 	// obtaining that volume text. This information can depend on country
@@ -2496,9 +2675,16 @@
 // VolumeUserInfo: User specific information related to this volume.
 // (e.g. page this user last read or whether they purchased this book)
 type VolumeUserInfo struct {
+	// AcquisitionType: How this volume was acquired.
+	AcquisitionType int64 `json:"acquisitionType,omitempty"`
+
 	// Copy: Copy/Paste accounting information.
 	Copy *VolumeUserInfoCopy `json:"copy,omitempty"`
 
+	// EntitlementType: Whether this volume is purchased, sample, pd
+	// download etc.
+	EntitlementType int64 `json:"entitlementType,omitempty"`
+
 	// IsInMyBooks: Whether or not this volume is currently in "my books."
 	IsInMyBooks bool `json:"isInMyBooks,omitempty"`
 
@@ -2533,7 +2719,7 @@
 
 	UserUploadedVolumeInfo *VolumeUserInfoUserUploadedVolumeInfo `json:"userUploadedVolumeInfo,omitempty"`
 
-	// ForceSendFields is a list of field names (e.g. "Copy") to
+	// ForceSendFields is a list of field names (e.g. "AcquisitionType") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
 	// non-interface field appearing in ForceSendFields will be sent to the
@@ -3859,7 +4045,7 @@
 	ctx_    context.Context
 }
 
-// ListOfflineMetadata: Returns a list of offline dictionary meatadata
+// ListOfflineMetadata: Returns a list of offline dictionary metadata
 // available
 func (r *DictionaryService) ListOfflineMetadata(cpksver string) *DictionaryListOfflineMetadataCall {
 	c := &DictionaryListOfflineMetadataCall{s: r.s, opt_: make(map[string]interface{})}
@@ -3951,7 +4137,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Returns a list of offline dictionary meatadata available",
+	//   "description": "Returns a list of offline dictionary metadata available",
 	//   "httpMethod": "GET",
 	//   "id": "books.dictionary.listOfflineMetadata",
 	//   "parameterOrder": [
@@ -8325,6 +8511,162 @@
 
 }
 
+// method id "books.notification.get":
+
+type NotificationGetCall struct {
+	s              *Service
+	notificationId string
+	opt_           map[string]interface{}
+	ctx_           context.Context
+}
+
+// Get: Returns notification details for a given notification id.
+func (r *NotificationService) Get(notificationId string) *NotificationGetCall {
+	c := &NotificationGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.notificationId = notificationId
+	return c
+}
+
+// Locale sets the optional parameter "locale": ISO-639-1 language and
+// ISO-3166-1 country code. Ex: 'en_US'. Used for generating
+// notification title and body.
+func (c *NotificationGetCall) Locale(locale string) *NotificationGetCall {
+	c.opt_["locale"] = locale
+	return c
+}
+
+// Source sets the optional parameter "source": String to identify the
+// originator of this request.
+func (c *NotificationGetCall) Source(source string) *NotificationGetCall {
+	c.opt_["source"] = source
+	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 *NotificationGetCall) Fields(s ...googleapi.Field) *NotificationGetCall {
+	c.opt_["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 *NotificationGetCall) IfNoneMatch(entityTag string) *NotificationGetCall {
+	c.opt_["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 *NotificationGetCall) Context(ctx context.Context) *NotificationGetCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *NotificationGetCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	params.Set("notification_id", fmt.Sprintf("%v", c.notificationId))
+	if v, ok := c.opt_["locale"]; ok {
+		params.Set("locale", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["source"]; ok {
+		params.Set("source", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "notification/get")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if v, ok := c.opt_["ifNoneMatch"]; ok {
+		req.Header.Set("If-None-Match", fmt.Sprintf("%v", v))
+	}
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "books.notification.get" call.
+// Exactly one of *Notification or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *Notification.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 *NotificationGetCall) Do() (*Notification, error) {
+	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 := &Notification{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Returns notification details for a given notification id.",
+	//   "httpMethod": "GET",
+	//   "id": "books.notification.get",
+	//   "parameterOrder": [
+	//     "notification_id"
+	//   ],
+	//   "parameters": {
+	//     "locale": {
+	//       "description": "ISO-639-1 language and ISO-3166-1 country code. Ex: 'en_US'. Used for generating notification title and body.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "notification_id": {
+	//       "description": "String to identify the notification.",
+	//       "location": "query",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "source": {
+	//       "description": "String to identify the originator of this request.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "notification/get",
+	//   "response": {
+	//     "$ref": "Notification"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/books"
+	//   ]
+	// }
+
+}
+
 // method id "books.onboarding.listCategories":
 
 type OnboardingListCategoriesCall struct {
@@ -8658,6 +9000,179 @@
 
 }
 
+// method id "books.personalizedstream.get":
+
+type PersonalizedstreamGetCall struct {
+	s    *Service
+	opt_ map[string]interface{}
+	ctx_ context.Context
+}
+
+// Get: Returns a stream of personalized book clusters
+func (r *PersonalizedstreamService) Get() *PersonalizedstreamGetCall {
+	c := &PersonalizedstreamGetCall{s: r.s, opt_: make(map[string]interface{})}
+	return c
+}
+
+// Locale sets the optional parameter "locale": ISO-639-1 language and
+// ISO-3166-1 country code. Ex: 'en_US'. Used for generating
+// recommendations.
+func (c *PersonalizedstreamGetCall) Locale(locale string) *PersonalizedstreamGetCall {
+	c.opt_["locale"] = locale
+	return c
+}
+
+// MaxAllowedMaturityRating sets the optional parameter
+// "maxAllowedMaturityRating": The maximum allowed maturity rating of
+// returned recommendations. Books with a higher maturity rating are
+// filtered out.
+//
+// Possible values:
+//   "mature" - Show books which are rated mature or lower.
+//   "not-mature" - Show books which are rated not mature.
+func (c *PersonalizedstreamGetCall) MaxAllowedMaturityRating(maxAllowedMaturityRating string) *PersonalizedstreamGetCall {
+	c.opt_["maxAllowedMaturityRating"] = maxAllowedMaturityRating
+	return c
+}
+
+// Source sets the optional parameter "source": String to identify the
+// originator of this request.
+func (c *PersonalizedstreamGetCall) Source(source string) *PersonalizedstreamGetCall {
+	c.opt_["source"] = source
+	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 *PersonalizedstreamGetCall) Fields(s ...googleapi.Field) *PersonalizedstreamGetCall {
+	c.opt_["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 *PersonalizedstreamGetCall) IfNoneMatch(entityTag string) *PersonalizedstreamGetCall {
+	c.opt_["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 *PersonalizedstreamGetCall) Context(ctx context.Context) *PersonalizedstreamGetCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *PersonalizedstreamGetCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["locale"]; ok {
+		params.Set("locale", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["maxAllowedMaturityRating"]; ok {
+		params.Set("maxAllowedMaturityRating", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["source"]; ok {
+		params.Set("source", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "personalizedstream/get")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if v, ok := c.opt_["ifNoneMatch"]; ok {
+		req.Header.Set("If-None-Match", fmt.Sprintf("%v", v))
+	}
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "books.personalizedstream.get" call.
+// Exactly one of *Discoveryclusters or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *Discoveryclusters.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 *PersonalizedstreamGetCall) Do() (*Discoveryclusters, error) {
+	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 := &Discoveryclusters{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Returns a stream of personalized book clusters",
+	//   "httpMethod": "GET",
+	//   "id": "books.personalizedstream.get",
+	//   "parameters": {
+	//     "locale": {
+	//       "description": "ISO-639-1 language and ISO-3166-1 country code. Ex: 'en_US'. Used for generating recommendations.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxAllowedMaturityRating": {
+	//       "description": "The maximum allowed maturity rating of returned recommendations. Books with a higher maturity rating are filtered out.",
+	//       "enum": [
+	//         "mature",
+	//         "not-mature"
+	//       ],
+	//       "enumDescriptions": [
+	//         "Show books which are rated mature or lower.",
+	//         "Show books which are rated not mature."
+	//       ],
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "source": {
+	//       "description": "String to identify the originator of this request.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "personalizedstream/get",
+	//   "response": {
+	//     "$ref": "Discoveryclusters"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/books"
+	//   ]
+	// }
+
+}
+
 // method id "books.promooffer.accept":
 
 type PromoofferAcceptCall struct {
diff --git a/calendar/v3/calendar-gen.go b/calendar/v3/calendar-gen.go
index a5dde55..17b3628 100644
--- a/calendar/v3/calendar-gen.go
+++ b/calendar/v3/calendar-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "calendar:v3"
 const apiName = "calendar"
diff --git a/civicinfo/v2/civicinfo-gen.go b/civicinfo/v2/civicinfo-gen.go
index 4af66bd..a05ee35 100644
--- a/civicinfo/v2/civicinfo-gen.go
+++ b/civicinfo/v2/civicinfo-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "civicinfo:v2"
 const apiName = "civicinfo"
diff --git a/classroom/v1/classroom-api.json b/classroom/v1/classroom-api.json
index 635fc17..58c117f 100644
--- a/classroom/v1/classroom-api.json
+++ b/classroom/v1/classroom-api.json
@@ -1,11 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/a7glJKXV_1EpKBuLLJ6YFVdOXN0\"",
+ "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/VbFh0P5gIX42P6rhPLVK-GI_3-Y\"",
  "discoveryVersion": "v1",
  "id": "classroom:v1",
  "name": "classroom",
  "version": "v1",
- "revision": "20150913",
+ "revision": "20151013",
  "title": "Google Classroom API",
  "description": "Google Classroom API",
  "ownerDomain": "google.com",
@@ -132,7 +132,7 @@
    "properties": {
     "id": {
      "type": "string",
-     "description": "Identifier for this course assigned by Classroom. When [creating a course][google.classroom.v1.Courses.CreateCourse], you may optionally set this identifier to an [alias string][google.classroom.v1.CourseAlias] in the request to create a corresponding alias. The `id` is still assigned by Classroom and cannot be updated after the course is created. Specifying this field in a course update mask will result in an error."
+     "description": "Identifier for this course assigned by Classroom. When creating a course, you may optionally set this identifier to an alias string in the request to create a corresponding alias. The `id` is still assigned by Classroom and cannot be updated after the course is created. Specifying this field in a course update mask will result in an error."
     },
     "name": {
      "type": "string",
@@ -156,7 +156,7 @@
     },
     "ownerId": {
      "type": "string",
-     "description": "The identifier of the owner of a course. When specified as a parameter of a [create course request][google.classroom.v1.Courses.CreateCourse], this field is required. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user This must be set in a create request. Specifying this field in a course update mask will result in an `INVALID_ARGUMENT` error."
+     "description": "The identifier of the owner of a course. When specified as a parameter of a create course request, this field is required. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user This must be set in a create request. Specifying this field in a course update mask will result in an `INVALID_ARGUMENT` error."
     },
     "creationTime": {
      "type": "string",
@@ -431,7 +431,7 @@
      "id": "classroom.courses.create",
      "path": "v1/courses",
      "httpMethod": "POST",
-     "description": "Creates a course. The user specified in `ownerId` is the owner of the created course and added as a teacher. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to create courses or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if the primary teacher is not a valid user. * `FAILED_PRECONDITION` if the course owner's account is disabled. * `ALREADY_EXISTS` if an alias was specified in the `id` and already exists.",
+     "description": "Creates a course. The user specified in `ownerId` is the owner of the created course and added as a teacher. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to create courses or for access errors. * `NOT_FOUND` if the primary teacher is not a valid user. * `FAILED_PRECONDITION` if the course owner's account is disabled or for the following request errors: * UserGroupsMembershipLimitReached * `ALREADY_EXISTS` if an alias was specified in the `id` and already exists.",
      "request": {
       "$ref": "Course"
      },
@@ -446,11 +446,11 @@
      "id": "classroom.courses.get",
      "path": "v1/courses/{id}",
      "httpMethod": "GET",
-     "description": "Returns a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if no course exists with the requested ID.",
+     "description": "Returns a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or for access errors. * `NOT_FOUND` if no course exists with the requested ID.",
      "parameters": {
       "id": {
        "type": "string",
-       "description": "Identifier of the course to return. This identifier can be either the Classroom-assigned identifier or an [alias][google.classroom.v1.CourseAlias].",
+       "description": "Identifier of the course to return. This identifier can be either the Classroom-assigned identifier or an alias.",
        "required": true,
        "location": "path"
       }
@@ -470,11 +470,11 @@
      "id": "classroom.courses.update",
      "path": "v1/courses/{id}",
      "httpMethod": "PUT",
-     "description": "Updates a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to modify the requested course or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if no course exists with the requested ID.",
+     "description": "Updates a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to modify the requested course or for access errors. * `NOT_FOUND` if no course exists with the requested ID. * `FAILED_PRECONDITION` for the following request errors: * CourseNotModifiable",
      "parameters": {
       "id": {
        "type": "string",
-       "description": "Identifier of the course to update. This identifier can be either the Classroom-assigned identifier or an [alias][google.classroom.v1.CourseAlias].",
+       "description": "Identifier of the course to update. This identifier can be either the Classroom-assigned identifier or an alias.",
        "required": true,
        "location": "path"
       }
@@ -496,11 +496,11 @@
      "id": "classroom.courses.patch",
      "path": "v1/courses/{id}",
      "httpMethod": "PATCH",
-     "description": "Updates one or more fields in a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to modify the requested course or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if no course exists with the requested ID. * `INVALID_ARGUMENT` if invalid fields are specified in the update mask or if no update mask is supplied.",
+     "description": "Updates one or more fields in a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to modify the requested course or for access errors. * `NOT_FOUND` if no course exists with the requested ID. * `INVALID_ARGUMENT` if invalid fields are specified in the update mask or if no update mask is supplied. * `FAILED_PRECONDITION` for the following request errors: * CourseNotModifiable",
      "parameters": {
       "id": {
        "type": "string",
-       "description": "Identifier of the course to update. This identifier can be either the Classroom-assigned identifier or an [alias][google.classroom.v1.CourseAlias].",
+       "description": "Identifier of the course to update. This identifier can be either the Classroom-assigned identifier or an alias.",
        "required": true,
        "location": "path"
       },
@@ -527,11 +527,11 @@
      "id": "classroom.courses.delete",
      "path": "v1/courses/{id}",
      "httpMethod": "DELETE",
-     "description": "Deletes a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to delete the requested course or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if no course exists with the requested ID.",
+     "description": "Deletes a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to delete the requested course or for access errors. * `NOT_FOUND` if no course exists with the requested ID.",
      "parameters": {
       "id": {
        "type": "string",
-       "description": "Identifier of the course to delete. This identifier can be either the Classroom-assigned identifier or an [alias][google.classroom.v1.CourseAlias].",
+       "description": "Identifier of the course to delete. This identifier can be either the Classroom-assigned identifier or an alias.",
        "required": true,
        "location": "path"
       }
@@ -550,7 +550,7 @@
      "id": "classroom.courses.list",
      "path": "v1/courses",
      "httpMethod": "GET",
-     "description": "Returns a list of courses that the requesting user is permitted to view, restricted to those that match the request. This method returns the following error codes: * `PERMISSION_DENIED` for [general user permission errors][User Permission Errors]. * `INVALID_ARGUMENT` if the query argument is malformed. * `NOT_FOUND` if any users specified in the query arguments do not exist.",
+     "description": "Returns a list of courses that the requesting user is permitted to view, restricted to those that match the request. This method returns the following error codes: * `PERMISSION_DENIED` for access errors. * `INVALID_ARGUMENT` if the query argument is malformed. * `NOT_FOUND` if any users specified in the query arguments do not exist.",
      "parameters": {
       "studentId": {
        "type": "string",
@@ -570,7 +570,7 @@
       },
       "pageToken": {
        "type": "string",
-       "description": "[nextPageToken][google.classroom.v1.ListCoursesResponse.next_page_token] value returned from a previous [list][google.classroom.v1.Courses.ListCourses] call, indicating that the subsequent page of results should be returned. The [list][google.classroom.v1.Courses.ListCourses] request must be otherwise identical to the one that resulted in this token.",
+       "description": "nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token.",
        "location": "query"
       }
      },
@@ -590,11 +590,11 @@
        "id": "classroom.courses.aliases.create",
        "path": "v1/courses/{courseId}/aliases",
        "httpMethod": "POST",
-       "description": "Creates an alias for a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to create the alias or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if the course does not exist. * `ALREADY_EXISTS` if the alias already exists.",
+       "description": "Creates an alias for a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to create the alias or for access errors. * `NOT_FOUND` if the course does not exist. * `ALREADY_EXISTS` if the alias already exists.",
        "parameters": {
         "courseId": {
          "type": "string",
-         "description": "Identifier of the course to alias. This identifier can be either the Classroom-assigned identifier or an [alias][google.classroom.v1.CourseAlias].",
+         "description": "Identifier of the course to alias. This identifier can be either the Classroom-assigned identifier or an alias.",
          "required": true,
          "location": "path"
         }
@@ -616,11 +616,11 @@
        "id": "classroom.courses.aliases.delete",
        "path": "v1/courses/{courseId}/aliases/{alias}",
        "httpMethod": "DELETE",
-       "description": "Deletes an alias of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to remove the alias or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if the alias does not exist.",
+       "description": "Deletes an alias of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to remove the alias or for access errors. * `NOT_FOUND` if the alias does not exist.",
        "parameters": {
         "courseId": {
          "type": "string",
-         "description": "Identifier of the course whose alias should be deleted. This identifier can be either the Classroom-assigned identifier or an [alias][google.classroom.v1.CourseAlias].",
+         "description": "Identifier of the course whose alias should be deleted. This identifier can be either the Classroom-assigned identifier or an alias.",
          "required": true,
          "location": "path"
         },
@@ -646,11 +646,11 @@
        "id": "classroom.courses.aliases.list",
        "path": "v1/courses/{courseId}/aliases",
        "httpMethod": "GET",
-       "description": "Returns a list of aliases for a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the course or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if the course does not exist.",
+       "description": "Returns a list of aliases for a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the course or for access errors. * `NOT_FOUND` if the course does not exist.",
        "parameters": {
         "courseId": {
          "type": "string",
-         "description": "The identifier of the course. This identifier can be either the Classroom-assigned identifier or an [alias][google.classroom.v1.CourseAlias].",
+         "description": "The identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
          "required": true,
          "location": "path"
         },
@@ -662,7 +662,7 @@
         },
         "pageToken": {
          "type": "string",
-         "description": "[nextPageToken][google.classroom.v1.ListCourseAliasesResponse.next_page_token] value returned from a previous [list][google.classroom.v1.Courses.ListCourseAliases] call, indicating that the subsequent page of results should be returned. The [list][google.classroom.v1.Courses.ListCourseAliases] request must be otherwise identical to the one that resulted in this token.",
+         "description": "nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token.",
          "location": "query"
         }
        },
@@ -685,11 +685,11 @@
        "id": "classroom.courses.teachers.create",
        "path": "v1/courses/{courseId}/teachers",
        "httpMethod": "POST",
-       "description": "Creates a teacher of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to create teachers in this course or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if the requested course ID does not exist. * `FAILED_PRECONDITION` if the requested user's account is disabled. * `ALREADY_EXISTS` if the user is already a teacher or student in the course.",
+       "description": "Creates a teacher of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to create teachers in this course or for access errors. * `NOT_FOUND` if the requested course ID does not exist. * `FAILED_PRECONDITION` if the requested user's account is disabled, for the following request errors: * CourseMemberLimitReached * CourseNotModifiable * CourseTeacherLimitReached * UserGroupsMembershipLimitReached * `ALREADY_EXISTS` if the user is already a teacher or student in the course.",
        "parameters": {
         "courseId": {
          "type": "string",
-         "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an [alias][google.classroom.v1.CourseAlias].",
+         "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
          "required": true,
          "location": "path"
         }
@@ -713,11 +713,11 @@
        "id": "classroom.courses.teachers.get",
        "path": "v1/courses/{courseId}/teachers/{userId}",
        "httpMethod": "GET",
-       "description": "Returns a teacher of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to view teachers of this course or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if no teacher of this course has the requested ID or if the course does not exist.",
+       "description": "Returns a teacher of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to view teachers of this course or for access errors. * `NOT_FOUND` if no teacher of this course has the requested ID or if the course does not exist.",
        "parameters": {
         "courseId": {
          "type": "string",
-         "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an [alias][google.classroom.v1.CourseAlias].",
+         "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
          "required": true,
          "location": "path"
         },
@@ -746,11 +746,11 @@
        "id": "classroom.courses.teachers.delete",
        "path": "v1/courses/{courseId}/teachers/{userId}",
        "httpMethod": "DELETE",
-       "description": "Deletes a teacher of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to delete teachers of this course or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if no teacher of this course has the requested ID or if the course does not exist. * `FAILED_PRECONDITION` if the requested ID belongs to the primary teacher of this course.",
+       "description": "Deletes a teacher of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to delete teachers of this course or for access errors. * `NOT_FOUND` if no teacher of this course has the requested ID or if the course does not exist. * `FAILED_PRECONDITION` if the requested ID belongs to the primary teacher of this course.",
        "parameters": {
         "courseId": {
          "type": "string",
-         "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an [alias][google.classroom.v1.CourseAlias].",
+         "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
          "required": true,
          "location": "path"
         },
@@ -776,11 +776,11 @@
        "id": "classroom.courses.teachers.list",
        "path": "v1/courses/{courseId}/teachers",
        "httpMethod": "GET",
-       "description": "Returns a list of teachers of this course that the requester is permitted to view. This method returns the following error codes: * `NOT_FOUND` if the course does not exist. * `PERMISSION_DENIED` for [general user permission errors][User Permission Errors].",
+       "description": "Returns a list of teachers of this course that the requester is permitted to view. This method returns the following error codes: * `NOT_FOUND` if the course does not exist. * `PERMISSION_DENIED` for access errors.",
        "parameters": {
         "courseId": {
          "type": "string",
-         "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an [alias][google.classroom.v1.CourseAlias].",
+         "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
          "required": true,
          "location": "path"
         },
@@ -792,7 +792,7 @@
         },
         "pageToken": {
          "type": "string",
-         "description": "[nextPageToken][google.classroom.v1.ListTeachersResponse.next_page_token] value returned from a previous [list][google.classroom.v1.Users.ListTeachers] call, indicating that the subsequent page of results should be returned. The [list][google.classroom.v1.Users.ListTeachers] request must be otherwise identical to the one that resulted in this token.",
+         "description": "nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token.",
          "location": "query"
         }
        },
@@ -817,17 +817,17 @@
        "id": "classroom.courses.students.create",
        "path": "v1/courses/{courseId}/students",
        "httpMethod": "POST",
-       "description": "Adds a user as a student of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to create students in this course or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if the requested course ID does not exist. * `FAILED_PRECONDITION` if the requested user's account is disabled. * `ALREADY_EXISTS` if the user is already a student or teacher in the course.",
+       "description": "Adds a user as a student of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to create students in this course or for access errors. * `NOT_FOUND` if the requested course ID does not exist. * `FAILED_PRECONDITION` if the requested user's account is disabled, for the following request errors: * CourseMemberLimitReached * CourseNotModifiable * UserGroupsMembershipLimitReached * `ALREADY_EXISTS` if the user is already a student or teacher in the course.",
        "parameters": {
         "courseId": {
          "type": "string",
-         "description": "Identifier of the course to create the student in. This identifier can be either the Classroom-assigned identifier or an [alias][google.classroom.v1.CourseAlias].",
+         "description": "Identifier of the course to create the student in. This identifier can be either the Classroom-assigned identifier or an alias.",
          "required": true,
          "location": "path"
         },
         "enrollmentCode": {
          "type": "string",
-         "description": "Enrollment code of the course to create the student in. This code is required if [userId][google.classroom.v1.Student.user_id] corresponds to the requesting user; it may be omitted if the requesting user has administrative permissions to create students for any user.",
+         "description": "Enrollment code of the course to create the student in. This code is required if userId corresponds to the requesting user; it may be omitted if the requesting user has administrative permissions to create students for any user.",
          "location": "query"
         }
        },
@@ -850,11 +850,11 @@
        "id": "classroom.courses.students.get",
        "path": "v1/courses/{courseId}/students/{userId}",
        "httpMethod": "GET",
-       "description": "Returns a student of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to view students of this course or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if no student of this course has the requested ID or if the course does not exist.",
+       "description": "Returns a student of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to view students of this course or for access errors. * `NOT_FOUND` if no student of this course has the requested ID or if the course does not exist.",
        "parameters": {
         "courseId": {
          "type": "string",
-         "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an [alias][google.classroom.v1.CourseAlias].",
+         "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
          "required": true,
          "location": "path"
         },
@@ -883,11 +883,11 @@
        "id": "classroom.courses.students.delete",
        "path": "v1/courses/{courseId}/students/{userId}",
        "httpMethod": "DELETE",
-       "description": "Deletes a student of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to delete students of this course or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if no student of this course has the requested ID or if the course does not exist.",
+       "description": "Deletes a student of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to delete students of this course or for access errors. * `NOT_FOUND` if no student of this course has the requested ID or if the course does not exist.",
        "parameters": {
         "courseId": {
          "type": "string",
-         "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an [alias][google.classroom.v1.CourseAlias].",
+         "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
          "required": true,
          "location": "path"
         },
@@ -913,11 +913,11 @@
        "id": "classroom.courses.students.list",
        "path": "v1/courses/{courseId}/students",
        "httpMethod": "GET",
-       "description": "Returns a list of students of this course that the requester is permitted to view. This method returns the following error codes: * `NOT_FOUND` if the course does not exist. * `PERMISSION_DENIED` for [general user permission errors][User Permission Errors].",
+       "description": "Returns a list of students of this course that the requester is permitted to view. This method returns the following error codes: * `NOT_FOUND` if the course does not exist. * `PERMISSION_DENIED` for access errors.",
        "parameters": {
         "courseId": {
          "type": "string",
-         "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an [alias][google.classroom.v1.CourseAlias].",
+         "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
          "required": true,
          "location": "path"
         },
@@ -929,7 +929,7 @@
         },
         "pageToken": {
          "type": "string",
-         "description": "[nextPageToken][google.classroom.v1.ListStudentsResponse.next_page_token] value returned from a previous [list][google.classroom.v1.Users.ListStudents] call, indicating that the subsequent page of results should be returned. The [list][google.classroom.v1.Users.ListStudents] request must be otherwise identical to the one that resulted in this token.",
+         "description": "nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token.",
          "location": "query"
         }
        },
@@ -956,7 +956,7 @@
      "id": "classroom.invitations.create",
      "path": "v1/invitations",
      "httpMethod": "POST",
-     "description": "Creates an invitation. Only one invitation for a user and course may exist at a time. Delete and re-create an invitation to make changes. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to create invitations for this course or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if the course or the user does not exist. * `FAILED_PRECONDITION` if the requested user's account is disabled or if the user already has this role or a role with greater permissions. * `ALREADY_EXISTS` if an invitation for the specified user and course already exists.",
+     "description": "Creates an invitation. Only one invitation for a user and course may exist at a time. Delete and re-create an invitation to make changes. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to create invitations for this course or for access errors. * `NOT_FOUND` if the course or the user does not exist. * `FAILED_PRECONDITION` if the requested user's account is disabled or if the user already has this role or a role with greater permissions. * `ALREADY_EXISTS` if an invitation for the specified user and course already exists.",
      "request": {
       "$ref": "Invitation"
      },
@@ -971,7 +971,7 @@
      "id": "classroom.invitations.get",
      "path": "v1/invitations/{id}",
      "httpMethod": "GET",
-     "description": "Returns an invitation. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to view the requested invitation or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if no invitation exists with the requested ID.",
+     "description": "Returns an invitation. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to view the requested invitation or for access errors. * `NOT_FOUND` if no invitation exists with the requested ID.",
      "parameters": {
       "id": {
        "type": "string",
@@ -995,7 +995,7 @@
      "id": "classroom.invitations.delete",
      "path": "v1/invitations/{id}",
      "httpMethod": "DELETE",
-     "description": "Deletes an invitation. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to delete the requested invitation or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if no invitation exists with the requested ID.",
+     "description": "Deletes an invitation. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to delete the requested invitation or for access errors. * `NOT_FOUND` if no invitation exists with the requested ID.",
      "parameters": {
       "id": {
        "type": "string",
@@ -1018,7 +1018,7 @@
      "id": "classroom.invitations.list",
      "path": "v1/invitations",
      "httpMethod": "GET",
-     "description": "Returns a list of invitations that the requesting user is permitted to view, restricted to those that match the list request. *Note:* At least one of `user_id` or `course_id` must be supplied. Both fields can be supplied. This method returns the following error codes: * `PERMISSION_DENIED` for [general user permission errors][User Permission Errors].",
+     "description": "Returns a list of invitations that the requesting user is permitted to view, restricted to those that match the list request. *Note:* At least one of `user_id` or `course_id` must be supplied. Both fields can be supplied. This method returns the following error codes: * `PERMISSION_DENIED` for access errors.",
      "parameters": {
       "userId": {
        "type": "string",
@@ -1038,7 +1038,7 @@
       },
       "pageToken": {
        "type": "string",
-       "description": "[nextPageToken][google.classroom.v1.ListInvitationsResponse.next_page_token] value returned from a previous [list][google.classroom.v1.Invitations.ListInvitations] call, indicating that the subsequent page of results should be returned. The [list][google.classroom.v1.Invitations.ListInvitations] request must be otherwise identical to the one that resulted in this token.",
+       "description": "nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token.",
        "location": "query"
       }
      },
@@ -1054,7 +1054,7 @@
      "id": "classroom.invitations.accept",
      "path": "v1/invitations/{id}:accept",
      "httpMethod": "POST",
-     "description": "Accepts an invitation, removing it and adding the invited user to the teachers or students (as appropriate) of the specified course. Only the invited user may accept an invitation. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to accept the requested invitation or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if no invitation exists with the requested ID.",
+     "description": "Accepts an invitation, removing it and adding the invited user to the teachers or students (as appropriate) of the specified course. Only the invited user may accept an invitation. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to accept the requested invitation or for access errors. * `FAILED_PRECONDITION` for the following request errors: * CourseMemberLimitReached * CourseNotModifiable * CourseTeacherLimitReached * UserGroupsMembershipLimitReached * `NOT_FOUND` if no invitation exists with the requested ID.",
      "parameters": {
       "id": {
        "type": "string",
@@ -1081,7 +1081,7 @@
      "id": "classroom.userProfiles.get",
      "path": "v1/userProfiles/{userId}",
      "httpMethod": "GET",
-     "description": "Returns a user profile. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access this user profile or if no profile exists with the requested ID or for [general user permission errors][User Permission Errors].",
+     "description": "Returns a user profile. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access this user profile or if no profile exists with the requested ID or for access errors.",
      "parameters": {
       "userId": {
        "type": "string",
diff --git a/classroom/v1/classroom-gen.go b/classroom/v1/classroom-gen.go
index 712fec9..6e809d3 100644
--- a/classroom/v1/classroom-gen.go
+++ b/classroom/v1/classroom-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "classroom:v1"
 const apiName = "classroom"
@@ -195,13 +197,12 @@
 	// error. Read-only.
 	EnrollmentCode string `json:"enrollmentCode,omitempty"`
 
-	// Id: Identifier for this course assigned by Classroom. When [creating
-	// a course][google.classroom.v1.Courses.CreateCourse], you may
-	// optionally set this identifier to an [alias
-	// string][google.classroom.v1.CourseAlias] in the request to create a
-	// corresponding alias. The `id` is still assigned by Classroom and
-	// cannot be updated after the course is created. Specifying this field
-	// in a course update mask will result in an error.
+	// Id: Identifier for this course assigned by Classroom. When creating a
+	// course, you may optionally set this identifier to an alias string in
+	// the request to create a corresponding alias. The `id` is still
+	// assigned by Classroom and cannot be updated after the course is
+	// created. Specifying this field in a course update mask will result in
+	// an error.
 	Id string `json:"id,omitempty"`
 
 	// Name: Name of the course. For example, "10th Grade Biology". The name
@@ -210,13 +211,12 @@
 	Name string `json:"name,omitempty"`
 
 	// OwnerId: The identifier of the owner of a course. When specified as a
-	// parameter of a [create course
-	// request][google.classroom.v1.Courses.CreateCourse], this field is
-	// required. The identifier can be one of the following: * the numeric
-	// identifier for the user * the email address of the user * the string
-	// literal "me", indicating the requesting user This must be set in a
-	// create request. Specifying this field in a course update mask will
-	// result in an `INVALID_ARGUMENT` error.
+	// parameter of a create course request, this field is required. The
+	// identifier can be one of the following: * the numeric identifier for
+	// the user * the email address of the user * the string literal "me",
+	// indicating the requesting user This must be set in a create request.
+	// Specifying this field in a course update mask will result in an
+	// `INVALID_ARGUMENT` error.
 	OwnerId string `json:"ownerId,omitempty"`
 
 	// Room: Optional room location. For example, "301". If set, this field
@@ -650,11 +650,12 @@
 // Create: Creates a course. The user specified in `ownerId` is the
 // owner of the created course and added as a teacher. This method
 // returns the following error codes: * `PERMISSION_DENIED` if the
-// requesting user is not permitted to create courses or for [general
-// user permission errors][User Permission Errors]. * `NOT_FOUND` if the
-// primary teacher is not a valid user. * `FAILED_PRECONDITION` if the
-// course owner's account is disabled. * `ALREADY_EXISTS` if an alias
-// was specified in the `id` and already exists.
+// requesting user is not permitted to create courses or for access
+// errors. * `NOT_FOUND` if the primary teacher is not a valid user. *
+// `FAILED_PRECONDITION` if the course owner's account is disabled or
+// for the following request errors: * UserGroupsMembershipLimitReached
+// * `ALREADY_EXISTS` if an alias was specified in the `id` and already
+// exists.
 func (r *CoursesService) Create(course *Course) *CoursesCreateCall {
 	c := &CoursesCreateCall{s: r.s, opt_: make(map[string]interface{})}
 	c.course = course
@@ -737,7 +738,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Creates a course. The user specified in `ownerId` is the owner of the created course and added as a teacher. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to create courses or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if the primary teacher is not a valid user. * `FAILED_PRECONDITION` if the course owner's account is disabled. * `ALREADY_EXISTS` if an alias was specified in the `id` and already exists.",
+	//   "description": "Creates a course. The user specified in `ownerId` is the owner of the created course and added as a teacher. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to create courses or for access errors. * `NOT_FOUND` if the primary teacher is not a valid user. * `FAILED_PRECONDITION` if the course owner's account is disabled or for the following request errors: * UserGroupsMembershipLimitReached * `ALREADY_EXISTS` if an alias was specified in the `id` and already exists.",
 	//   "httpMethod": "POST",
 	//   "id": "classroom.courses.create",
 	//   "path": "v1/courses",
@@ -765,9 +766,8 @@
 
 // Delete: Deletes a course. This method returns the following error
 // codes: * `PERMISSION_DENIED` if the requesting user is not permitted
-// to delete the requested course or for [general user permission
-// errors][User Permission Errors]. * `NOT_FOUND` if no course exists
-// with the requested ID.
+// to delete the requested course or for access errors. * `NOT_FOUND` if
+// no course exists with the requested ID.
 func (r *CoursesService) Delete(id string) *CoursesDeleteCall {
 	c := &CoursesDeleteCall{s: r.s, opt_: make(map[string]interface{})}
 	c.id = id
@@ -846,7 +846,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Deletes a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to delete the requested course or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if no course exists with the requested ID.",
+	//   "description": "Deletes a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to delete the requested course or for access errors. * `NOT_FOUND` if no course exists with the requested ID.",
 	//   "httpMethod": "DELETE",
 	//   "id": "classroom.courses.delete",
 	//   "parameterOrder": [
@@ -854,7 +854,7 @@
 	//   ],
 	//   "parameters": {
 	//     "id": {
-	//       "description": "Identifier of the course to delete. This identifier can be either the Classroom-assigned identifier or an [alias][google.classroom.v1.CourseAlias].",
+	//       "description": "Identifier of the course to delete. This identifier can be either the Classroom-assigned identifier or an alias.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -882,9 +882,8 @@
 
 // Get: Returns a course. This method returns the following error codes:
 // * `PERMISSION_DENIED` if the requesting user is not permitted to
-// access the requested course or for [general user permission
-// errors][User Permission Errors]. * `NOT_FOUND` if no course exists
-// with the requested ID.
+// access the requested course or for access errors. * `NOT_FOUND` if no
+// course exists with the requested ID.
 func (r *CoursesService) Get(id string) *CoursesGetCall {
 	c := &CoursesGetCall{s: r.s, opt_: make(map[string]interface{})}
 	c.id = id
@@ -976,7 +975,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Returns a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if no course exists with the requested ID.",
+	//   "description": "Returns a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or for access errors. * `NOT_FOUND` if no course exists with the requested ID.",
 	//   "httpMethod": "GET",
 	//   "id": "classroom.courses.get",
 	//   "parameterOrder": [
@@ -984,7 +983,7 @@
 	//   ],
 	//   "parameters": {
 	//     "id": {
-	//       "description": "Identifier of the course to return. This identifier can be either the Classroom-assigned identifier or an [alias][google.classroom.v1.CourseAlias].",
+	//       "description": "Identifier of the course to return. This identifier can be either the Classroom-assigned identifier or an alias.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -1012,10 +1011,10 @@
 
 // List: Returns a list of courses that the requesting user is permitted
 // to view, restricted to those that match the request. This method
-// returns the following error codes: * `PERMISSION_DENIED` for [general
-// user permission errors][User Permission Errors]. * `INVALID_ARGUMENT`
-// if the query argument is malformed. * `NOT_FOUND` if any users
-// specified in the query arguments do not exist.
+// returns the following error codes: * `PERMISSION_DENIED` for access
+// errors. * `INVALID_ARGUMENT` if the query argument is malformed. *
+// `NOT_FOUND` if any users specified in the query arguments do not
+// exist.
 func (r *CoursesService) List() *CoursesListCall {
 	c := &CoursesListCall{s: r.s, opt_: make(map[string]interface{})}
 	return c
@@ -1030,13 +1029,10 @@
 	return c
 }
 
-// PageToken sets the optional parameter "pageToken":
-// [nextPageToken][google.classroom.v1.ListCoursesResponse.next_page_toke
-// n] value returned from a previous
-// [list][google.classroom.v1.Courses.ListCourses] call, indicating that
-// the subsequent page of results should be returned. The
-// [list][google.classroom.v1.Courses.ListCourses] request must be
-// otherwise identical to the one that resulted in this token.
+// PageToken sets the optional parameter "pageToken": nextPageToken
+// value returned from a previous list call, indicating that the
+// subsequent page of results should be returned. The list request must
+// be otherwise identical to the one that resulted in this token.
 func (c *CoursesListCall) PageToken(pageToken string) *CoursesListCall {
 	c.opt_["pageToken"] = pageToken
 	return c
@@ -1157,7 +1153,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Returns a list of courses that the requesting user is permitted to view, restricted to those that match the request. This method returns the following error codes: * `PERMISSION_DENIED` for [general user permission errors][User Permission Errors]. * `INVALID_ARGUMENT` if the query argument is malformed. * `NOT_FOUND` if any users specified in the query arguments do not exist.",
+	//   "description": "Returns a list of courses that the requesting user is permitted to view, restricted to those that match the request. This method returns the following error codes: * `PERMISSION_DENIED` for access errors. * `INVALID_ARGUMENT` if the query argument is malformed. * `NOT_FOUND` if any users specified in the query arguments do not exist.",
 	//   "httpMethod": "GET",
 	//   "id": "classroom.courses.list",
 	//   "parameters": {
@@ -1168,7 +1164,7 @@
 	//       "type": "integer"
 	//     },
 	//     "pageToken": {
-	//       "description": "[nextPageToken][google.classroom.v1.ListCoursesResponse.next_page_token] value returned from a previous [list][google.classroom.v1.Courses.ListCourses] call, indicating that the subsequent page of results should be returned. The [list][google.classroom.v1.Courses.ListCourses] request must be otherwise identical to the one that resulted in this token.",
+	//       "description": "nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
@@ -1207,11 +1203,11 @@
 
 // Patch: Updates one or more fields in a course. This method returns
 // the following error codes: * `PERMISSION_DENIED` if the requesting
-// user is not permitted to modify the requested course or for [general
-// user permission errors][User Permission Errors]. * `NOT_FOUND` if no
-// course exists with the requested ID. * `INVALID_ARGUMENT` if invalid
-// fields are specified in the update mask or if no update mask is
-// supplied.
+// user is not permitted to modify the requested course or for access
+// errors. * `NOT_FOUND` if no course exists with the requested ID. *
+// `INVALID_ARGUMENT` if invalid fields are specified in the update mask
+// or if no update mask is supplied. * `FAILED_PRECONDITION` for the
+// following request errors: * CourseNotModifiable
 func (r *CoursesService) Patch(id string, course *Course) *CoursesPatchCall {
 	c := &CoursesPatchCall{s: r.s, opt_: make(map[string]interface{})}
 	c.id = id
@@ -1312,7 +1308,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Updates one or more fields in a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to modify the requested course or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if no course exists with the requested ID. * `INVALID_ARGUMENT` if invalid fields are specified in the update mask or if no update mask is supplied.",
+	//   "description": "Updates one or more fields in a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to modify the requested course or for access errors. * `NOT_FOUND` if no course exists with the requested ID. * `INVALID_ARGUMENT` if invalid fields are specified in the update mask or if no update mask is supplied. * `FAILED_PRECONDITION` for the following request errors: * CourseNotModifiable",
 	//   "httpMethod": "PATCH",
 	//   "id": "classroom.courses.patch",
 	//   "parameterOrder": [
@@ -1320,7 +1316,7 @@
 	//   ],
 	//   "parameters": {
 	//     "id": {
-	//       "description": "Identifier of the course to update. This identifier can be either the Classroom-assigned identifier or an [alias][google.classroom.v1.CourseAlias].",
+	//       "description": "Identifier of the course to update. This identifier can be either the Classroom-assigned identifier or an alias.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -1357,9 +1353,9 @@
 
 // Update: Updates a course. This method returns the following error
 // codes: * `PERMISSION_DENIED` if the requesting user is not permitted
-// to modify the requested course or for [general user permission
-// errors][User Permission Errors]. * `NOT_FOUND` if no course exists
-// with the requested ID.
+// to modify the requested course or for access errors. * `NOT_FOUND` if
+// no course exists with the requested ID. * `FAILED_PRECONDITION` for
+// the following request errors: * CourseNotModifiable
 func (r *CoursesService) Update(id string, course *Course) *CoursesUpdateCall {
 	c := &CoursesUpdateCall{s: r.s, opt_: make(map[string]interface{})}
 	c.id = id
@@ -1445,7 +1441,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Updates a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to modify the requested course or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if no course exists with the requested ID.",
+	//   "description": "Updates a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to modify the requested course or for access errors. * `NOT_FOUND` if no course exists with the requested ID. * `FAILED_PRECONDITION` for the following request errors: * CourseNotModifiable",
 	//   "httpMethod": "PUT",
 	//   "id": "classroom.courses.update",
 	//   "parameterOrder": [
@@ -1453,7 +1449,7 @@
 	//   ],
 	//   "parameters": {
 	//     "id": {
-	//       "description": "Identifier of the course to update. This identifier can be either the Classroom-assigned identifier or an [alias][google.classroom.v1.CourseAlias].",
+	//       "description": "Identifier of the course to update. This identifier can be either the Classroom-assigned identifier or an alias.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -1485,9 +1481,9 @@
 
 // Create: Creates an alias for a course. This method returns the
 // following error codes: * `PERMISSION_DENIED` if the requesting user
-// is not permitted to create the alias or for [general user permission
-// errors][User Permission Errors]. * `NOT_FOUND` if the course does not
-// exist. * `ALREADY_EXISTS` if the alias already exists.
+// is not permitted to create the alias or for access errors. *
+// `NOT_FOUND` if the course does not exist. * `ALREADY_EXISTS` if the
+// alias already exists.
 func (r *CoursesAliasesService) Create(courseId string, coursealias *CourseAlias) *CoursesAliasesCreateCall {
 	c := &CoursesAliasesCreateCall{s: r.s, opt_: make(map[string]interface{})}
 	c.courseId = courseId
@@ -1573,7 +1569,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Creates an alias for a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to create the alias or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if the course does not exist. * `ALREADY_EXISTS` if the alias already exists.",
+	//   "description": "Creates an alias for a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to create the alias or for access errors. * `NOT_FOUND` if the course does not exist. * `ALREADY_EXISTS` if the alias already exists.",
 	//   "httpMethod": "POST",
 	//   "id": "classroom.courses.aliases.create",
 	//   "parameterOrder": [
@@ -1581,7 +1577,7 @@
 	//   ],
 	//   "parameters": {
 	//     "courseId": {
-	//       "description": "Identifier of the course to alias. This identifier can be either the Classroom-assigned identifier or an [alias][google.classroom.v1.CourseAlias].",
+	//       "description": "Identifier of the course to alias. This identifier can be either the Classroom-assigned identifier or an alias.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -1613,9 +1609,8 @@
 
 // Delete: Deletes an alias of a course. This method returns the
 // following error codes: * `PERMISSION_DENIED` if the requesting user
-// is not permitted to remove the alias or for [general user permission
-// errors][User Permission Errors]. * `NOT_FOUND` if the alias does not
-// exist.
+// is not permitted to remove the alias or for access errors. *
+// `NOT_FOUND` if the alias does not exist.
 func (r *CoursesAliasesService) Delete(courseId string, aliasid string) *CoursesAliasesDeleteCall {
 	c := &CoursesAliasesDeleteCall{s: r.s, opt_: make(map[string]interface{})}
 	c.courseId = courseId
@@ -1696,7 +1691,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Deletes an alias of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to remove the alias or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if the alias does not exist.",
+	//   "description": "Deletes an alias of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to remove the alias or for access errors. * `NOT_FOUND` if the alias does not exist.",
 	//   "httpMethod": "DELETE",
 	//   "id": "classroom.courses.aliases.delete",
 	//   "parameterOrder": [
@@ -1711,7 +1706,7 @@
 	//       "type": "string"
 	//     },
 	//     "courseId": {
-	//       "description": "Identifier of the course whose alias should be deleted. This identifier can be either the Classroom-assigned identifier or an [alias][google.classroom.v1.CourseAlias].",
+	//       "description": "Identifier of the course whose alias should be deleted. This identifier can be either the Classroom-assigned identifier or an alias.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -1739,9 +1734,8 @@
 
 // List: Returns a list of aliases for a course. This method returns the
 // following error codes: * `PERMISSION_DENIED` if the requesting user
-// is not permitted to access the course or for [general user permission
-// errors][User Permission Errors]. * `NOT_FOUND` if the course does not
-// exist.
+// is not permitted to access the course or for access errors. *
+// `NOT_FOUND` if the course does not exist.
 func (r *CoursesAliasesService) List(courseId string) *CoursesAliasesListCall {
 	c := &CoursesAliasesListCall{s: r.s, opt_: make(map[string]interface{})}
 	c.courseId = courseId
@@ -1757,13 +1751,10 @@
 	return c
 }
 
-// PageToken sets the optional parameter "pageToken":
-// [nextPageToken][google.classroom.v1.ListCourseAliasesResponse.next_pag
-// e_token] value returned from a previous
-// [list][google.classroom.v1.Courses.ListCourseAliases] call,
-// indicating that the subsequent page of results should be returned.
-// The [list][google.classroom.v1.Courses.ListCourseAliases] request
-// must be otherwise identical to the one that resulted in this token.
+// PageToken sets the optional parameter "pageToken": nextPageToken
+// value returned from a previous list call, indicating that the
+// subsequent page of results should be returned. The list request must
+// be otherwise identical to the one that resulted in this token.
 func (c *CoursesAliasesListCall) PageToken(pageToken string) *CoursesAliasesListCall {
 	c.opt_["pageToken"] = pageToken
 	return c
@@ -1860,7 +1851,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Returns a list of aliases for a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the course or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if the course does not exist.",
+	//   "description": "Returns a list of aliases for a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the course or for access errors. * `NOT_FOUND` if the course does not exist.",
 	//   "httpMethod": "GET",
 	//   "id": "classroom.courses.aliases.list",
 	//   "parameterOrder": [
@@ -1868,7 +1859,7 @@
 	//   ],
 	//   "parameters": {
 	//     "courseId": {
-	//       "description": "The identifier of the course. This identifier can be either the Classroom-assigned identifier or an [alias][google.classroom.v1.CourseAlias].",
+	//       "description": "The identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -1880,7 +1871,7 @@
 	//       "type": "integer"
 	//     },
 	//     "pageToken": {
-	//       "description": "[nextPageToken][google.classroom.v1.ListCourseAliasesResponse.next_page_token] value returned from a previous [list][google.classroom.v1.Courses.ListCourseAliases] call, indicating that the subsequent page of results should be returned. The [list][google.classroom.v1.Courses.ListCourseAliases] request must be otherwise identical to the one that resulted in this token.",
+	//       "description": "nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token.",
 	//       "location": "query",
 	//       "type": "string"
 	//     }
@@ -1909,11 +1900,13 @@
 
 // Create: Adds a user as a student of a course. This method returns the
 // following error codes: * `PERMISSION_DENIED` if the requesting user
-// is not permitted to create students in this course or for [general
-// user permission errors][User Permission Errors]. * `NOT_FOUND` if the
-// requested course ID does not exist. * `FAILED_PRECONDITION` if the
-// requested user's account is disabled. * `ALREADY_EXISTS` if the user
-// is already a student or teacher in the course.
+// is not permitted to create students in this course or for access
+// errors. * `NOT_FOUND` if the requested course ID does not exist. *
+// `FAILED_PRECONDITION` if the requested user's account is disabled,
+// for the following request errors: * CourseMemberLimitReached *
+// CourseNotModifiable * UserGroupsMembershipLimitReached *
+// `ALREADY_EXISTS` if the user is already a student or teacher in the
+// course.
 func (r *CoursesStudentsService) Create(courseId string, student *Student) *CoursesStudentsCreateCall {
 	c := &CoursesStudentsCreateCall{s: r.s, opt_: make(map[string]interface{})}
 	c.courseId = courseId
@@ -1923,9 +1916,9 @@
 
 // EnrollmentCode sets the optional parameter "enrollmentCode":
 // Enrollment code of the course to create the student in. This code is
-// required if [userId][google.classroom.v1.Student.user_id] corresponds
-// to the requesting user; it may be omitted if the requesting user has
-// administrative permissions to create students for any user.
+// required if userId corresponds to the requesting user; it may be
+// omitted if the requesting user has administrative permissions to
+// create students for any user.
 func (c *CoursesStudentsCreateCall) EnrollmentCode(enrollmentCode string) *CoursesStudentsCreateCall {
 	c.opt_["enrollmentCode"] = enrollmentCode
 	return c
@@ -2012,7 +2005,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Adds a user as a student of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to create students in this course or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if the requested course ID does not exist. * `FAILED_PRECONDITION` if the requested user's account is disabled. * `ALREADY_EXISTS` if the user is already a student or teacher in the course.",
+	//   "description": "Adds a user as a student of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to create students in this course or for access errors. * `NOT_FOUND` if the requested course ID does not exist. * `FAILED_PRECONDITION` if the requested user's account is disabled, for the following request errors: * CourseMemberLimitReached * CourseNotModifiable * UserGroupsMembershipLimitReached * `ALREADY_EXISTS` if the user is already a student or teacher in the course.",
 	//   "httpMethod": "POST",
 	//   "id": "classroom.courses.students.create",
 	//   "parameterOrder": [
@@ -2020,13 +2013,13 @@
 	//   ],
 	//   "parameters": {
 	//     "courseId": {
-	//       "description": "Identifier of the course to create the student in. This identifier can be either the Classroom-assigned identifier or an [alias][google.classroom.v1.CourseAlias].",
+	//       "description": "Identifier of the course to create the student in. This identifier can be either the Classroom-assigned identifier or an alias.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
 	//     },
 	//     "enrollmentCode": {
-	//       "description": "Enrollment code of the course to create the student in. This code is required if [userId][google.classroom.v1.Student.user_id] corresponds to the requesting user; it may be omitted if the requesting user has administrative permissions to create students for any user.",
+	//       "description": "Enrollment code of the course to create the student in. This code is required if userId corresponds to the requesting user; it may be omitted if the requesting user has administrative permissions to create students for any user.",
 	//       "location": "query",
 	//       "type": "string"
 	//     }
@@ -2059,10 +2052,9 @@
 
 // Delete: Deletes a student of a course. This method returns the
 // following error codes: * `PERMISSION_DENIED` if the requesting user
-// is not permitted to delete students of this course or for [general
-// user permission errors][User Permission Errors]. * `NOT_FOUND` if no
-// student of this course has the requested ID or if the course does not
-// exist.
+// is not permitted to delete students of this course or for access
+// errors. * `NOT_FOUND` if no student of this course has the requested
+// ID or if the course does not exist.
 func (r *CoursesStudentsService) Delete(courseId string, userId string) *CoursesStudentsDeleteCall {
 	c := &CoursesStudentsDeleteCall{s: r.s, opt_: make(map[string]interface{})}
 	c.courseId = courseId
@@ -2143,7 +2135,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Deletes a student of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to delete students of this course or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if no student of this course has the requested ID or if the course does not exist.",
+	//   "description": "Deletes a student of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to delete students of this course or for access errors. * `NOT_FOUND` if no student of this course has the requested ID or if the course does not exist.",
 	//   "httpMethod": "DELETE",
 	//   "id": "classroom.courses.students.delete",
 	//   "parameterOrder": [
@@ -2152,7 +2144,7 @@
 	//   ],
 	//   "parameters": {
 	//     "courseId": {
-	//       "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an [alias][google.classroom.v1.CourseAlias].",
+	//       "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -2187,10 +2179,9 @@
 
 // Get: Returns a student of a course. This method returns the following
 // error codes: * `PERMISSION_DENIED` if the requesting user is not
-// permitted to view students of this course or for [general user
-// permission errors][User Permission Errors]. * `NOT_FOUND` if no
-// student of this course has the requested ID or if the course does not
-// exist.
+// permitted to view students of this course or for access errors. *
+// `NOT_FOUND` if no student of this course has the requested ID or if
+// the course does not exist.
 func (r *CoursesStudentsService) Get(courseId string, userId string) *CoursesStudentsGetCall {
 	c := &CoursesStudentsGetCall{s: r.s, opt_: make(map[string]interface{})}
 	c.courseId = courseId
@@ -2284,7 +2275,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Returns a student of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to view students of this course or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if no student of this course has the requested ID or if the course does not exist.",
+	//   "description": "Returns a student of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to view students of this course or for access errors. * `NOT_FOUND` if no student of this course has the requested ID or if the course does not exist.",
 	//   "httpMethod": "GET",
 	//   "id": "classroom.courses.students.get",
 	//   "parameterOrder": [
@@ -2293,7 +2284,7 @@
 	//   ],
 	//   "parameters": {
 	//     "courseId": {
-	//       "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an [alias][google.classroom.v1.CourseAlias].",
+	//       "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -2331,7 +2322,7 @@
 // List: Returns a list of students of this course that the requester is
 // permitted to view. This method returns the following error codes: *
 // `NOT_FOUND` if the course does not exist. * `PERMISSION_DENIED` for
-// [general user permission errors][User Permission Errors].
+// access errors.
 func (r *CoursesStudentsService) List(courseId string) *CoursesStudentsListCall {
 	c := &CoursesStudentsListCall{s: r.s, opt_: make(map[string]interface{})}
 	c.courseId = courseId
@@ -2346,13 +2337,10 @@
 	return c
 }
 
-// PageToken sets the optional parameter "pageToken":
-// [nextPageToken][google.classroom.v1.ListStudentsResponse.next_page_tok
-// en] value returned from a previous
-// [list][google.classroom.v1.Users.ListStudents] call, indicating that
-// the subsequent page of results should be returned. The
-// [list][google.classroom.v1.Users.ListStudents] request must be
-// otherwise identical to the one that resulted in this token.
+// PageToken sets the optional parameter "pageToken": nextPageToken
+// value returned from a previous list call, indicating that the
+// subsequent page of results should be returned. The list request must
+// be otherwise identical to the one that resulted in this token.
 func (c *CoursesStudentsListCall) PageToken(pageToken string) *CoursesStudentsListCall {
 	c.opt_["pageToken"] = pageToken
 	return c
@@ -2449,7 +2437,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Returns a list of students of this course that the requester is permitted to view. This method returns the following error codes: * `NOT_FOUND` if the course does not exist. * `PERMISSION_DENIED` for [general user permission errors][User Permission Errors].",
+	//   "description": "Returns a list of students of this course that the requester is permitted to view. This method returns the following error codes: * `NOT_FOUND` if the course does not exist. * `PERMISSION_DENIED` for access errors.",
 	//   "httpMethod": "GET",
 	//   "id": "classroom.courses.students.list",
 	//   "parameterOrder": [
@@ -2457,7 +2445,7 @@
 	//   ],
 	//   "parameters": {
 	//     "courseId": {
-	//       "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an [alias][google.classroom.v1.CourseAlias].",
+	//       "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -2469,7 +2457,7 @@
 	//       "type": "integer"
 	//     },
 	//     "pageToken": {
-	//       "description": "[nextPageToken][google.classroom.v1.ListStudentsResponse.next_page_token] value returned from a previous [list][google.classroom.v1.Users.ListStudents] call, indicating that the subsequent page of results should be returned. The [list][google.classroom.v1.Users.ListStudents] request must be otherwise identical to the one that resulted in this token.",
+	//       "description": "nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token.",
 	//       "location": "query",
 	//       "type": "string"
 	//     }
@@ -2500,11 +2488,13 @@
 
 // Create: Creates a teacher of a course. This method returns the
 // following error codes: * `PERMISSION_DENIED` if the requesting user
-// is not permitted to create teachers in this course or for [general
-// user permission errors][User Permission Errors]. * `NOT_FOUND` if the
-// requested course ID does not exist. * `FAILED_PRECONDITION` if the
-// requested user's account is disabled. * `ALREADY_EXISTS` if the user
-// is already a teacher or student in the course.
+// is not permitted to create teachers in this course or for access
+// errors. * `NOT_FOUND` if the requested course ID does not exist. *
+// `FAILED_PRECONDITION` if the requested user's account is disabled,
+// for the following request errors: * CourseMemberLimitReached *
+// CourseNotModifiable * CourseTeacherLimitReached *
+// UserGroupsMembershipLimitReached * `ALREADY_EXISTS` if the user is
+// already a teacher or student in the course.
 func (r *CoursesTeachersService) Create(courseId string, teacher *Teacher) *CoursesTeachersCreateCall {
 	c := &CoursesTeachersCreateCall{s: r.s, opt_: make(map[string]interface{})}
 	c.courseId = courseId
@@ -2590,7 +2580,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Creates a teacher of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to create teachers in this course or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if the requested course ID does not exist. * `FAILED_PRECONDITION` if the requested user's account is disabled. * `ALREADY_EXISTS` if the user is already a teacher or student in the course.",
+	//   "description": "Creates a teacher of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to create teachers in this course or for access errors. * `NOT_FOUND` if the requested course ID does not exist. * `FAILED_PRECONDITION` if the requested user's account is disabled, for the following request errors: * CourseMemberLimitReached * CourseNotModifiable * CourseTeacherLimitReached * UserGroupsMembershipLimitReached * `ALREADY_EXISTS` if the user is already a teacher or student in the course.",
 	//   "httpMethod": "POST",
 	//   "id": "classroom.courses.teachers.create",
 	//   "parameterOrder": [
@@ -2598,7 +2588,7 @@
 	//   ],
 	//   "parameters": {
 	//     "courseId": {
-	//       "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an [alias][google.classroom.v1.CourseAlias].",
+	//       "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -2632,11 +2622,10 @@
 
 // Delete: Deletes a teacher of a course. This method returns the
 // following error codes: * `PERMISSION_DENIED` if the requesting user
-// is not permitted to delete teachers of this course or for [general
-// user permission errors][User Permission Errors]. * `NOT_FOUND` if no
-// teacher of this course has the requested ID or if the course does not
-// exist. * `FAILED_PRECONDITION` if the requested ID belongs to the
-// primary teacher of this course.
+// is not permitted to delete teachers of this course or for access
+// errors. * `NOT_FOUND` if no teacher of this course has the requested
+// ID or if the course does not exist. * `FAILED_PRECONDITION` if the
+// requested ID belongs to the primary teacher of this course.
 func (r *CoursesTeachersService) Delete(courseId string, userId string) *CoursesTeachersDeleteCall {
 	c := &CoursesTeachersDeleteCall{s: r.s, opt_: make(map[string]interface{})}
 	c.courseId = courseId
@@ -2717,7 +2706,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Deletes a teacher of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to delete teachers of this course or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if no teacher of this course has the requested ID or if the course does not exist. * `FAILED_PRECONDITION` if the requested ID belongs to the primary teacher of this course.",
+	//   "description": "Deletes a teacher of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to delete teachers of this course or for access errors. * `NOT_FOUND` if no teacher of this course has the requested ID or if the course does not exist. * `FAILED_PRECONDITION` if the requested ID belongs to the primary teacher of this course.",
 	//   "httpMethod": "DELETE",
 	//   "id": "classroom.courses.teachers.delete",
 	//   "parameterOrder": [
@@ -2726,7 +2715,7 @@
 	//   ],
 	//   "parameters": {
 	//     "courseId": {
-	//       "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an [alias][google.classroom.v1.CourseAlias].",
+	//       "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -2761,10 +2750,9 @@
 
 // Get: Returns a teacher of a course. This method returns the following
 // error codes: * `PERMISSION_DENIED` if the requesting user is not
-// permitted to view teachers of this course or for [general user
-// permission errors][User Permission Errors]. * `NOT_FOUND` if no
-// teacher of this course has the requested ID or if the course does not
-// exist.
+// permitted to view teachers of this course or for access errors. *
+// `NOT_FOUND` if no teacher of this course has the requested ID or if
+// the course does not exist.
 func (r *CoursesTeachersService) Get(courseId string, userId string) *CoursesTeachersGetCall {
 	c := &CoursesTeachersGetCall{s: r.s, opt_: make(map[string]interface{})}
 	c.courseId = courseId
@@ -2858,7 +2846,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Returns a teacher of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to view teachers of this course or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if no teacher of this course has the requested ID or if the course does not exist.",
+	//   "description": "Returns a teacher of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to view teachers of this course or for access errors. * `NOT_FOUND` if no teacher of this course has the requested ID or if the course does not exist.",
 	//   "httpMethod": "GET",
 	//   "id": "classroom.courses.teachers.get",
 	//   "parameterOrder": [
@@ -2867,7 +2855,7 @@
 	//   ],
 	//   "parameters": {
 	//     "courseId": {
-	//       "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an [alias][google.classroom.v1.CourseAlias].",
+	//       "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -2905,7 +2893,7 @@
 // List: Returns a list of teachers of this course that the requester is
 // permitted to view. This method returns the following error codes: *
 // `NOT_FOUND` if the course does not exist. * `PERMISSION_DENIED` for
-// [general user permission errors][User Permission Errors].
+// access errors.
 func (r *CoursesTeachersService) List(courseId string) *CoursesTeachersListCall {
 	c := &CoursesTeachersListCall{s: r.s, opt_: make(map[string]interface{})}
 	c.courseId = courseId
@@ -2920,13 +2908,10 @@
 	return c
 }
 
-// PageToken sets the optional parameter "pageToken":
-// [nextPageToken][google.classroom.v1.ListTeachersResponse.next_page_tok
-// en] value returned from a previous
-// [list][google.classroom.v1.Users.ListTeachers] call, indicating that
-// the subsequent page of results should be returned. The
-// [list][google.classroom.v1.Users.ListTeachers] request must be
-// otherwise identical to the one that resulted in this token.
+// PageToken sets the optional parameter "pageToken": nextPageToken
+// value returned from a previous list call, indicating that the
+// subsequent page of results should be returned. The list request must
+// be otherwise identical to the one that resulted in this token.
 func (c *CoursesTeachersListCall) PageToken(pageToken string) *CoursesTeachersListCall {
 	c.opt_["pageToken"] = pageToken
 	return c
@@ -3023,7 +3008,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Returns a list of teachers of this course that the requester is permitted to view. This method returns the following error codes: * `NOT_FOUND` if the course does not exist. * `PERMISSION_DENIED` for [general user permission errors][User Permission Errors].",
+	//   "description": "Returns a list of teachers of this course that the requester is permitted to view. This method returns the following error codes: * `NOT_FOUND` if the course does not exist. * `PERMISSION_DENIED` for access errors.",
 	//   "httpMethod": "GET",
 	//   "id": "classroom.courses.teachers.list",
 	//   "parameterOrder": [
@@ -3031,7 +3016,7 @@
 	//   ],
 	//   "parameters": {
 	//     "courseId": {
-	//       "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an [alias][google.classroom.v1.CourseAlias].",
+	//       "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -3043,7 +3028,7 @@
 	//       "type": "integer"
 	//     },
 	//     "pageToken": {
-	//       "description": "[nextPageToken][google.classroom.v1.ListTeachersResponse.next_page_token] value returned from a previous [list][google.classroom.v1.Users.ListTeachers] call, indicating that the subsequent page of results should be returned. The [list][google.classroom.v1.Users.ListTeachers] request must be otherwise identical to the one that resulted in this token.",
+	//       "description": "nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token.",
 	//       "location": "query",
 	//       "type": "string"
 	//     }
@@ -3076,7 +3061,9 @@
 // course. Only the invited user may accept an invitation. This method
 // returns the following error codes: * `PERMISSION_DENIED` if the
 // requesting user is not permitted to accept the requested invitation
-// or for [general user permission errors][User Permission Errors]. *
+// or for access errors. * `FAILED_PRECONDITION` for the following
+// request errors: * CourseMemberLimitReached * CourseNotModifiable *
+// CourseTeacherLimitReached * UserGroupsMembershipLimitReached *
 // `NOT_FOUND` if no invitation exists with the requested ID.
 func (r *InvitationsService) Accept(id string) *InvitationsAcceptCall {
 	c := &InvitationsAcceptCall{s: r.s, opt_: make(map[string]interface{})}
@@ -3156,7 +3143,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Accepts an invitation, removing it and adding the invited user to the teachers or students (as appropriate) of the specified course. Only the invited user may accept an invitation. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to accept the requested invitation or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if no invitation exists with the requested ID.",
+	//   "description": "Accepts an invitation, removing it and adding the invited user to the teachers or students (as appropriate) of the specified course. Only the invited user may accept an invitation. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to accept the requested invitation or for access errors. * `FAILED_PRECONDITION` for the following request errors: * CourseMemberLimitReached * CourseNotModifiable * CourseTeacherLimitReached * UserGroupsMembershipLimitReached * `NOT_FOUND` if no invitation exists with the requested ID.",
 	//   "httpMethod": "POST",
 	//   "id": "classroom.invitations.accept",
 	//   "parameterOrder": [
@@ -3194,12 +3181,11 @@
 // course may exist at a time. Delete and re-create an invitation to
 // make changes. This method returns the following error codes: *
 // `PERMISSION_DENIED` if the requesting user is not permitted to create
-// invitations for this course or for [general user permission
-// errors][User Permission Errors]. * `NOT_FOUND` if the course or the
-// user does not exist. * `FAILED_PRECONDITION` if the requested user's
-// account is disabled or if the user already has this role or a role
-// with greater permissions. * `ALREADY_EXISTS` if an invitation for the
-// specified user and course already exists.
+// invitations for this course or for access errors. * `NOT_FOUND` if
+// the course or the user does not exist. * `FAILED_PRECONDITION` if the
+// requested user's account is disabled or if the user already has this
+// role or a role with greater permissions. * `ALREADY_EXISTS` if an
+// invitation for the specified user and course already exists.
 func (r *InvitationsService) Create(invitation *Invitation) *InvitationsCreateCall {
 	c := &InvitationsCreateCall{s: r.s, opt_: make(map[string]interface{})}
 	c.invitation = invitation
@@ -3282,7 +3268,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Creates an invitation. Only one invitation for a user and course may exist at a time. Delete and re-create an invitation to make changes. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to create invitations for this course or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if the course or the user does not exist. * `FAILED_PRECONDITION` if the requested user's account is disabled or if the user already has this role or a role with greater permissions. * `ALREADY_EXISTS` if an invitation for the specified user and course already exists.",
+	//   "description": "Creates an invitation. Only one invitation for a user and course may exist at a time. Delete and re-create an invitation to make changes. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to create invitations for this course or for access errors. * `NOT_FOUND` if the course or the user does not exist. * `FAILED_PRECONDITION` if the requested user's account is disabled or if the user already has this role or a role with greater permissions. * `ALREADY_EXISTS` if an invitation for the specified user and course already exists.",
 	//   "httpMethod": "POST",
 	//   "id": "classroom.invitations.create",
 	//   "path": "v1/invitations",
@@ -3310,9 +3296,8 @@
 
 // Delete: Deletes an invitation. This method returns the following
 // error codes: * `PERMISSION_DENIED` if the requesting user is not
-// permitted to delete the requested invitation or for [general user
-// permission errors][User Permission Errors]. * `NOT_FOUND` if no
-// invitation exists with the requested ID.
+// permitted to delete the requested invitation or for access errors. *
+// `NOT_FOUND` if no invitation exists with the requested ID.
 func (r *InvitationsService) Delete(id string) *InvitationsDeleteCall {
 	c := &InvitationsDeleteCall{s: r.s, opt_: make(map[string]interface{})}
 	c.id = id
@@ -3391,7 +3376,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Deletes an invitation. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to delete the requested invitation or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if no invitation exists with the requested ID.",
+	//   "description": "Deletes an invitation. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to delete the requested invitation or for access errors. * `NOT_FOUND` if no invitation exists with the requested ID.",
 	//   "httpMethod": "DELETE",
 	//   "id": "classroom.invitations.delete",
 	//   "parameterOrder": [
@@ -3427,9 +3412,8 @@
 
 // Get: Returns an invitation. This method returns the following error
 // codes: * `PERMISSION_DENIED` if the requesting user is not permitted
-// to view the requested invitation or for [general user permission
-// errors][User Permission Errors]. * `NOT_FOUND` if no invitation
-// exists with the requested ID.
+// to view the requested invitation or for access errors. * `NOT_FOUND`
+// if no invitation exists with the requested ID.
 func (r *InvitationsService) Get(id string) *InvitationsGetCall {
 	c := &InvitationsGetCall{s: r.s, opt_: make(map[string]interface{})}
 	c.id = id
@@ -3521,7 +3505,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Returns an invitation. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to view the requested invitation or for [general user permission errors][User Permission Errors]. * `NOT_FOUND` if no invitation exists with the requested ID.",
+	//   "description": "Returns an invitation. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to view the requested invitation or for access errors. * `NOT_FOUND` if no invitation exists with the requested ID.",
 	//   "httpMethod": "GET",
 	//   "id": "classroom.invitations.get",
 	//   "parameterOrder": [
@@ -3559,8 +3543,7 @@
 // permitted to view, restricted to those that match the list request.
 // *Note:* At least one of `user_id` or `course_id` must be supplied.
 // Both fields can be supplied. This method returns the following error
-// codes: * `PERMISSION_DENIED` for [general user permission
-// errors][User Permission Errors].
+// codes: * `PERMISSION_DENIED` for access errors.
 func (r *InvitationsService) List() *InvitationsListCall {
 	c := &InvitationsListCall{s: r.s, opt_: make(map[string]interface{})}
 	return c
@@ -3581,13 +3564,10 @@
 	return c
 }
 
-// PageToken sets the optional parameter "pageToken":
-// [nextPageToken][google.classroom.v1.ListInvitationsResponse.next_page_
-// token] value returned from a previous
-// [list][google.classroom.v1.Invitations.ListInvitations] call,
-// indicating that the subsequent page of results should be returned.
-// The [list][google.classroom.v1.Invitations.ListInvitations] request
-// must be otherwise identical to the one that resulted in this token.
+// PageToken sets the optional parameter "pageToken": nextPageToken
+// value returned from a previous list call, indicating that the
+// subsequent page of results should be returned. The list request must
+// be otherwise identical to the one that resulted in this token.
 func (c *InvitationsListCall) PageToken(pageToken string) *InvitationsListCall {
 	c.opt_["pageToken"] = pageToken
 	return c
@@ -3698,7 +3678,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Returns a list of invitations that the requesting user is permitted to view, restricted to those that match the list request. *Note:* At least one of `user_id` or `course_id` must be supplied. Both fields can be supplied. This method returns the following error codes: * `PERMISSION_DENIED` for [general user permission errors][User Permission Errors].",
+	//   "description": "Returns a list of invitations that the requesting user is permitted to view, restricted to those that match the list request. *Note:* At least one of `user_id` or `course_id` must be supplied. Both fields can be supplied. This method returns the following error codes: * `PERMISSION_DENIED` for access errors.",
 	//   "httpMethod": "GET",
 	//   "id": "classroom.invitations.list",
 	//   "parameters": {
@@ -3714,7 +3694,7 @@
 	//       "type": "integer"
 	//     },
 	//     "pageToken": {
-	//       "description": "[nextPageToken][google.classroom.v1.ListInvitationsResponse.next_page_token] value returned from a previous [list][google.classroom.v1.Invitations.ListInvitations] call, indicating that the subsequent page of results should be returned. The [list][google.classroom.v1.Invitations.ListInvitations] request must be otherwise identical to the one that resulted in this token.",
+	//       "description": "nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
@@ -3748,8 +3728,7 @@
 // Get: Returns a user profile. This method returns the following error
 // codes: * `PERMISSION_DENIED` if the requesting user is not permitted
 // to access this user profile or if no profile exists with the
-// requested ID or for [general user permission errors][User Permission
-// Errors].
+// requested ID or for access errors.
 func (r *UserProfilesService) Get(userId string) *UserProfilesGetCall {
 	c := &UserProfilesGetCall{s: r.s, opt_: make(map[string]interface{})}
 	c.userId = userId
@@ -3841,7 +3820,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Returns a user profile. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access this user profile or if no profile exists with the requested ID or for [general user permission errors][User Permission Errors].",
+	//   "description": "Returns a user profile. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access this user profile or if no profile exists with the requested ID or for access errors.",
 	//   "httpMethod": "GET",
 	//   "id": "classroom.userProfiles.get",
 	//   "parameterOrder": [
diff --git a/cloudbilling/v1/cloudbilling-gen.go b/cloudbilling/v1/cloudbilling-gen.go
index 1312810..475c3d5 100644
--- a/cloudbilling/v1/cloudbilling-gen.go
+++ b/cloudbilling/v1/cloudbilling-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "cloudbilling:v1"
 const apiName = "cloudbilling"
diff --git a/clouddebugger/v2/clouddebugger-gen.go b/clouddebugger/v2/clouddebugger-gen.go
index 66cad29..23d0639 100644
--- a/clouddebugger/v2/clouddebugger-gen.go
+++ b/clouddebugger/v2/clouddebugger-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "clouddebugger:v2"
 const apiName = "clouddebugger"
diff --git a/cloudlatencytest/v2/cloudlatencytest-gen.go b/cloudlatencytest/v2/cloudlatencytest-gen.go
index 10157fe..7f1efde 100644
--- a/cloudlatencytest/v2/cloudlatencytest-gen.go
+++ b/cloudlatencytest/v2/cloudlatencytest-gen.go
@@ -35,6 +35,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "cloudlatencytest:v2"
 const apiName = "cloudlatencytest"
diff --git a/cloudmonitoring/v2beta2/cloudmonitoring-gen.go b/cloudmonitoring/v2beta2/cloudmonitoring-gen.go
index 55b495b..5cfbeea 100644
--- a/cloudmonitoring/v2beta2/cloudmonitoring-gen.go
+++ b/cloudmonitoring/v2beta2/cloudmonitoring-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "cloudmonitoring:v2beta2"
 const apiName = "cloudmonitoring"
diff --git a/cloudresourcemanager/v1beta1/cloudresourcemanager-gen.go b/cloudresourcemanager/v1beta1/cloudresourcemanager-gen.go
index 98db92a..756d0b4 100644
--- a/cloudresourcemanager/v1beta1/cloudresourcemanager-gen.go
+++ b/cloudresourcemanager/v1beta1/cloudresourcemanager-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "cloudresourcemanager:v1beta1"
 const apiName = "cloudresourcemanager"
diff --git a/cloudtrace/v1/cloudtrace-api.json b/cloudtrace/v1/cloudtrace-api.json
new file mode 100644
index 0000000..a2ad026
--- /dev/null
+++ b/cloudtrace/v1/cloudtrace-api.json
@@ -0,0 +1,385 @@
+{
+ "kind": "discovery#restDescription",
+ "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/aRfd7FZnMyWmSYyC0t8ruQh7iCI\"",
+ "discoveryVersion": "v1",
+ "id": "cloudtrace:v1",
+ "name": "cloudtrace",
+ "version": "v1",
+ "revision": "20150825",
+ "title": "Google Cloud Trace API",
+ "description": "The Google Cloud Trace API provides services for reading and writing runtime trace data for Cloud applications.",
+ "ownerDomain": "google.com",
+ "ownerName": "Google",
+ "icons": {
+  "x16": "http://www.google.com/images/icons/product/search-16.gif",
+  "x32": "http://www.google.com/images/icons/product/search-32.gif"
+ },
+ "documentationLink": "https://cloud.google.com/tools/cloud-trace",
+ "protocol": "rest",
+ "baseUrl": "https://cloudtrace.googleapis.com/",
+ "basePath": "/",
+ "rootUrl": "https://cloudtrace.googleapis.com/",
+ "servicePath": "",
+ "batchPath": "batch",
+ "parameters": {
+  "access_token": {
+   "type": "string",
+   "description": "OAuth access token.",
+   "location": "query"
+  },
+  "alt": {
+   "type": "string",
+   "description": "Data format for response.",
+   "default": "json",
+   "enumDescriptions": [
+    "Responses with Content-Type of application/json",
+    "Media download with context-dependent Content-Type",
+    "Responses with Content-Type of application/x-protobuf"
+   ],
+   "location": "query"
+  },
+  "bearer_token": {
+   "type": "string",
+   "description": "OAuth bearer token.",
+   "location": "query"
+  },
+  "callback": {
+   "type": "string",
+   "description": "JSONP",
+   "location": "query"
+  },
+  "fields": {
+   "type": "string",
+   "description": "Selector specifying which fields to include in a partial response.",
+   "location": "query"
+  },
+  "key": {
+   "type": "string",
+   "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+   "location": "query"
+  },
+  "oauth_token": {
+   "type": "string",
+   "description": "OAuth 2.0 token for the current user.",
+   "location": "query"
+  },
+  "pp": {
+   "type": "boolean",
+   "description": "Pretty-print response.",
+   "default": "true",
+   "location": "query"
+  },
+  "prettyPrint": {
+   "type": "boolean",
+   "description": "Returns response with indentations and line breaks.",
+   "default": "true",
+   "location": "query"
+  },
+  "quotaUser": {
+   "type": "string",
+   "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+   "location": "query"
+  },
+  "upload_protocol": {
+   "type": "string",
+   "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+   "location": "query"
+  },
+  "uploadType": {
+   "type": "string",
+   "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+   "location": "query"
+  },
+  "$.xgafv": {
+   "type": "string",
+   "description": "V1 error format.",
+   "enumDescriptions": [
+    "v1 error format",
+    "v2 error format"
+   ],
+   "location": "query"
+  }
+ },
+ "auth": {
+  "oauth2": {
+   "scopes": {
+    "https://www.googleapis.com/auth/cloud-platform": {
+     "description": "View and manage your data across Google Cloud Platform services"
+    }
+   }
+  }
+ },
+ "schemas": {
+  "ListTracesResponse": {
+   "id": "ListTracesResponse",
+   "type": "object",
+   "description": "The response message for the ListTraces method.",
+   "properties": {
+    "traces": {
+     "type": "array",
+     "description": "The list of trace records returned.",
+     "items": {
+      "$ref": "Trace"
+     }
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "If defined, indicates that there are more topics that match the request, and this value should be passed to the next ListTopicsRequest to continue."
+    }
+   }
+  },
+  "Trace": {
+   "id": "Trace",
+   "type": "object",
+   "description": "A Trace is a collection of spans describing the execution timings of a single operation.",
+   "properties": {
+    "projectId": {
+     "type": "string",
+     "description": "The Project ID of the Google Cloud project."
+    },
+    "traceId": {
+     "type": "string",
+     "description": "A 128-bit numeric value, formatted as a 32-byte hex string, that represents a trace. Each trace should have an identifier that is globally unique."
+    },
+    "spans": {
+     "type": "array",
+     "description": "The collection of span records within this trace. Spans that appear in calls to PatchTraces may be incomplete or partial.",
+     "items": {
+      "$ref": "TraceSpan"
+     }
+    }
+   }
+  },
+  "TraceSpan": {
+   "id": "TraceSpan",
+   "type": "object",
+   "description": "A span is the data recorded with a single span.",
+   "properties": {
+    "spanId": {
+     "type": "string",
+     "description": "Identifier of the span within the trace. Each span should have an identifier that is unique per trace.",
+     "format": "uint64"
+    },
+    "kind": {
+     "type": "string",
+     "description": "SpanKind distinguishes spans generated in a particular context. For example, two spans with the same name, one with the kind RPC_CLIENT, and the other with RPC_SERVER can indicate the queueing latency associated with the span.",
+     "enum": [
+      "SPAN_KIND_UNSPECIFIED",
+      "RPC_SERVER",
+      "RPC_CLIENT"
+     ]
+    },
+    "name": {
+     "type": "string",
+     "description": "The name of the trace. This is sanitized and displayed on the UI. This may be a method name or some other per-callsite name. For the same binary and the same call point, it is a good practice to choose a consistent name in order to correlate cross-trace spans."
+    },
+    "startTime": {
+     "type": "string",
+     "description": "The start time of the span in nanoseconds from the UNIX epoch."
+    },
+    "endTime": {
+     "type": "string",
+     "description": "The end time of the span in nanoseconds from the UNIX epoch."
+    },
+    "parentSpanId": {
+     "type": "string",
+     "description": "Identifies the parent of the current span. May be missing. Serialized bytes representation of SpanId.",
+     "format": "uint64"
+    },
+    "labels": {
+     "type": "object",
+     "description": "Annotations via labels.",
+     "additionalProperties": {
+      "type": "string"
+     }
+    }
+   }
+  },
+  "Traces": {
+   "id": "Traces",
+   "type": "object",
+   "description": "A list of traces for the PatchTraces method.",
+   "properties": {
+    "traces": {
+     "type": "array",
+     "description": "A list of traces.",
+     "items": {
+      "$ref": "Trace"
+     }
+    }
+   }
+  },
+  "Empty": {
+   "id": "Empty",
+   "type": "object",
+   "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`."
+  }
+ },
+ "resources": {
+  "projects": {
+   "methods": {
+    "patchTraces": {
+     "id": "cloudtrace.projects.patchTraces",
+     "path": "v1/projects/{projectId}/traces",
+     "httpMethod": "PATCH",
+     "description": "Updates the existing traces specified by PatchTracesRequest and inserts the new traces. Any existing trace or span fields included in an update are overwritten by the update, and any additional fields in an update are merged with the existing trace data.",
+     "parameters": {
+      "projectId": {
+       "type": "string",
+       "description": "The project id of the trace to patch.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "projectId"
+     ],
+     "request": {
+      "$ref": "Traces"
+     },
+     "response": {
+      "$ref": "Empty"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/cloud-platform"
+     ]
+    }
+   },
+   "resources": {
+    "traces": {
+     "methods": {
+      "list": {
+       "id": "cloudtrace.projects.traces.list",
+       "path": "v1/projects/{projectId}/traces",
+       "httpMethod": "GET",
+       "description": "List traces matching the filter expression.",
+       "parameters": {
+        "projectId": {
+         "type": "string",
+         "description": "The stringified-version of the project id.",
+         "required": true,
+         "location": "path"
+        },
+        "view": {
+         "type": "string",
+         "description": "ViewType specifies the projection of the result.",
+         "enum": [
+          "VIEW_TYPE_UNSPECIFIED",
+          "MINIMAL",
+          "ROOTSPAN",
+          "COMPLETE"
+         ],
+         "location": "query"
+        },
+        "pageSize": {
+         "type": "integer",
+         "description": "Maximum number of topics to return. If not specified or \u003c= 0, the implementation will select a reasonable value. The implemenation may always return fewer than the requested page_size.",
+         "format": "int32",
+         "location": "query"
+        },
+        "pageToken": {
+         "type": "string",
+         "description": "The token identifying the page of results to return from the ListTraces method. If present, this value is should be taken from the next_page_token field of a previous ListTracesResponse.",
+         "location": "query"
+        },
+        "startTime": {
+         "type": "string",
+         "description": "End of the time interval (inclusive).",
+         "location": "query"
+        },
+        "endTime": {
+         "type": "string",
+         "description": "Start of the time interval (exclusive).",
+         "location": "query"
+        },
+        "filter": {
+         "type": "string",
+         "description": "An optional filter for the request.",
+         "location": "query"
+        },
+        "orderBy": {
+         "type": "string",
+         "description": "The trace field used to establish the order of traces returned by the ListTraces method. Possible options are: trace_id name (name field of root span) duration (different between end_time and start_time fields of root span) start (start_time field of root span) Descending order can be specified by appending \"desc\" to the sort field: name desc Only one sort field is permitted, though this may change in the future.",
+         "location": "query"
+        }
+       },
+       "parameterOrder": [
+        "projectId"
+       ],
+       "response": {
+        "$ref": "ListTracesResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/cloud-platform"
+       ]
+      },
+      "get": {
+       "id": "cloudtrace.projects.traces.get",
+       "path": "v1/projects/{projectId}/traces/{traceId}",
+       "httpMethod": "GET",
+       "description": "Gets one trace by id.",
+       "parameters": {
+        "projectId": {
+         "type": "string",
+         "description": "The project id of the trace to return.",
+         "required": true,
+         "location": "path"
+        },
+        "traceId": {
+         "type": "string",
+         "description": "The trace id of the trace to return.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "projectId",
+        "traceId"
+       ],
+       "response": {
+        "$ref": "Trace"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/cloud-platform"
+       ]
+      }
+     }
+    }
+   }
+  },
+  "v1": {
+   "methods": {
+    "getDiscovery": {
+     "id": "cloudtrace.getDiscovery",
+     "path": "v1/discovery",
+     "httpMethod": "GET",
+     "description": "Returns a discovery document in the specified `format`. The typeurl in the returned google.protobuf.Any value depends on the requested format.",
+     "parameters": {
+      "format": {
+       "type": "string",
+       "description": "The format requested for discovery.",
+       "location": "query"
+      },
+      "labels": {
+       "type": "string",
+       "description": "A list of labels (like visibility) influencing the scope of the requested doc.",
+       "repeated": true,
+       "location": "query"
+      },
+      "version": {
+       "type": "string",
+       "description": "The API version of the requested discovery doc.",
+       "location": "query"
+      },
+      "args": {
+       "type": "string",
+       "description": "Any additional arguments.",
+       "repeated": true,
+       "location": "query"
+      }
+     }
+    }
+   }
+  }
+ }
+}
diff --git a/cloudtrace/v1/cloudtrace-gen.go b/cloudtrace/v1/cloudtrace-gen.go
new file mode 100644
index 0000000..e79c4d5
--- /dev/null
+++ b/cloudtrace/v1/cloudtrace-gen.go
@@ -0,0 +1,919 @@
+// Package cloudtrace provides access to the Google Cloud Trace API.
+//
+// See https://cloud.google.com/tools/cloud-trace
+//
+// Usage example:
+//
+//   import "google.golang.org/api/cloudtrace/v1"
+//   ...
+//   cloudtraceService, err := cloudtrace.New(oauthHttpClient)
+package cloudtrace // import "google.golang.org/api/cloudtrace/v1"
+
+import (
+	"bytes"
+	"encoding/json"
+	"errors"
+	"fmt"
+	"golang.org/x/net/context"
+	"golang.org/x/net/context/ctxhttp"
+	"google.golang.org/api/googleapi"
+	"google.golang.org/api/internal"
+	"io"
+	"net/http"
+	"net/url"
+	"strconv"
+	"strings"
+)
+
+// Always reference these packages, just in case the auto-generated code
+// below doesn't.
+var _ = bytes.NewBuffer
+var _ = strconv.Itoa
+var _ = fmt.Sprintf
+var _ = json.NewDecoder
+var _ = io.Copy
+var _ = url.Parse
+var _ = googleapi.Version
+var _ = errors.New
+var _ = strings.Replace
+var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
+
+const apiId = "cloudtrace:v1"
+const apiName = "cloudtrace"
+const apiVersion = "v1"
+const basePath = "https://cloudtrace.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)
+	s.V1 = NewV1Service(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
+
+	V1 *V1Service
+}
+
+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.Traces = NewProjectsTracesService(s)
+	return rs
+}
+
+type ProjectsService struct {
+	s *Service
+
+	Traces *ProjectsTracesService
+}
+
+func NewProjectsTracesService(s *Service) *ProjectsTracesService {
+	rs := &ProjectsTracesService{s: s}
+	return rs
+}
+
+type ProjectsTracesService struct {
+	s *Service
+}
+
+func NewV1Service(s *Service) *V1Service {
+	rs := &V1Service{s: s}
+	return rs
+}
+
+type V1Service struct {
+	s *Service
+}
+
+// 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:"-"`
+}
+
+// ListTracesResponse: The response message for the ListTraces method.
+type ListTracesResponse struct {
+	// NextPageToken: If defined, indicates that there are more topics that
+	// match the request, and this value should be passed to the next
+	// ListTopicsRequest to continue.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// Traces: The list of trace records returned.
+	Traces []*Trace `json:"traces,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "NextPageToken") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *ListTracesResponse) MarshalJSON() ([]byte, error) {
+	type noMethod ListTracesResponse
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// Trace: A Trace is a collection of spans describing the execution
+// timings of a single operation.
+type Trace struct {
+	// ProjectId: The Project ID of the Google Cloud project.
+	ProjectId string `json:"projectId,omitempty"`
+
+	// Spans: The collection of span records within this trace. Spans that
+	// appear in calls to PatchTraces may be incomplete or partial.
+	Spans []*TraceSpan `json:"spans,omitempty"`
+
+	// TraceId: A 128-bit numeric value, formatted as a 32-byte hex string,
+	// that represents a trace. Each trace should have an identifier that is
+	// globally unique.
+	TraceId string `json:"traceId,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "ProjectId") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *Trace) MarshalJSON() ([]byte, error) {
+	type noMethod Trace
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// TraceSpan: A span is the data recorded with a single span.
+type TraceSpan struct {
+	// EndTime: The end time of the span in nanoseconds from the UNIX epoch.
+	EndTime string `json:"endTime,omitempty"`
+
+	// Kind: SpanKind distinguishes spans generated in a particular context.
+	// For example, two spans with the same name, one with the kind
+	// RPC_CLIENT, and the other with RPC_SERVER can indicate the queueing
+	// latency associated with the span.
+	//
+	// Possible values:
+	//   "SPAN_KIND_UNSPECIFIED"
+	//   "RPC_SERVER"
+	//   "RPC_CLIENT"
+	Kind string `json:"kind,omitempty"`
+
+	// Labels: Annotations via labels.
+	Labels map[string]string `json:"labels,omitempty"`
+
+	// Name: The name of the trace. This is sanitized and displayed on the
+	// UI. This may be a method name or some other per-callsite name. For
+	// the same binary and the same call point, it is a good practice to
+	// choose a consistent name in order to correlate cross-trace spans.
+	Name string `json:"name,omitempty"`
+
+	// ParentSpanId: Identifies the parent of the current span. May be
+	// missing. Serialized bytes representation of SpanId.
+	ParentSpanId uint64 `json:"parentSpanId,omitempty,string"`
+
+	// SpanId: Identifier of the span within the trace. Each span should
+	// have an identifier that is unique per trace.
+	SpanId uint64 `json:"spanId,omitempty,string"`
+
+	// StartTime: The start time of the span in nanoseconds from the UNIX
+	// epoch.
+	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:"-"`
+}
+
+func (s *TraceSpan) MarshalJSON() ([]byte, error) {
+	type noMethod TraceSpan
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// Traces: A list of traces for the PatchTraces method.
+type Traces struct {
+	// Traces: A list of traces.
+	Traces []*Trace `json:"traces,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Traces") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *Traces) MarshalJSON() ([]byte, error) {
+	type noMethod Traces
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// method id "cloudtrace.projects.patchTraces":
+
+type ProjectsPatchTracesCall struct {
+	s         *Service
+	projectId string
+	traces    *Traces
+	opt_      map[string]interface{}
+	ctx_      context.Context
+}
+
+// PatchTraces: Updates the existing traces specified by
+// PatchTracesRequest and inserts the new traces. Any existing trace or
+// span fields included in an update are overwritten by the update, and
+// any additional fields in an update are merged with the existing trace
+// data.
+func (r *ProjectsService) PatchTraces(projectId string, traces *Traces) *ProjectsPatchTracesCall {
+	c := &ProjectsPatchTracesCall{s: r.s, opt_: make(map[string]interface{})}
+	c.projectId = projectId
+	c.traces = traces
+	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 *ProjectsPatchTracesCall) Fields(s ...googleapi.Field) *ProjectsPatchTracesCall {
+	c.opt_["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 *ProjectsPatchTracesCall) Context(ctx context.Context) *ProjectsPatchTracesCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *ProjectsPatchTracesCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.traces)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/projects/{projectId}/traces")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("PATCH", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"projectId": c.projectId,
+	})
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "cloudtrace.projects.patchTraces" 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 *ProjectsPatchTracesCall) Do() (*Empty, error) {
+	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,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates the existing traces specified by PatchTracesRequest and inserts the new traces. Any existing trace or span fields included in an update are overwritten by the update, and any additional fields in an update are merged with the existing trace data.",
+	//   "httpMethod": "PATCH",
+	//   "id": "cloudtrace.projects.patchTraces",
+	//   "parameterOrder": [
+	//     "projectId"
+	//   ],
+	//   "parameters": {
+	//     "projectId": {
+	//       "description": "The project id of the trace to patch.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/projects/{projectId}/traces",
+	//   "request": {
+	//     "$ref": "Traces"
+	//   },
+	//   "response": {
+	//     "$ref": "Empty"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "cloudtrace.projects.traces.get":
+
+type ProjectsTracesGetCall struct {
+	s         *Service
+	projectId string
+	traceId   string
+	opt_      map[string]interface{}
+	ctx_      context.Context
+}
+
+// Get: Gets one trace by id.
+func (r *ProjectsTracesService) Get(projectId string, traceId string) *ProjectsTracesGetCall {
+	c := &ProjectsTracesGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.projectId = projectId
+	c.traceId = traceId
+	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 *ProjectsTracesGetCall) Fields(s ...googleapi.Field) *ProjectsTracesGetCall {
+	c.opt_["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 *ProjectsTracesGetCall) IfNoneMatch(entityTag string) *ProjectsTracesGetCall {
+	c.opt_["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 *ProjectsTracesGetCall) Context(ctx context.Context) *ProjectsTracesGetCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *ProjectsTracesGetCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/projects/{projectId}/traces/{traceId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"projectId": c.projectId,
+		"traceId":   c.traceId,
+	})
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if v, ok := c.opt_["ifNoneMatch"]; ok {
+		req.Header.Set("If-None-Match", fmt.Sprintf("%v", v))
+	}
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "cloudtrace.projects.traces.get" call.
+// Exactly one of *Trace or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Trace.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 *ProjectsTracesGetCall) Do() (*Trace, error) {
+	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 := &Trace{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets one trace by id.",
+	//   "httpMethod": "GET",
+	//   "id": "cloudtrace.projects.traces.get",
+	//   "parameterOrder": [
+	//     "projectId",
+	//     "traceId"
+	//   ],
+	//   "parameters": {
+	//     "projectId": {
+	//       "description": "The project id of the trace to return.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "traceId": {
+	//       "description": "The trace id of the trace to return.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/projects/{projectId}/traces/{traceId}",
+	//   "response": {
+	//     "$ref": "Trace"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "cloudtrace.projects.traces.list":
+
+type ProjectsTracesListCall struct {
+	s         *Service
+	projectId string
+	opt_      map[string]interface{}
+	ctx_      context.Context
+}
+
+// List: List traces matching the filter expression.
+func (r *ProjectsTracesService) List(projectId string) *ProjectsTracesListCall {
+	c := &ProjectsTracesListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.projectId = projectId
+	return c
+}
+
+// EndTime sets the optional parameter "endTime": Start of the time
+// interval (exclusive).
+func (c *ProjectsTracesListCall) EndTime(endTime string) *ProjectsTracesListCall {
+	c.opt_["endTime"] = endTime
+	return c
+}
+
+// Filter sets the optional parameter "filter": An optional filter for
+// the request.
+func (c *ProjectsTracesListCall) Filter(filter string) *ProjectsTracesListCall {
+	c.opt_["filter"] = filter
+	return c
+}
+
+// OrderBy sets the optional parameter "orderBy": The trace field used
+// to establish the order of traces returned by the ListTraces method.
+// Possible options are: trace_id name (name field of root span)
+// duration (different between end_time and start_time fields of root
+// span) start (start_time field of root span) Descending order can be
+// specified by appending "desc" to the sort field: name desc Only one
+// sort field is permitted, though this may change in the future.
+func (c *ProjectsTracesListCall) OrderBy(orderBy string) *ProjectsTracesListCall {
+	c.opt_["orderBy"] = orderBy
+	return c
+}
+
+// PageSize sets the optional parameter "pageSize": Maximum number of
+// topics to return. If not specified or <= 0, the implementation will
+// select a reasonable value. The implemenation may always return fewer
+// than the requested page_size.
+func (c *ProjectsTracesListCall) PageSize(pageSize int64) *ProjectsTracesListCall {
+	c.opt_["pageSize"] = pageSize
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": The token
+// identifying the page of results to return from the ListTraces method.
+// If present, this value is should be taken from the next_page_token
+// field of a previous ListTracesResponse.
+func (c *ProjectsTracesListCall) PageToken(pageToken string) *ProjectsTracesListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+// StartTime sets the optional parameter "startTime": End of the time
+// interval (inclusive).
+func (c *ProjectsTracesListCall) StartTime(startTime string) *ProjectsTracesListCall {
+	c.opt_["startTime"] = startTime
+	return c
+}
+
+// View sets the optional parameter "view": ViewType specifies the
+// projection of the result.
+//
+// Possible values:
+//   "VIEW_TYPE_UNSPECIFIED"
+//   "MINIMAL"
+//   "ROOTSPAN"
+//   "COMPLETE"
+func (c *ProjectsTracesListCall) View(view string) *ProjectsTracesListCall {
+	c.opt_["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 *ProjectsTracesListCall) Fields(s ...googleapi.Field) *ProjectsTracesListCall {
+	c.opt_["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 *ProjectsTracesListCall) IfNoneMatch(entityTag string) *ProjectsTracesListCall {
+	c.opt_["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 *ProjectsTracesListCall) Context(ctx context.Context) *ProjectsTracesListCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *ProjectsTracesListCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["endTime"]; ok {
+		params.Set("endTime", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["filter"]; ok {
+		params.Set("filter", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["orderBy"]; ok {
+		params.Set("orderBy", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["pageSize"]; ok {
+		params.Set("pageSize", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["pageToken"]; ok {
+		params.Set("pageToken", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["startTime"]; ok {
+		params.Set("startTime", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["view"]; ok {
+		params.Set("view", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/projects/{projectId}/traces")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"projectId": c.projectId,
+	})
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if v, ok := c.opt_["ifNoneMatch"]; ok {
+		req.Header.Set("If-None-Match", fmt.Sprintf("%v", v))
+	}
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "cloudtrace.projects.traces.list" call.
+// Exactly one of *ListTracesResponse or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *ListTracesResponse.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 *ProjectsTracesListCall) Do() (*ListTracesResponse, error) {
+	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 := &ListTracesResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "List traces matching the filter expression.",
+	//   "httpMethod": "GET",
+	//   "id": "cloudtrace.projects.traces.list",
+	//   "parameterOrder": [
+	//     "projectId"
+	//   ],
+	//   "parameters": {
+	//     "endTime": {
+	//       "description": "Start of the time interval (exclusive).",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "filter": {
+	//       "description": "An optional filter for the request.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "orderBy": {
+	//       "description": "The trace field used to establish the order of traces returned by the ListTraces method. Possible options are: trace_id name (name field of root span) duration (different between end_time and start_time fields of root span) start (start_time field of root span) Descending order can be specified by appending \"desc\" to the sort field: name desc Only one sort field is permitted, though this may change in the future.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "pageSize": {
+	//       "description": "Maximum number of topics to return. If not specified or \u003c= 0, the implementation will select a reasonable value. The implemenation may always return fewer than the requested page_size.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "The token identifying the page of results to return from the ListTraces method. If present, this value is should be taken from the next_page_token field of a previous ListTracesResponse.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "projectId": {
+	//       "description": "The stringified-version of the project id.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "startTime": {
+	//       "description": "End of the time interval (inclusive).",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "view": {
+	//       "description": "ViewType specifies the projection of the result.",
+	//       "enum": [
+	//         "VIEW_TYPE_UNSPECIFIED",
+	//         "MINIMAL",
+	//         "ROOTSPAN",
+	//         "COMPLETE"
+	//       ],
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/projects/{projectId}/traces",
+	//   "response": {
+	//     "$ref": "ListTracesResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "cloudtrace.getDiscovery":
+
+type V1GetDiscoveryCall struct {
+	s    *Service
+	opt_ map[string]interface{}
+	ctx_ context.Context
+}
+
+// GetDiscovery: Returns a discovery document in the specified `format`.
+// The typeurl in the returned google.protobuf.Any value depends on the
+// requested format.
+func (r *V1Service) GetDiscovery() *V1GetDiscoveryCall {
+	c := &V1GetDiscoveryCall{s: r.s, opt_: make(map[string]interface{})}
+	return c
+}
+
+// Args sets the optional parameter "args": Any additional arguments.
+func (c *V1GetDiscoveryCall) Args(args string) *V1GetDiscoveryCall {
+	c.opt_["args"] = args
+	return c
+}
+
+// Format sets the optional parameter "format": The format requested for
+// discovery.
+func (c *V1GetDiscoveryCall) Format(format string) *V1GetDiscoveryCall {
+	c.opt_["format"] = format
+	return c
+}
+
+// Labels sets the optional parameter "labels": A list of labels (like
+// visibility) influencing the scope of the requested doc.
+func (c *V1GetDiscoveryCall) Labels(labels string) *V1GetDiscoveryCall {
+	c.opt_["labels"] = labels
+	return c
+}
+
+// Version sets the optional parameter "version": The API version of the
+// requested discovery doc.
+func (c *V1GetDiscoveryCall) Version(version string) *V1GetDiscoveryCall {
+	c.opt_["version"] = version
+	return c
+}
+
+// Fields allows partial responses to be retrieved.
+// See https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *V1GetDiscoveryCall) Fields(s ...googleapi.Field) *V1GetDiscoveryCall {
+	c.opt_["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 *V1GetDiscoveryCall) IfNoneMatch(entityTag string) *V1GetDiscoveryCall {
+	c.opt_["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 *V1GetDiscoveryCall) Context(ctx context.Context) *V1GetDiscoveryCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *V1GetDiscoveryCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["args"]; ok {
+		params.Set("args", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["format"]; ok {
+		params.Set("format", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["labels"]; ok {
+		params.Set("labels", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["version"]; ok {
+		params.Set("version", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/discovery")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if v, ok := c.opt_["ifNoneMatch"]; ok {
+		req.Header.Set("If-None-Match", fmt.Sprintf("%v", v))
+	}
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "cloudtrace.getDiscovery" call.
+func (c *V1GetDiscoveryCall) Do() error {
+	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": "Returns a discovery document in the specified `format`. The typeurl in the returned google.protobuf.Any value depends on the requested format.",
+	//   "httpMethod": "GET",
+	//   "id": "cloudtrace.getDiscovery",
+	//   "parameters": {
+	//     "args": {
+	//       "description": "Any additional arguments.",
+	//       "location": "query",
+	//       "repeated": true,
+	//       "type": "string"
+	//     },
+	//     "format": {
+	//       "description": "The format requested for discovery.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "labels": {
+	//       "description": "A list of labels (like visibility) influencing the scope of the requested doc.",
+	//       "location": "query",
+	//       "repeated": true,
+	//       "type": "string"
+	//     },
+	//     "version": {
+	//       "description": "The API version of the requested discovery doc.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/discovery"
+	// }
+
+}
diff --git a/clouduseraccounts/v0.alpha/clouduseraccounts-gen.go b/clouduseraccounts/v0.alpha/clouduseraccounts-gen.go
index 404bea2..d49b708 100644
--- a/clouduseraccounts/v0.alpha/clouduseraccounts-gen.go
+++ b/clouduseraccounts/v0.alpha/clouduseraccounts-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "clouduseraccounts:alpha"
 const apiName = "clouduseraccounts"
diff --git a/clouduseraccounts/v0.beta/clouduseraccounts-gen.go b/clouduseraccounts/v0.beta/clouduseraccounts-gen.go
index a5f601b..9dd8f88 100644
--- a/clouduseraccounts/v0.beta/clouduseraccounts-gen.go
+++ b/clouduseraccounts/v0.beta/clouduseraccounts-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "clouduseraccounts:beta"
 const apiName = "clouduseraccounts"
diff --git a/clouduseraccounts/vm_alpha/clouduseraccounts-gen.go b/clouduseraccounts/vm_alpha/clouduseraccounts-gen.go
index 6da9a4d..e5e3bec 100644
--- a/clouduseraccounts/vm_alpha/clouduseraccounts-gen.go
+++ b/clouduseraccounts/vm_alpha/clouduseraccounts-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "clouduseraccounts:vm_alpha"
 const apiName = "clouduseraccounts"
diff --git a/clouduseraccounts/vm_beta/clouduseraccounts-gen.go b/clouduseraccounts/vm_beta/clouduseraccounts-gen.go
index a5cebc3..30075b3 100644
--- a/clouduseraccounts/vm_beta/clouduseraccounts-gen.go
+++ b/clouduseraccounts/vm_beta/clouduseraccounts-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "clouduseraccounts:vm_beta"
 const apiName = "clouduseraccounts"
diff --git a/compute/v0.beta/compute-api.json b/compute/v0.beta/compute-api.json
index 01e876e..4a803f0 100644
--- a/compute/v0.beta/compute-api.json
+++ b/compute/v0.beta/compute-api.json
@@ -1,11 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/oe_uAbNFvATEqqDNaTW9Cv7GCgo\"",
+ "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/53Hy10U_as1pSFK_KirJ2eQZmGA\"",
  "discoveryVersion": "v1",
  "id": "compute:beta",
  "name": "compute",
  "version": "beta",
- "revision": "20150831",
+ "revision": "20151015",
  "title": "Compute Engine API",
  "description": "API for the Google Compute Engine service.",
  "ownerDomain": "google.com",
@@ -358,6 +358,7 @@
     },
     "interface": {
      "type": "string",
+     "description": "Specifies the disk interface to use for attaching this disk, either SCSI or NVME. The default is SCSI. For performance characteristics of SCSI over NVMe, see Local SSD performance.",
      "enum": [
       "NVME",
       "SCSI"
@@ -1581,7 +1582,7 @@
     },
     "kind": {
      "type": "string",
-     "description": "Type of the resource.",
+     "description": "[Output Only] Type of the resource. Always compute#forwardingRule.",
      "default": "compute#forwardingRule"
     },
     "name": {
@@ -1591,7 +1592,7 @@
     },
     "portRange": {
      "type": "string",
-     "description": "Applicable only when `IPProtocol` is TCP, UDP, or SCTP, only packets addressed to ports in the specified range will be forwarded to target. If portRange is left empty (default value), all ports are forwarded. Forwarding rules with the same `[IPAddress, IPProtocol]` pair must have disjoint port ranges."
+     "description": "Applicable only when IPProtocol is TCP, UDP, or SCTP, only packets addressed to ports in the specified range will be forwarded to target. Forwarding rules with the same `[IPAddress, IPProtocol]` pair must have disjoint port ranges."
     },
     "region": {
      "type": "string",
@@ -1796,14 +1797,14 @@
     },
     "hosts": {
      "type": "array",
-     "description": "The list of host patterns to match. They must be valid hostnames except that they may start with *. or *-. The * acts like a glob and will match any string of atoms (separated by .s and -s) to the left.",
+     "description": "The list of host patterns to match. They must be valid hostnames, except * will match any string of ([a-z0-9-.]*). In that case, * must be the first character and must be followed in the pattern by either - or ..",
      "items": {
       "type": "string"
      }
     },
     "pathMatcher": {
      "type": "string",
-     "description": "The name of the PathMatcher to match the path portion of the URL, if the this hostRule matches the URL's host portion."
+     "description": "The name of the PathMatcher to use to match the path portion of the URL if the hostRule matches the URL's host portion."
     }
    }
   },
@@ -2145,7 +2146,7 @@
     },
     "items": {
      "type": "array",
-     "description": "A list of Image resources.",
+     "description": "[Output Only] A list of Image resources.",
      "items": {
       "$ref": "Image"
      }
@@ -2203,6 +2204,18 @@
      "description": "[Output Only] Type of the resource. Always compute#instance for instances.",
      "default": "compute#instance"
     },
+    "labelFingerprint": {
+     "type": "string",
+     "description": "A fingerprint for this request, which is essentially a hash of the metadata's contents and used for optimistic locking. The fingerprint is initially generated by Compute Engine and changes after every request to modify or update metadata. You must always provide an up-to-date fingerprint hash in order to update or change metadata.\n\nTo see the latest fingerprint, make get() request to the instance.",
+     "format": "byte"
+    },
+    "labels": {
+     "type": "object",
+     "description": "Labels to apply to this instance. These can be later modified by the setLabels method. Each label key & value must comply with RFC1035. Label values may be empty.",
+     "additionalProperties": {
+      "type": "string"
+     }
+    },
     "machineType": {
      "type": "string",
      "description": "Full or partial URL of the machine type resource to use for this instance. This is provided by the client when the instance is created. For example, the following is a valid partial url:\n\nzones/zone/machineTypes/machine-type",
@@ -2325,12 +2338,12 @@
     },
     "fingerprint": {
      "type": "string",
-     "description": "[Output Only] The fingerprint of the named ports information. The system uses this fingerprint to detect conflicts when multiple users change the named ports information concurrently.",
+     "description": "[Output Only] The fingerprint of the named ports. The system uses this fingerprint to detect conflicts when multiple users change the named ports concurrently.",
      "format": "byte"
     },
     "id": {
      "type": "string",
-     "description": "[Output Only] A unique identifier for this instance group. The server defines this identifier.",
+     "description": "[Output Only] A unique identifier for this resource type. The server generates this identifier.",
      "format": "uint64"
     },
     "kind": {
@@ -2350,18 +2363,18 @@
     },
     "namedPorts": {
      "type": "array",
-     "description": "Assigns a name to a port number. For example: {name: ?http?, port: 80} This allows the system to reference ports by the assigned name instead of a port number. Named ports can also contain multiple ports. For example: [{name: ?http?, port: 80},{name: \"http\", port: 8080}] Named ports apply to all instances in this instance group.",
+     "description": "Assigns a name to a port number. For example: {name: \"http\", port: 80}\n\nThis allows the system to reference ports by the assigned name instead of a port number. Named ports can also contain multiple ports. For example: [{name: \"http\", port: 80},{name: \"http\", port: 8080}] \n\nNamed ports apply to all instances in this instance group.",
      "items": {
       "$ref": "NamedPort"
      }
     },
     "network": {
      "type": "string",
-     "description": "The URL of the network to which all instances in the instance group belong."
+     "description": "[Output Only] The URL of the network to which all instances in the instance group belong."
     },
     "selfLink": {
      "type": "string",
-     "description": "[Output Only] The URL for this instance group. The server defines this URL."
+     "description": "[Output Only] The URL for this instance group. The server generates this URL."
     },
     "size": {
      "type": "integer",
@@ -2370,7 +2383,7 @@
     },
     "zone": {
      "type": "string",
-     "description": "The URL of the zone where the instance group is located."
+     "description": "[Output Only] The URL of the zone where the instance group is located."
     }
    }
   },
@@ -2380,7 +2393,7 @@
    "properties": {
     "id": {
      "type": "string",
-     "description": "[Output Only] A unique identifier for this aggregated list of instance groups. The server defines this identifier."
+     "description": "[Output Only] A unique identifier for this aggregated list of instance groups. The server generates this identifier."
     },
     "items": {
      "type": "object",
@@ -2401,7 +2414,7 @@
     },
     "selfLink": {
      "type": "string",
-     "description": "[Output Only] A unique identifier for this aggregated list of instance groups. The server defines this identifier."
+     "description": "[Output Only] The URL for this resource type. The server generates this URL."
     }
    }
   },
@@ -2412,11 +2425,11 @@
    "properties": {
     "id": {
      "type": "string",
-     "description": "[Output Only] A unique identifier for this list of instance groups. The server defines this identifier."
+     "description": "[Output Only] A unique identifier for this list of instance groups. The server generates this identifier."
     },
     "items": {
      "type": "array",
-     "description": "A list of InstanceGroup resources.",
+     "description": "A list of instance groups.",
      "items": {
       "$ref": "InstanceGroup"
      }
@@ -2432,7 +2445,7 @@
     },
     "selfLink": {
      "type": "string",
-     "description": "[Output Only] The URL for this instance group. The server defines this URL."
+     "description": "[Output Only] The URL for this resource type. The server generates this URL."
     }
    }
   },
@@ -2464,7 +2477,7 @@
     },
     "currentActions": {
      "$ref": "InstanceGroupManagerActionsSummary",
-     "description": "[Output Only] The list of instance actions and the number of instances in this managed instance group that are scheduled for those actions."
+     "description": "[Output Only] The list of instance actions and the number of instances in this managed instance group that are scheduled for each of those actions."
     },
     "description": {
      "type": "string",
@@ -2472,17 +2485,17 @@
     },
     "fingerprint": {
      "type": "string",
-     "description": "[Output Only] The fingerprint of the target pools information, which is a hash of the contents. This field is used for optimistic locking when updating the target pool entries.",
+     "description": "[Output Only] The fingerprint of the target pools information. You can use this optional field for optimistic locking when you update the target pool entries.",
      "format": "byte"
     },
     "id": {
      "type": "string",
-     "description": "[Output Only] A unique identifier for this managed instance group. The server defines this identifier.",
+     "description": "[Output Only] A unique identifier for this resource type. The server generates this identifier.",
      "format": "uint64"
     },
     "instanceGroup": {
      "type": "string",
-     "description": "[Output Only] The URL of the InstanceGroup resource."
+     "description": "[Output Only] The URL of the Instance Group resource."
     },
     "instanceTemplate": {
      "type": "string",
@@ -2510,11 +2523,11 @@
     },
     "selfLink": {
      "type": "string",
-     "description": "[Output Only] Server-defined URL for this managed instance group."
+     "description": "[Output Only] The URL for this managed instance group. The server defines this URL."
     },
     "targetPools": {
      "type": "array",
-     "description": "The URLs of all TargetPool resources to which new instances in the instanceGroup field are added. Updating the target pool values does not affect existing instances.",
+     "description": "The URLs for all TargetPool resources to which instances in the instanceGroup field are added. The target pools automatically apply to all of the instances in the managed instance group.",
      "items": {
       "type": "string"
      }
@@ -2531,7 +2544,7 @@
     },
     "zone": {
      "type": "string",
-     "description": "The URL of the zone where the managed instance group is located."
+     "description": "The name of the zone where the managed instance group is located."
     }
    }
   },
@@ -2541,7 +2554,7 @@
    "properties": {
     "abandoning": {
      "type": "integer",
-     "description": "[Output Only] Total number of instances in the managed instance group that are scheduled to be abandoned. Abandoning an instance removes it from the managed instance group without deleting it.",
+     "description": "[Output Only] The total number of instances in the managed instance group that are scheduled to be abandoned. Abandoning an instance removes it from the managed instance group without deleting it.",
      "format": "int32"
     },
     "creating": {
@@ -2556,7 +2569,7 @@
     },
     "none": {
      "type": "integer",
-     "description": "[Output Only] The number of instances in the managed instance group that currently have no scheduled actions.",
+     "description": "[Output Only] The number of instances in the managed instance group that are running and have no scheduled actions.",
      "format": "int32"
     },
     "recreating": {
@@ -2582,19 +2595,19 @@
    "properties": {
     "id": {
      "type": "string",
-     "description": "[Output Only] A unique identifier for this aggregated list of managed instance groups. The server defines this identifier."
+     "description": "[Output Only] A unique identifier for this aggregated list of managed instance groups. The server generates this identifier."
     },
     "items": {
      "type": "object",
-     "description": "A map of filtered managed instance group lists.",
+     "description": "[Output Only] A map of filtered managed instance group lists.",
      "additionalProperties": {
       "$ref": "InstanceGroupManagersScopedList",
-      "description": "The name of the scope that contains this set of managed instance groups."
+      "description": "[Output Only] The name of the scope that contains this set of managed instance groups."
      }
     },
     "kind": {
      "type": "string",
-     "description": "[Output Only] Type of the resource. Always compute#instanceGroupManagerAggregatedList for an aggregated list of managed instance groups.",
+     "description": "[Output Only] The resource type, which is always compute#instanceGroupManagerAggregatedList for an aggregated list of managed instance groups.",
      "default": "compute#instanceGroupManagerAggregatedList"
     },
     "nextPageToken": {
@@ -2603,7 +2616,7 @@
     },
     "selfLink": {
      "type": "string",
-     "description": "[Output Only] The URL for this aggregated list of managed instance groups. The server defines this URL."
+     "description": "[Output Only] The URL for this resource type. The server generates this URL."
     }
    }
   },
@@ -2613,7 +2626,7 @@
    "properties": {
     "actionType": {
      "type": "string",
-     "description": "The action to perform when an instance becomes unhealthy. Possible values are RECREATE or RESTART. RECREATE replaces an unhealthy instance with a new instance that is based on the instance template for this managed instance group. RESTART performs a soft restart on an instance. If the instance cannot restart softly, the instance performs a hard restart.",
+     "description": "The action to perform when an instance in this group becomes unhealthy. Possible values are RECREATE or RESTART. RECREATE replaces an unhealthy instance using the same name and instance template as the unhealthy instance. RESTART performs a soft restart on an instance. If the instance cannot reboot, the instance performs a hard restart.",
      "enum": [
       "RECREATE",
       "RESTART"
@@ -2632,22 +2645,22 @@
   "InstanceGroupManagerList": {
    "id": "InstanceGroupManagerList",
    "type": "object",
-   "description": "[Output Only] A list of InstanceGroupManager resources.",
+   "description": "[Output Only] A list of managed instance groups.",
    "properties": {
     "id": {
      "type": "string",
-     "description": "[Output Only] A unique identifier for this managed instance group. The server defines this identifier."
+     "description": "[Output Only] A unique identifier for this resource type. The server generates this identifier."
     },
     "items": {
      "type": "array",
-     "description": "[Output Only] A list of managed instance group resources.",
+     "description": "[Output Only] A list of managed instance groups.",
      "items": {
       "$ref": "InstanceGroupManager"
      }
     },
     "kind": {
      "type": "string",
-     "description": "[Output Only] Type of the resource. Always compute#instanceGroupManagerList for a list of managed instance group resources.",
+     "description": "[Output Only] The resource type, which is always compute#instanceGroupManagerList for a list of managed instance groups.",
      "default": "compute#instanceGroupManagerList"
     },
     "nextPageToken": {
@@ -2656,7 +2669,7 @@
     },
     "selfLink": {
      "type": "string",
-     "description": "[Output Only] The URL for this managed instance group. The server defines this URL."
+     "description": "[Output Only] The URL for this resource type. The server generates this URL."
     }
    }
   },
@@ -2666,7 +2679,7 @@
    "properties": {
     "instances": {
      "type": "array",
-     "description": "The names of instances to abandon from the managed instance group.",
+     "description": "The URL for one or more instances to abandon from the managed instance group.",
      "items": {
       "type": "string"
      }
@@ -2679,7 +2692,7 @@
    "properties": {
     "instances": {
      "type": "array",
-     "description": "The names of one or more instances to delete.",
+     "description": "The list of instances to delete from this managed instance group. Specify one or more instance URLs.",
      "items": {
       "type": "string"
      }
@@ -2692,7 +2705,7 @@
    "properties": {
     "managedInstances": {
      "type": "array",
-     "description": "List of managed instances. If empty - all instances are listed.",
+     "description": "[Output Only] The list of instances in the managed instance group.",
      "items": {
       "$ref": "ManagedInstance"
      }
@@ -2705,7 +2718,7 @@
    "properties": {
     "instances": {
      "type": "array",
-     "description": "The names of one or more instances to recreate.",
+     "description": "The URL for one or more instances to recreate.",
      "items": {
       "type": "string"
      }
@@ -2816,12 +2829,12 @@
    "properties": {
     "fingerprint": {
      "type": "string",
-     "description": "The fingerprint of the target pools information, which is a hash of the contents. This field is used for optimistic locking when updating the target pool entries.",
+     "description": "The fingerprint of the target pools information. Use this optional property to prevent conflicts when multiple users change the target pools settings concurrently. Obtain the fingerprint with the instanceGroupManagers.get method. Then, include the fingerprint in your request to ensure that you do not overwrite changes that were applied from another concurrent request.",
      "format": "byte"
     },
     "targetPools": {
      "type": "array",
-     "description": "The list of target pool URLs that instances in this managed instance group belong to. When the managed instance group creates new instances, the group automatically adds those instances to the target pools that are specified in this parameter. Changing the value of this parameter does not change the target pools of existing instances in this managed instance group.",
+     "description": "The list of target pool URLs that instances in this managed instance group belong to. The managed instance group applies these target pools to all of the instances in the group. Existing instances and new instances in the group all receive these target pool settings.",
      "items": {
       "type": "string"
      }
@@ -2834,7 +2847,7 @@
    "properties": {
     "instances": {
      "type": "array",
-     "description": "The instances to add to the instance group.",
+     "description": "The list of instances to add to the instance group.",
      "items": {
       "$ref": "InstanceReference"
      }
@@ -2847,11 +2860,11 @@
    "properties": {
     "id": {
      "type": "string",
-     "description": "[Output Only] A unique identifier for this list of instance groups. The server defines this identifier."
+     "description": "[Output Only] A unique identifier for this list of instance groups. The server generates this identifier."
     },
     "items": {
      "type": "array",
-     "description": "A list of InstanceWithNamedPorts resources, which contains all named ports for the given instance.",
+     "description": "[Output Only] A list of instances and any named ports that are assigned to those instances.",
      "items": {
       "$ref": "InstanceWithNamedPorts"
      }
@@ -2867,7 +2880,7 @@
     },
     "selfLink": {
      "type": "string",
-     "description": "[Output Only] The URL for this list of instance groups. The server defines this URL."
+     "description": "[Output Only] The URL for this list of instance groups. The server generates this URL."
     }
    }
   },
@@ -2895,7 +2908,7 @@
    "properties": {
     "instances": {
      "type": "array",
-     "description": "The instances to remove from the instance group.",
+     "description": "The list of instances to remove from the instance group.",
      "items": {
       "$ref": "InstanceReference"
      }
@@ -2984,7 +2997,7 @@
    "properties": {
     "fingerprint": {
      "type": "string",
-     "description": "The fingerprint of the named ports information, which is a hash of the contents. Use this field for optimistic locking when you update the named ports entries.",
+     "description": "The fingerprint of the named ports information for this instance group. Use this optional property to prevent conflicts when multiple users change the named ports settings concurrently. Obtain the fingerprint with the instanceGroups.get method. Then, include the fingerprint in your request to ensure that you do not overwrite changes that were applied from another concurrent request.",
      "format": "byte"
     },
     "namedPorts": {
@@ -3034,7 +3047,7 @@
    "properties": {
     "canIpForward": {
      "type": "boolean",
-     "description": "A boolean that specifies if instances created from this template can send packets with source IP addresses other than their own or receive packets with destination IP addresses other than their own. If you use these instances as an IP gateway or as the next-hop in a Route resource, specify true. Otherwise, specify false."
+     "description": "Enables instances created based on this template to send packets with source IP addresses other than their own and receive packets with destination IP addresses other than their own. If these instances will be used as an IP gateway or it will be set as the next-hop in a Route resource, specify true. If unsure, leave this set to false. See the canIpForward documentation for more information."
     },
     "description": {
      "type": "string",
@@ -3062,14 +3075,14 @@
     },
     "networkInterfaces": {
      "type": "array",
-     "description": "An array of network access configurations for this interface. This specifies how this interface is configured to interact with other network services, such as connecting to the internet. Currently, ONE_TO_ONE_NAT is the only supported access configuration. If you do not specify any access configurations, the instances that are created from this template will have no external internet access.",
+     "description": "An array of network access configurations for this interface.",
      "items": {
       "$ref": "NetworkInterface"
      }
     },
     "scheduling": {
      "$ref": "Scheduling",
-     "description": "A list of scheduling options for the instances that are created from this template."
+     "description": "Specifies the scheduling options for the instances that are created from this template."
     },
     "serviceAccounts": {
      "type": "array",
@@ -3089,7 +3102,8 @@
    "type": "object",
    "properties": {
     "instance": {
-     "type": "string"
+     "type": "string",
+     "description": "The URL for a specific instance."
     }
    }
   },
@@ -3118,7 +3132,7 @@
     },
     "name": {
      "type": "string",
-     "description": "The name of the instance template. The name must be 1-63 characters long, and comply with RFC1035.",
+     "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.",
      "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
      "annotations": {
       "required": [
@@ -3128,7 +3142,7 @@
     },
     "properties": {
      "$ref": "InstanceProperties",
-     "description": "The instance properties for the instance template resource."
+     "description": "The instance properties for this instance template."
     },
     "selfLink": {
      "type": "string",
@@ -3147,7 +3161,7 @@
     },
     "items": {
      "type": "array",
-     "description": "A list of InstanceTemplate resources.",
+     "description": "[Output Only] list of InstanceTemplate resources.",
      "items": {
       "$ref": "InstanceTemplate"
      }
@@ -3173,18 +3187,18 @@
    "properties": {
     "instance": {
      "type": "string",
-     "description": "The URL of the instance."
+     "description": "[Output Only] The URL of the instance."
     },
     "namedPorts": {
      "type": "array",
-     "description": "The named ports that belong to this instance group.",
+     "description": "[Output Only] The named ports that belong to this instance group.",
      "items": {
       "$ref": "NamedPort"
      }
     },
     "status": {
      "type": "string",
-     "description": "The status of the instance.",
+     "description": "[Output Only] The status of the instance.",
      "enum": [
       "PROVISIONING",
       "RUNNING",
@@ -3284,6 +3298,32 @@
     }
    }
   },
+  "InstancesSetLabelsRequest": {
+   "id": "InstancesSetLabelsRequest",
+   "type": "object",
+   "properties": {
+    "labelFingerprint": {
+     "type": "string",
+     "format": "byte"
+    },
+    "labels": {
+     "type": "object",
+     "additionalProperties": {
+      "type": "string"
+     }
+    }
+   }
+  },
+  "InstancesSetMachineTypeRequest": {
+   "id": "InstancesSetMachineTypeRequest",
+   "type": "object",
+   "properties": {
+    "machineType": {
+     "type": "string",
+     "description": "Full or partial URL of the machine type resource. See Instance.machine_type."
+    }
+   }
+  },
   "License": {
    "id": "License",
    "type": "object",
@@ -3520,7 +3560,7 @@
    "properties": {
     "currentAction": {
      "type": "string",
-     "description": "The current action that the managed instance group has scheduled for the instance.",
+     "description": "[Output Only] The current action that the managed instance group has scheduled for the instance. Possible values: \n- NONE The instance is running, and the managed instance group does not have any scheduled actions for this instance. \n- CREATING The managed instance group is creating this instance. \n- RECREATING The managed instance group is recreating this instance. \n- DELETING The managed instance group is permanently deleting this instance. \n- ABANDONING The managed instance group is abandoning this instance. The instance will be removed from the instance group and from any target pools that are associated with this group. \n- RESTARTING The managed instance group is restarting the instance. \n- REFRESHING The managed instance group is applying configuration changes to the instance without stopping it. For example, the group can update the target pool list for an instance without stopping that instance.",
      "enum": [
       "ABANDONING",
       "CREATING",
@@ -3542,16 +3582,16 @@
     },
     "id": {
      "type": "string",
-     "description": "The unique identifier for this resource (empty when instance does not exist).",
+     "description": "[Output only] The unique identifier for this resource. This field is empty when instance does not exist.",
      "format": "uint64"
     },
     "instance": {
      "type": "string",
-     "description": "The URL of the instance (set even though instance does not exist yet)."
+     "description": "[Output Only] The URL of the instance. The URL can exist even if the instance has not yet been created."
     },
     "instanceStatus": {
      "type": "string",
-     "description": "The status of the instance (empty when instance does not exist).",
+     "description": "[Output Only] The status of the instance. This field is empty when the instance does not exist.",
      "enum": [
       "PROVISIONING",
       "RUNNING",
@@ -3575,7 +3615,7 @@
     },
     "lastAttempt": {
      "$ref": "ManagedInstanceLastAttempt",
-     "description": "Information about the last attempt to create or delete the instance."
+     "description": "[Output Only] Information about the last attempt to create or delete the instance."
     }
    }
   },
@@ -3585,7 +3625,7 @@
    "properties": {
     "errors": {
      "type": "object",
-     "description": "Encountered errors during the last attempt to create or delete the instance.",
+     "description": "[Output Only] Encountered errors during the last attempt to create or delete the instance.",
      "properties": {
       "errors": {
        "type": "array",
@@ -3662,12 +3702,11 @@
   "NamedPort": {
    "id": "NamedPort",
    "type": "object",
-   "description": "The named port information. For example: .",
+   "description": "The named port. For example: .",
    "properties": {
     "name": {
      "type": "string",
-     "description": "The name for this NamedPort.",
-     "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?"
+     "description": "The name for this named port. The name must be 1-63 characters long, and comply with RFC1035."
     },
     "port": {
      "type": "integer",
@@ -3684,12 +3723,7 @@
     "IPv4Range": {
      "type": "string",
      "description": "The range of internal addresses that are legal on this network. This range is a CIDR specification, for example: 192.168.0.0/16. Provided by the client when the network is created.",
-     "pattern": "[0-9]{1,3}(?:\\.[0-9]{1,3}){3}/[0-9]{1,2}",
-     "annotations": {
-      "required": [
-       "compute.networks.insert"
-      ]
-     }
+     "pattern": "[0-9]{1,3}(?:\\.[0-9]{1,3}){3}/[0-9]{1,2}"
     },
     "creationTimestamp": {
      "type": "string",
@@ -3856,7 +3890,7 @@
     },
     "kind": {
      "type": "string",
-     "description": "[Output Only] Type of the resource. Always compute#Operation for Operation resources.",
+     "description": "[Output Only] Type of the resource. Always compute#operation for Operation resources.",
      "default": "compute#operation"
     },
     "name": {
@@ -3865,7 +3899,7 @@
     },
     "operationType": {
      "type": "string",
-     "description": "[Output Only] Type of the operation, such as insert, update, and delete."
+     "description": "[Output Only] Type of the operation, such as insert, compute.instanceGroups.update, or compute.instanceGroups.delete."
     },
     "progress": {
      "type": "integer",
@@ -4128,7 +4162,7 @@
   "PathMatcher": {
    "id": "PathMatcher",
    "type": "object",
-   "description": "A matcher for the path portion of the URL. The BackendService from the longest-matched rule will serve the URL. If no rule was matched, the default_service will be used.",
+   "description": "A matcher for the path portion of the URL. The BackendService from the longest-matched rule will serve the URL. If no rule was matched, the default service will be used.",
    "properties": {
     "defaultService": {
      "type": "string",
@@ -4902,7 +4936,7 @@
     },
     "kind": {
      "type": "string",
-     "description": "[Output Only] Type of resource. Always compute#Operation for Operation resources.",
+     "description": "[Output Only] Type of resource. Always compute#operation for Operation resources.",
      "default": "compute#targetHttpProxy"
     },
     "name": {
@@ -5291,7 +5325,7 @@
     },
     "sessionAffinity": {
      "type": "string",
-     "description": "Sesssion affinity option, must be one of the following values: NONE: Connections from the same client IP may go to any instance in the pool; CLIENT_IP: Connections from the same client IP will go to the same instance in the pool while that instance remains healthy. CLIENT_IP_PROTO: Connections from the same client IP with the same IP protocol will go to the same instance in the pool while that instance remains healthy.",
+     "description": "Sesssion affinity option, must be one of the following values:\nNONE: Connections from the same client IP may go to any instance in the pool.\nCLIENT_IP: Connections from the same client IP will go to the same instance in the pool while that instance remains healthy.\nCLIENT_IP_PROTO: Connections from the same client IP with the same IP protocol will go to the same instance in the pool while that instance remains healthy.",
      "enum": [
       "CLIENT_IP",
       "CLIENT_IP_PROTO",
@@ -9116,7 +9150,7 @@
      "id": "compute.images.list",
      "path": "{project}/global/images",
      "httpMethod": "GET",
-     "description": "Retrieves the list of image resources available to the specified project.",
+     "description": "Retrieves the list of private images available to the specified project. Private images are images you create that belong to your project. This method does not get any images that belong to other projects, including publicly-available images, like Debian 7. If you want to get a list of publicly-available images, use this method to make a request to the respective image project, such as debian-cloud or windows-cloud.\n\nSee Accessing images for more information.",
      "parameters": {
       "filter": {
        "type": "string",
@@ -9170,11 +9204,11 @@
      "id": "compute.instanceGroupManagers.abandonInstances",
      "path": "{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/abandonInstances",
      "httpMethod": "POST",
-     "description": "Removes the specified instances from the managed instance group, and from any target pools where they are a member. The instances are not deleted. The managed instance group automatically reduces its targetSize value by the number of instances that you abandon from the group.",
+     "description": "Schedules a group action to remove the specified instances from the managed instance group. Abandoning an instance does not delete the instance, but it does remove the instance from any target pools that are applied by the managed instance group. This method reduces the targetSize of the managed instance group by the number of instances that you abandon. This operation is marked as DONE when the action is scheduled even if the instances have not yet been removed from the group. You must separately verify the status of the abandoning action with the listmanagedinstances method.",
      "parameters": {
       "instanceGroupManager": {
        "type": "string",
-       "description": "The name of the instance group manager.",
+       "description": "The name of the managed instance group.",
        "required": true,
        "location": "path"
       },
@@ -9187,7 +9221,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the managed instance group is located.",
+       "description": "The name of the zone where the managed instance group is located.",
        "required": true,
        "location": "path"
       }
@@ -9212,7 +9246,7 @@
      "id": "compute.instanceGroupManagers.aggregatedList",
      "path": "{project}/aggregated/instanceGroupManagers",
      "httpMethod": "GET",
-     "description": "Retrieves the list of managed instance groups, and groups them by project and zone.",
+     "description": "Retrieves the list of managed instance groups and groups them by zone.",
      "parameters": {
       "filter": {
        "type": "string",
@@ -9262,11 +9296,11 @@
      "id": "compute.instanceGroupManagers.delete",
      "path": "{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}",
      "httpMethod": "DELETE",
-     "description": "Deletes the specified managed instance group resource.",
+     "description": "Deletes the specified managed instance group and all of the instances in that group.",
      "parameters": {
       "instanceGroupManager": {
        "type": "string",
-       "description": "The name of the instance group manager to delete.",
+       "description": "The name of the managed instance group to delete.",
        "required": true,
        "location": "path"
       },
@@ -9279,7 +9313,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the managed instance group is located.",
+       "description": "The name of the zone where the managed instance group is located.",
        "required": true,
        "location": "path"
       }
@@ -9301,11 +9335,11 @@
      "id": "compute.instanceGroupManagers.deleteInstances",
      "path": "{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/deleteInstances",
      "httpMethod": "POST",
-     "description": "Deletes the specified instances. The instances are deleted and removed from the instance group and any target pools where they are a member. The managed instance group automatically reduces its targetSize value by the number of instances that you delete.",
+     "description": "Schedules a group action to delete the specified instances in the managed instance group. The instances are also removed from any target pools of which they were a member. This method reduces the targetSize of the managed instance group by the number of instances that you delete. This operation is marked as DONE when the action is scheduled even if the instances are still being deleted. You must separately verify the status of the deleting action with the listmanagedinstances method.",
      "parameters": {
       "instanceGroupManager": {
        "type": "string",
-       "description": "The name of the instance group manager.",
+       "description": "The name of the managed instance group.",
        "required": true,
        "location": "path"
       },
@@ -9318,7 +9352,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the managed instance group is located.",
+       "description": "The name of the zone where the managed instance group is located.",
        "required": true,
        "location": "path"
       }
@@ -9343,11 +9377,11 @@
      "id": "compute.instanceGroupManagers.get",
      "path": "{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}",
      "httpMethod": "GET",
-     "description": "Returns the specified managed instance group resource.",
+     "description": "Returns all of the details about the specified managed instance group.",
      "parameters": {
       "instanceGroupManager": {
        "type": "string",
-       "description": "The name of the instance group manager resource.",
+       "description": "The name of the managed instance group.",
        "required": true,
        "location": "path"
       },
@@ -9360,7 +9394,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the managed instance group is located.",
+       "description": "The name of the zone where the managed instance group is located.",
        "required": true,
        "location": "path"
       }
@@ -9383,7 +9417,7 @@
      "id": "compute.instanceGroupManagers.insert",
      "path": "{project}/zones/{zone}/instanceGroupManagers",
      "httpMethod": "POST",
-     "description": "Creates a managed instance group resource in the specified project using the data that is included in the request.",
+     "description": "Creates a managed instance group using the information that you specify in the request. After the group is created, it schedules an action to create instances in the group using the specified instance template. This operation is marked as DONE when the group is created even if the instances in the group have not yet been created. You must separately verify the status of the individual instances with the listmanagedinstances method.",
      "parameters": {
       "project": {
        "type": "string",
@@ -9394,7 +9428,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the managed instance group is located.",
+       "description": "The name of the zone where you want to create the managed instance group.",
        "required": true,
        "location": "path"
       }
@@ -9453,7 +9487,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the managed instance group is located.",
+       "description": "The name of the zone where the managed instance group is located.",
        "required": true,
        "location": "path"
       }
@@ -9475,7 +9509,7 @@
      "id": "compute.instanceGroupManagers.listManagedInstances",
      "path": "{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/listManagedInstances",
      "httpMethod": "POST",
-     "description": "Lists managed instances.",
+     "description": "Lists all of the instances in the managed instance group. Each instance in the list has a currentAction, which indicates the action that the managed instance group is performing on the instance. For example, if the group is still creating an instance, the currentAction is CREATING. If a previous action failed, the list displays the errors for that failed action.",
      "parameters": {
       "instanceGroupManager": {
        "type": "string",
@@ -9492,7 +9526,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the managed instance group is located.",
+       "description": "The name of the zone where the managed instance group is located.",
        "required": true,
        "location": "path"
       }
@@ -9515,11 +9549,11 @@
      "id": "compute.instanceGroupManagers.recreateInstances",
      "path": "{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/recreateInstances",
      "httpMethod": "POST",
-     "description": "Recreates the specified instances. The instances are deleted, then recreated using the managed instance group's current instance template.",
+     "description": "Schedules a group action to recreate the specified instances in the managed instance group. The instances are deleted and recreated using the current instance template for the managed instance group. This operation is marked as DONE when the action is scheduled even if the instances have not yet been recreated. You must separately verify the status of the recreating action with the listmanagedinstances method.",
      "parameters": {
       "instanceGroupManager": {
        "type": "string",
-       "description": "The name of the instance group manager.",
+       "description": "The name of the managed instance group.",
        "required": true,
        "location": "path"
       },
@@ -9532,7 +9566,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the managed instance group is located.",
+       "description": "The name of the zone where the managed instance group is located.",
        "required": true,
        "location": "path"
       }
@@ -9557,11 +9591,11 @@
      "id": "compute.instanceGroupManagers.resize",
      "path": "{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/resize",
      "httpMethod": "POST",
-     "description": "Resizes the managed instance group. If you increase the size, the group creates new instances using the current instance template. If you decrease the size, the group removes instances in the order that is outlined in Resizing a managed instance group.",
+     "description": "Resizes the managed instance group. If you increase the size, the group creates new instances using the current instance template. If you decrease the size, the group deletes instances. The resize operation is marked DONE when the resize actions are scheduled even if the group has not yet added or deleted any instances. You must separately verify the status of the creating or deleting actions with the listmanagedinstances method.",
      "parameters": {
       "instanceGroupManager": {
        "type": "string",
-       "description": "The name of the instance group manager.",
+       "description": "The name of the managed instance group.",
        "required": true,
        "location": "path"
       },
@@ -9581,7 +9615,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the managed instance group is located.",
+       "description": "The name of the zone where the managed instance group is located.",
        "required": true,
        "location": "path"
       }
@@ -9650,7 +9684,7 @@
      "parameters": {
       "instanceGroupManager": {
        "type": "string",
-       "description": "The name of the instance group manager.",
+       "description": "The name of the managed instance group.",
        "required": true,
        "location": "path"
       },
@@ -9663,7 +9697,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the managed instance group is located.",
+       "description": "The name of the zone where the managed instance group is located.",
        "required": true,
        "location": "path"
       }
@@ -9688,11 +9722,11 @@
      "id": "compute.instanceGroupManagers.setTargetPools",
      "path": "{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/setTargetPools",
      "httpMethod": "POST",
-     "description": "Modifies the target pools to which all new instances in this group are assigned. The target pools for existing instances in the group do not change unless you recreate them.",
+     "description": "Modifies the target pools to which all instances in this managed instance group are assigned. The target pools automatically apply to all of the instances in the managed instance group. This operation is marked DONE when you make the request even if the instances have not yet been added to their target pools. The change might take some time to apply to all of the instances in the group depending on the size of the group.",
      "parameters": {
       "instanceGroupManager": {
        "type": "string",
-       "description": "The name of the instance group manager.",
+       "description": "The name of the managed instance group.",
        "required": true,
        "location": "path"
       },
@@ -9705,7 +9739,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the managed instance group is located.",
+       "description": "The name of the zone where the managed instance group is located.",
        "required": true,
        "location": "path"
       }
@@ -9734,7 +9768,7 @@
      "id": "compute.instanceGroups.addInstances",
      "path": "{project}/zones/{zone}/instanceGroups/{instanceGroup}/addInstances",
      "httpMethod": "POST",
-     "description": "Adds a list of instances to an instance group. All of the instances in the instance group must be in the same network.",
+     "description": "Adds a list of instances to the specified instance group. All of the instances in the instance group must be in the same network/subnetwork. TODO: Change to comment to state \"if IG is load balanced.\"",
      "parameters": {
       "instanceGroup": {
        "type": "string",
@@ -9751,7 +9785,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the instance group is located.",
+       "description": "The name of the zone where the instance group is located.",
        "required": true,
        "location": "path"
       }
@@ -9776,7 +9810,7 @@
      "id": "compute.instanceGroups.aggregatedList",
      "path": "{project}/aggregated/instanceGroups",
      "httpMethod": "GET",
-     "description": "Retrieves the list of instance groups, and sorts them by zone.",
+     "description": "Retrieves the list of instance groups and sorts them by zone.",
      "parameters": {
       "filter": {
        "type": "string",
@@ -9826,7 +9860,7 @@
      "id": "compute.instanceGroups.delete",
      "path": "{project}/zones/{zone}/instanceGroups/{instanceGroup}",
      "httpMethod": "DELETE",
-     "description": "Deletes the specified instance group.",
+     "description": "Deletes the specified instance group. The instances in the group are not deleted.",
      "parameters": {
       "instanceGroup": {
        "type": "string",
@@ -9843,7 +9877,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the instance group is located.",
+       "description": "The name of the zone where the instance group is located.",
        "required": true,
        "location": "path"
       }
@@ -9882,7 +9916,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the instance group is located.",
+       "description": "The name of the zone where the instance group is located.",
        "required": true,
        "location": "path"
       }
@@ -9916,7 +9950,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the instance group is located.",
+       "description": "The name of the zone where you want to create the instance group.",
        "required": true,
        "location": "path"
       }
@@ -9975,7 +10009,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the instance group is located.",
+       "description": "The name of the zone where the instance group is located.",
        "required": true,
        "location": "path"
       }
@@ -9997,7 +10031,7 @@
      "id": "compute.instanceGroups.listInstances",
      "path": "{project}/zones/{zone}/instanceGroups/{instanceGroup}/listInstances",
      "httpMethod": "POST",
-     "description": "Lists instances in an instance group. The parameters for this method specify whether the list filters instances by state and named ports information.",
+     "description": "Lists the instances in the specified instance group.",
      "parameters": {
       "filter": {
        "type": "string",
@@ -10038,7 +10072,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the instance group is located.",
+       "description": "The name of the zone where the instance group is located.",
        "required": true,
        "location": "path"
       }
@@ -10064,7 +10098,7 @@
      "id": "compute.instanceGroups.removeInstances",
      "path": "{project}/zones/{zone}/instanceGroups/{instanceGroup}/removeInstances",
      "httpMethod": "POST",
-     "description": "Removes a list of instances from an instance group.",
+     "description": "Removes one or more instances from the specified instance group, but does not delete those instances.",
      "parameters": {
       "instanceGroup": {
        "type": "string",
@@ -10081,7 +10115,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the instance group is located.",
+       "description": "The name of the zone where the instance group is located.",
        "required": true,
        "location": "path"
       }
@@ -10106,7 +10140,7 @@
      "id": "compute.instanceGroups.setNamedPorts",
      "path": "{project}/zones/{zone}/instanceGroups/{instanceGroup}/setNamedPorts",
      "httpMethod": "POST",
-     "description": "Sets the named ports in an instance group.",
+     "description": "Sets the named ports for the specified instance group.",
      "parameters": {
       "instanceGroup": {
        "type": "string",
@@ -10123,7 +10157,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the instance group is located.",
+       "description": "The name of the zone where the instance group is located.",
        "required": true,
        "location": "path"
       }
@@ -10352,6 +10386,7 @@
      "id": "compute.instances.aggregatedList",
      "path": "{project}/aggregated/instances",
      "httpMethod": "GET",
+     "description": "Retrieves aggregated list of instance resources.",
      "parameters": {
       "filter": {
        "type": "string",
@@ -10870,6 +10905,94 @@
       "https://www.googleapis.com/auth/compute"
      ]
     },
+    "setLabels": {
+     "id": "compute.instances.setLabels",
+     "path": "{project}/zones/{zone}/instances/{instance}/setLabels",
+     "httpMethod": "POST",
+     "description": "Sets labels for the specified instance to the data included in the request.",
+     "parameters": {
+      "instance": {
+       "type": "string",
+       "description": "Name of the instance scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      },
+      "project": {
+       "type": "string",
+       "description": "Project ID for this request.",
+       "required": true,
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+       "location": "path"
+      },
+      "zone": {
+       "type": "string",
+       "description": "The name of the zone for this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "zone",
+      "instance"
+     ],
+     "request": {
+      "$ref": "InstancesSetLabelsRequest"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/cloud-platform",
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "setMachineType": {
+     "id": "compute.instances.setMachineType",
+     "path": "{project}/zones/{zone}/instances/{instance}/setMachineType",
+     "httpMethod": "POST",
+     "description": "Sets machine type for the specified instances to the data included in the request.",
+     "parameters": {
+      "instance": {
+       "type": "string",
+       "description": "Name of the instance scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      },
+      "project": {
+       "type": "string",
+       "description": "Project ID for this request.",
+       "required": true,
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+       "location": "path"
+      },
+      "zone": {
+       "type": "string",
+       "description": "The name of the zone for this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "zone",
+      "instance"
+     ],
+     "request": {
+      "$ref": "InstancesSetMachineTypeRequest"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/cloud-platform",
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
     "setMetadata": {
      "id": "compute.instances.setMetadata",
      "path": "{project}/zones/{zone}/instances/{instance}/setMetadata",
diff --git a/compute/v0.beta/compute-gen.go b/compute/v0.beta/compute-gen.go
index 0f2592b..ae14a80 100644
--- a/compute/v0.beta/compute-gen.go
+++ b/compute/v0.beta/compute-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "compute:beta"
 const apiName = "compute"
@@ -836,6 +838,10 @@
 	// only define one or the other, but not both.
 	InitializeParams *AttachedDiskInitializeParams `json:"initializeParams,omitempty"`
 
+	// Interface: Specifies the disk interface to use for attaching this
+	// disk, either SCSI or NVME. The default is SCSI. For performance
+	// characteristics of SCSI over NVMe, see Local SSD performance.
+	//
 	// Possible values:
 	//   "NVME"
 	//   "SCSI"
@@ -2389,7 +2395,8 @@
 	// server.
 	Id uint64 `json:"id,omitempty,string"`
 
-	// Kind: Type of the resource.
+	// Kind: [Output Only] Type of the resource. Always
+	// compute#forwardingRule.
 	Kind string `json:"kind,omitempty"`
 
 	// Name: Name of the resource; provided by the client when the resource
@@ -2401,11 +2408,10 @@
 	// last character, which cannot be a dash.
 	Name string `json:"name,omitempty"`
 
-	// PortRange: Applicable only when `IPProtocol` is TCP, UDP, or SCTP,
-	// only packets addressed to ports in the specified range will be
-	// forwarded to target. If portRange is left empty (default value), all
-	// ports are forwarded. Forwarding rules with the same `[IPAddress,
-	// IPProtocol]` pair must have disjoint port ranges.
+	// PortRange: Applicable only when IPProtocol is TCP, UDP, or SCTP, only
+	// packets addressed to ports in the specified range will be forwarded
+	// to target. Forwarding rules with the same `[IPAddress, IPProtocol]`
+	// pair must have disjoint port ranges.
 	PortRange string `json:"portRange,omitempty"`
 
 	// Region: [Output Only] URL of the region where the regional forwarding
@@ -2662,13 +2668,13 @@
 	Description string `json:"description,omitempty"`
 
 	// Hosts: The list of host patterns to match. They must be valid
-	// hostnames except that they may start with *. or *-. The * acts like a
-	// glob and will match any string of atoms (separated by .s and -s) to
-	// the left.
+	// hostnames, except * will match any string of ([a-z0-9-.]*). In that
+	// case, * must be the first character and must be followed in the
+	// pattern by either - or ..
 	Hosts []string `json:"hosts,omitempty"`
 
-	// PathMatcher: The name of the PathMatcher to match the path portion of
-	// the URL, if the this hostRule matches the URL's host portion.
+	// PathMatcher: The name of the PathMatcher to use to match the path
+	// portion of the URL if the hostRule matches the URL's host portion.
 	PathMatcher string `json:"pathMatcher,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Description") to
@@ -3088,7 +3094,7 @@
 	// server.
 	Id string `json:"id,omitempty"`
 
-	// Items: A list of Image resources.
+	// Items: [Output Only] A list of Image resources.
 	Items []*Image `json:"items,omitempty"`
 
 	// Kind: Type of resource.
@@ -3151,6 +3157,21 @@
 	// instances.
 	Kind string `json:"kind,omitempty"`
 
+	// LabelFingerprint: A fingerprint for this request, which is
+	// essentially a hash of the metadata's contents and used for optimistic
+	// locking. The fingerprint is initially generated by Compute Engine and
+	// changes after every request to modify or update metadata. You must
+	// always provide an up-to-date fingerprint hash in order to update or
+	// change metadata.
+	//
+	// To see the latest fingerprint, make get() request to the instance.
+	LabelFingerprint string `json:"labelFingerprint,omitempty"`
+
+	// Labels: Labels to apply to this instance. These can be later modified
+	// by the setLabels method. Each label key & value must comply with
+	// RFC1035. Label values may be empty.
+	Labels map[string]string `json:"labels,omitempty"`
+
 	// MachineType: Full or partial URL of the machine type resource to use
 	// for this instance. This is provided by the client when the instance
 	// is created. For example, the following is a valid partial
@@ -3285,13 +3306,13 @@
 	// Description: An optional text description for the instance group.
 	Description string `json:"description,omitempty"`
 
-	// Fingerprint: [Output Only] The fingerprint of the named ports
-	// information. The system uses this fingerprint to detect conflicts
-	// when multiple users change the named ports information concurrently.
+	// Fingerprint: [Output Only] The fingerprint of the named ports. The
+	// system uses this fingerprint to detect conflicts when multiple users
+	// change the named ports concurrently.
 	Fingerprint string `json:"fingerprint,omitempty"`
 
-	// Id: [Output Only] A unique identifier for this instance group. The
-	// server defines this identifier.
+	// Id: [Output Only] A unique identifier for this resource type. The
+	// server generates this identifier.
 	Id uint64 `json:"id,omitempty,string"`
 
 	// Kind: [Output Only] The resource type, which is always
@@ -3303,26 +3324,30 @@
 	Name string `json:"name,omitempty"`
 
 	// NamedPorts: Assigns a name to a port number. For example: {name:
-	// ?http?, port: 80} This allows the system to reference ports by the
-	// assigned name instead of a port number. Named ports can also contain
-	// multiple ports. For example: [{name: ?http?, port: 80},{name: "http",
-	// port: 8080}] Named ports apply to all instances in this instance
-	// group.
+	// "http", port: 80}
+	//
+	// This allows the system to reference ports by the assigned name
+	// instead of a port number. Named ports can also contain multiple
+	// ports. For example: [{name: "http", port: 80},{name: "http", port:
+	// 8080}]
+	//
+	// Named ports apply to all instances in this instance group.
 	NamedPorts []*NamedPort `json:"namedPorts,omitempty"`
 
-	// Network: The URL of the network to which all instances in the
-	// instance group belong.
+	// Network: [Output Only] The URL of the network to which all instances
+	// in the instance group belong.
 	Network string `json:"network,omitempty"`
 
 	// SelfLink: [Output Only] The URL for this instance group. The server
-	// defines this URL.
+	// generates this URL.
 	SelfLink string `json:"selfLink,omitempty"`
 
 	// Size: [Output Only] The total number of instances in the instance
 	// group.
 	Size int64 `json:"size,omitempty"`
 
-	// Zone: The URL of the zone where the instance group is located.
+	// Zone: [Output Only] The URL of the zone where the instance group is
+	// located.
 	Zone string `json:"zone,omitempty"`
 
 	// ServerResponse contains the HTTP response code and headers from the
@@ -3346,7 +3371,7 @@
 
 type InstanceGroupAggregatedList struct {
 	// Id: [Output Only] A unique identifier for this aggregated list of
-	// instance groups. The server defines this identifier.
+	// instance groups. The server generates this identifier.
 	Id string `json:"id,omitempty"`
 
 	// Items: A map of scoped instance group lists.
@@ -3361,8 +3386,8 @@
 	// truncated list request.
 	NextPageToken string `json:"nextPageToken,omitempty"`
 
-	// SelfLink: [Output Only] A unique identifier for this aggregated list
-	// of instance groups. The server defines this identifier.
+	// SelfLink: [Output Only] The URL for this resource type. The server
+	// generates this URL.
 	SelfLink string `json:"selfLink,omitempty"`
 
 	// ServerResponse contains the HTTP response code and headers from the
@@ -3387,10 +3412,10 @@
 // InstanceGroupList: A list of InstanceGroup resources.
 type InstanceGroupList struct {
 	// Id: [Output Only] A unique identifier for this list of instance
-	// groups. The server defines this identifier.
+	// groups. The server generates this identifier.
 	Id string `json:"id,omitempty"`
 
-	// Items: A list of InstanceGroup resources.
+	// Items: A list of instance groups.
 	Items []*InstanceGroup `json:"items,omitempty"`
 
 	// Kind: [Output Only] The resource type, which is always
@@ -3401,8 +3426,8 @@
 	// truncated list request.
 	NextPageToken string `json:"nextPageToken,omitempty"`
 
-	// SelfLink: [Output Only] The URL for this instance group. The server
-	// defines this URL.
+	// SelfLink: [Output Only] The URL for this resource type. The server
+	// generates this URL.
 	SelfLink string `json:"selfLink,omitempty"`
 
 	// ServerResponse contains the HTTP response code and headers from the
@@ -3444,7 +3469,7 @@
 
 	// CurrentActions: [Output Only] The list of instance actions and the
 	// number of instances in this managed instance group that are scheduled
-	// for those actions.
+	// for each of those actions.
 	CurrentActions *InstanceGroupManagerActionsSummary `json:"currentActions,omitempty"`
 
 	// Description: An optional text description for the managed instance
@@ -3452,15 +3477,15 @@
 	Description string `json:"description,omitempty"`
 
 	// Fingerprint: [Output Only] The fingerprint of the target pools
-	// information, which is a hash of the contents. This field is used for
-	// optimistic locking when updating the target pool entries.
+	// information. You can use this optional field for optimistic locking
+	// when you update the target pool entries.
 	Fingerprint string `json:"fingerprint,omitempty"`
 
-	// Id: [Output Only] A unique identifier for this managed instance
-	// group. The server defines this identifier.
+	// Id: [Output Only] A unique identifier for this resource type. The
+	// server generates this identifier.
 	Id uint64 `json:"id,omitempty,string"`
 
-	// InstanceGroup: [Output Only] The URL of the InstanceGroup resource.
+	// InstanceGroup: [Output Only] The URL of the Instance Group resource.
 	InstanceGroup string `json:"instanceGroup,omitempty"`
 
 	// InstanceTemplate: The URL of the instance template that is specified
@@ -3476,13 +3501,13 @@
 	// characters long, and comply with RFC1035.
 	Name string `json:"name,omitempty"`
 
-	// SelfLink: [Output Only] Server-defined URL for this managed instance
-	// group.
+	// SelfLink: [Output Only] The URL for this managed instance group. The
+	// server defines this URL.
 	SelfLink string `json:"selfLink,omitempty"`
 
-	// TargetPools: The URLs of all TargetPool resources to which new
-	// instances in the instanceGroup field are added. Updating the target
-	// pool values does not affect existing instances.
+	// TargetPools: The URLs for all TargetPool resources to which instances
+	// in the instanceGroup field are added. The target pools automatically
+	// apply to all of the instances in the managed instance group.
 	TargetPools []string `json:"targetPools,omitempty"`
 
 	// TargetSize: The target number of running instances for this managed
@@ -3490,7 +3515,7 @@
 	// Resizing the group changes this number.
 	TargetSize int64 `json:"targetSize,omitempty"`
 
-	// Zone: The URL of the zone where the managed instance group is
+	// Zone: The name of the zone where the managed instance group is
 	// located.
 	Zone string `json:"zone,omitempty"`
 
@@ -3514,10 +3539,10 @@
 }
 
 type InstanceGroupManagerActionsSummary struct {
-	// Abandoning: [Output Only] Total number of instances in the managed
-	// instance group that are scheduled to be abandoned. Abandoning an
-	// instance removes it from the managed instance group without deleting
-	// it.
+	// Abandoning: [Output Only] The total number of instances in the
+	// managed instance group that are scheduled to be abandoned. Abandoning
+	// an instance removes it from the managed instance group without
+	// deleting it.
 	Abandoning int64 `json:"abandoning,omitempty"`
 
 	// Creating: [Output Only] The number of instances in the managed
@@ -3531,7 +3556,7 @@
 	Deleting int64 `json:"deleting,omitempty"`
 
 	// None: [Output Only] The number of instances in the managed instance
-	// group that currently have no scheduled actions.
+	// group that are running and have no scheduled actions.
 	None int64 `json:"none,omitempty"`
 
 	// Recreating: [Output Only] The number of instances in the managed
@@ -3569,13 +3594,13 @@
 
 type InstanceGroupManagerAggregatedList struct {
 	// Id: [Output Only] A unique identifier for this aggregated list of
-	// managed instance groups. The server defines this identifier.
+	// managed instance groups. The server generates this identifier.
 	Id string `json:"id,omitempty"`
 
-	// Items: A map of filtered managed instance group lists.
+	// Items: [Output Only] A map of filtered managed instance group lists.
 	Items map[string]InstanceGroupManagersScopedList `json:"items,omitempty"`
 
-	// Kind: [Output Only] Type of the resource. Always
+	// Kind: [Output Only] The resource type, which is always
 	// compute#instanceGroupManagerAggregatedList for an aggregated list of
 	// managed instance groups.
 	Kind string `json:"kind,omitempty"`
@@ -3584,8 +3609,8 @@
 	// truncated list request.
 	NextPageToken string `json:"nextPageToken,omitempty"`
 
-	// SelfLink: [Output Only] The URL for this aggregated list of managed
-	// instance groups. The server defines this URL.
+	// SelfLink: [Output Only] The URL for this resource type. The server
+	// generates this URL.
 	SelfLink string `json:"selfLink,omitempty"`
 
 	// ServerResponse contains the HTTP response code and headers from the
@@ -3608,12 +3633,12 @@
 }
 
 type InstanceGroupManagerAutoHealingPolicy struct {
-	// ActionType: The action to perform when an instance becomes unhealthy.
-	// Possible values are RECREATE or RESTART. RECREATE replaces an
-	// unhealthy instance with a new instance that is based on the instance
-	// template for this managed instance group. RESTART performs a soft
-	// restart on an instance. If the instance cannot restart softly, the
-	// instance performs a hard restart.
+	// ActionType: The action to perform when an instance in this group
+	// becomes unhealthy. Possible values are RECREATE or RESTART. RECREATE
+	// replaces an unhealthy instance using the same name and instance
+	// template as the unhealthy instance. RESTART performs a soft restart
+	// on an instance. If the instance cannot reboot, the instance performs
+	// a hard restart.
 	//
 	// Possible values:
 	//   "RECREATE"
@@ -3638,27 +3663,27 @@
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
 
-// InstanceGroupManagerList: [Output Only] A list of
-// InstanceGroupManager resources.
+// InstanceGroupManagerList: [Output Only] A list of managed instance
+// groups.
 type InstanceGroupManagerList struct {
-	// Id: [Output Only] A unique identifier for this managed instance
-	// group. The server defines this identifier.
+	// Id: [Output Only] A unique identifier for this resource type. The
+	// server generates this identifier.
 	Id string `json:"id,omitempty"`
 
-	// Items: [Output Only] A list of managed instance group resources.
+	// Items: [Output Only] A list of managed instance groups.
 	Items []*InstanceGroupManager `json:"items,omitempty"`
 
-	// Kind: [Output Only] Type of the resource. Always
-	// compute#instanceGroupManagerList for a list of managed instance group
-	// resources.
+	// Kind: [Output Only] The resource type, which is always
+	// compute#instanceGroupManagerList for a list of managed instance
+	// groups.
 	Kind string `json:"kind,omitempty"`
 
 	// NextPageToken: [Output Only] A token that is used to continue a
 	// truncated list request.
 	NextPageToken string `json:"nextPageToken,omitempty"`
 
-	// SelfLink: [Output Only] The URL for this managed instance group. The
-	// server defines this URL.
+	// SelfLink: [Output Only] The URL for this resource type. The server
+	// generates this URL.
 	SelfLink string `json:"selfLink,omitempty"`
 
 	// ServerResponse contains the HTTP response code and headers from the
@@ -3681,8 +3706,8 @@
 }
 
 type InstanceGroupManagersAbandonInstancesRequest struct {
-	// Instances: The names of instances to abandon from the managed
-	// instance group.
+	// Instances: The URL for one or more instances to abandon from the
+	// managed instance group.
 	Instances []string `json:"instances,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Instances") to
@@ -3701,7 +3726,8 @@
 }
 
 type InstanceGroupManagersDeleteInstancesRequest struct {
-	// Instances: The names of one or more instances to delete.
+	// Instances: The list of instances to delete from this managed instance
+	// group. Specify one or more instance URLs.
 	Instances []string `json:"instances,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Instances") to
@@ -3720,8 +3746,8 @@
 }
 
 type InstanceGroupManagersListManagedInstancesResponse struct {
-	// ManagedInstances: List of managed instances. If empty - all instances
-	// are listed.
+	// ManagedInstances: [Output Only] The list of instances in the managed
+	// instance group.
 	ManagedInstances []*ManagedInstance `json:"managedInstances,omitempty"`
 
 	// ServerResponse contains the HTTP response code and headers from the
@@ -3744,7 +3770,7 @@
 }
 
 type InstanceGroupManagersRecreateInstancesRequest struct {
-	// Instances: The names of one or more instances to recreate.
+	// Instances: The URL for one or more instances to recreate.
 	Instances []string `json:"instances,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Instances") to
@@ -3894,17 +3920,19 @@
 }
 
 type InstanceGroupManagersSetTargetPoolsRequest struct {
-	// Fingerprint: The fingerprint of the target pools information, which
-	// is a hash of the contents. This field is used for optimistic locking
-	// when updating the target pool entries.
+	// Fingerprint: The fingerprint of the target pools information. Use
+	// this optional property to prevent conflicts when multiple users
+	// change the target pools settings concurrently. Obtain the fingerprint
+	// with the instanceGroupManagers.get method. Then, include the
+	// fingerprint in your request to ensure that you do not overwrite
+	// changes that were applied from another concurrent request.
 	Fingerprint string `json:"fingerprint,omitempty"`
 
 	// TargetPools: The list of target pool URLs that instances in this
-	// managed instance group belong to. When the managed instance group
-	// creates new instances, the group automatically adds those instances
-	// to the target pools that are specified in this parameter. Changing
-	// the value of this parameter does not change the target pools of
-	// existing instances in this managed instance group.
+	// managed instance group belong to. The managed instance group applies
+	// these target pools to all of the instances in the group. Existing
+	// instances and new instances in the group all receive these target
+	// pool settings.
 	TargetPools []string `json:"targetPools,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Fingerprint") to
@@ -3923,7 +3951,7 @@
 }
 
 type InstanceGroupsAddInstancesRequest struct {
-	// Instances: The instances to add to the instance group.
+	// Instances: The list of instances to add to the instance group.
 	Instances []*InstanceReference `json:"instances,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Instances") to
@@ -3943,11 +3971,11 @@
 
 type InstanceGroupsListInstances struct {
 	// Id: [Output Only] A unique identifier for this list of instance
-	// groups. The server defines this identifier.
+	// groups. The server generates this identifier.
 	Id string `json:"id,omitempty"`
 
-	// Items: A list of InstanceWithNamedPorts resources, which contains all
-	// named ports for the given instance.
+	// Items: [Output Only] A list of instances and any named ports that are
+	// assigned to those instances.
 	Items []*InstanceWithNamedPorts `json:"items,omitempty"`
 
 	// Kind: [Output Only] The resource type, which is always
@@ -3959,7 +3987,7 @@
 	NextPageToken string `json:"nextPageToken,omitempty"`
 
 	// SelfLink: [Output Only] The URL for this list of instance groups. The
-	// server defines this URL.
+	// server generates this URL.
 	SelfLink string `json:"selfLink,omitempty"`
 
 	// ServerResponse contains the HTTP response code and headers from the
@@ -4008,7 +4036,7 @@
 }
 
 type InstanceGroupsRemoveInstancesRequest struct {
-	// Instances: The instances to remove from the instance group.
+	// Instances: The list of instances to remove from the instance group.
 	Instances []*InstanceReference `json:"instances,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Instances") to
@@ -4118,9 +4146,12 @@
 }
 
 type InstanceGroupsSetNamedPortsRequest struct {
-	// Fingerprint: The fingerprint of the named ports information, which is
-	// a hash of the contents. Use this field for optimistic locking when
-	// you update the named ports entries.
+	// Fingerprint: The fingerprint of the named ports information for this
+	// instance group. Use this optional property to prevent conflicts when
+	// multiple users change the named ports settings concurrently. Obtain
+	// the fingerprint with the instanceGroups.get method. Then, include the
+	// fingerprint in your request to ensure that you do not overwrite
+	// changes that were applied from another concurrent request.
 	Fingerprint string `json:"fingerprint,omitempty"`
 
 	// NamedPorts: The list of named ports to set for this instance group.
@@ -4181,11 +4212,13 @@
 }
 
 type InstanceProperties struct {
-	// CanIpForward: A boolean that specifies if instances created from this
-	// template can send packets with source IP addresses other than their
-	// own or receive packets with destination IP addresses other than their
-	// own. If you use these instances as an IP gateway or as the next-hop
-	// in a Route resource, specify true. Otherwise, specify false.
+	// CanIpForward: Enables instances created based on this template to
+	// send packets with source IP addresses other than their own and
+	// receive packets with destination IP addresses other than their own.
+	// If these instances will be used as an IP gateway or it will be set as
+	// the next-hop in a Route resource, specify true. If unsure, leave this
+	// set to false. See the canIpForward documentation for more
+	// information.
 	CanIpForward bool `json:"canIpForward,omitempty"`
 
 	// Description: An optional text description for the instances that are
@@ -4207,16 +4240,11 @@
 	Metadata *Metadata `json:"metadata,omitempty"`
 
 	// NetworkInterfaces: An array of network access configurations for this
-	// interface. This specifies how this interface is configured to
-	// interact with other network services, such as connecting to the
-	// internet. Currently, ONE_TO_ONE_NAT is the only supported access
-	// configuration. If you do not specify any access configurations, the
-	// instances that are created from this template will have no external
-	// internet access.
+	// interface.
 	NetworkInterfaces []*NetworkInterface `json:"networkInterfaces,omitempty"`
 
-	// Scheduling: A list of scheduling options for the instances that are
-	// created from this template.
+	// Scheduling: Specifies the scheduling options for the instances that
+	// are created from this template.
 	Scheduling *Scheduling `json:"scheduling,omitempty"`
 
 	// ServiceAccounts: A list of service accounts with specified scopes.
@@ -4247,6 +4275,7 @@
 }
 
 type InstanceReference struct {
+	// Instance: The URL for a specific instance.
 	Instance string `json:"instance,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Instance") to
@@ -4281,12 +4310,16 @@
 	// compute#instanceTemplate for instance templates.
 	Kind string `json:"kind,omitempty"`
 
-	// Name: The name of the instance template. The name must be 1-63
-	// characters long, and comply with RFC1035.
+	// Name: Name of the resource; provided by the client when the resource
+	// is created. The name must be 1-63 characters long, and comply with
+	// RFC1035. Specifically, the name must be 1-63 characters long and
+	// match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means
+	// the first character must be a lowercase letter, and all following
+	// characters must be a dash, lowercase letter, or digit, except the
+	// last character, which cannot be a dash.
 	Name string `json:"name,omitempty"`
 
-	// Properties: The instance properties for the instance template
-	// resource.
+	// Properties: The instance properties for this instance template.
 	Properties *InstanceProperties `json:"properties,omitempty"`
 
 	// SelfLink: [Output Only] The URL for this instance template. The
@@ -4318,7 +4351,7 @@
 	// server defines this identifier.
 	Id string `json:"id,omitempty"`
 
-	// Items: A list of InstanceTemplate resources.
+	// Items: [Output Only] list of InstanceTemplate resources.
 	Items []*InstanceTemplate `json:"items,omitempty"`
 
 	// Kind: [Output Only] The resource type, which is always
@@ -4353,13 +4386,14 @@
 }
 
 type InstanceWithNamedPorts struct {
-	// Instance: The URL of the instance.
+	// Instance: [Output Only] The URL of the instance.
 	Instance string `json:"instance,omitempty"`
 
-	// NamedPorts: The named ports that belong to this instance group.
+	// NamedPorts: [Output Only] The named ports that belong to this
+	// instance group.
 	NamedPorts []*NamedPort `json:"namedPorts,omitempty"`
 
-	// Status: The status of the instance.
+	// Status: [Output Only] The status of the instance.
 	//
 	// Possible values:
 	//   "PROVISIONING"
@@ -4476,6 +4510,46 @@
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
 
+type InstancesSetLabelsRequest struct {
+	LabelFingerprint string `json:"labelFingerprint,omitempty"`
+
+	Labels map[string]string `json:"labels,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "LabelFingerprint") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *InstancesSetLabelsRequest) MarshalJSON() ([]byte, error) {
+	type noMethod InstancesSetLabelsRequest
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+type InstancesSetMachineTypeRequest struct {
+	// MachineType: Full or partial URL of the machine type resource. See
+	// Instance.machine_type.
+	MachineType string `json:"machineType,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "MachineType") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *InstancesSetMachineTypeRequest) MarshalJSON() ([]byte, error) {
+	type noMethod InstancesSetMachineTypeRequest
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
 // License: A license resource.
 type License struct {
 	// ChargesUseFee: If true, the customer will be charged license fee for
@@ -4746,8 +4820,24 @@
 }
 
 type ManagedInstance struct {
-	// CurrentAction: The current action that the managed instance group has
-	// scheduled for the instance.
+	// CurrentAction: [Output Only] The current action that the managed
+	// instance group has scheduled for the instance. Possible values:
+	// - NONE The instance is running, and the managed instance group does
+	// not have any scheduled actions for this instance.
+	// - CREATING The managed instance group is creating this instance.
+	// - RECREATING The managed instance group is recreating this instance.
+	//
+	// - DELETING The managed instance group is permanently deleting this
+	// instance.
+	// - ABANDONING The managed instance group is abandoning this instance.
+	// The instance will be removed from the instance group and from any
+	// target pools that are associated with this group.
+	// - RESTARTING The managed instance group is restarting the instance.
+	//
+	// - REFRESHING The managed instance group is applying configuration
+	// changes to the instance without stopping it. For example, the group
+	// can update the target pool list for an instance without stopping that
+	// instance.
 	//
 	// Possible values:
 	//   "ABANDONING"
@@ -4759,16 +4849,16 @@
 	//   "RESTARTING"
 	CurrentAction string `json:"currentAction,omitempty"`
 
-	// Id: The unique identifier for this resource (empty when instance does
-	// not exist).
+	// Id: [Output only] The unique identifier for this resource. This field
+	// is empty when instance does not exist.
 	Id uint64 `json:"id,omitempty,string"`
 
-	// Instance: The URL of the instance (set even though instance does not
-	// exist yet).
+	// Instance: [Output Only] The URL of the instance. The URL can exist
+	// even if the instance has not yet been created.
 	Instance string `json:"instance,omitempty"`
 
-	// InstanceStatus: The status of the instance (empty when instance does
-	// not exist).
+	// InstanceStatus: [Output Only] The status of the instance. This field
+	// is empty when the instance does not exist.
 	//
 	// Possible values:
 	//   "PROVISIONING"
@@ -4781,8 +4871,8 @@
 	//   "TERMINATED"
 	InstanceStatus string `json:"instanceStatus,omitempty"`
 
-	// LastAttempt: Information about the last attempt to create or delete
-	// the instance.
+	// LastAttempt: [Output Only] Information about the last attempt to
+	// create or delete the instance.
 	LastAttempt *ManagedInstanceLastAttempt `json:"lastAttempt,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "CurrentAction") to
@@ -4801,8 +4891,8 @@
 }
 
 type ManagedInstanceLastAttempt struct {
-	// Errors: Encountered errors during the last attempt to create or
-	// delete the instance.
+	// Errors: [Output Only] Encountered errors during the last attempt to
+	// create or delete the instance.
 	Errors *ManagedInstanceLastAttemptErrors `json:"errors,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Errors") to
@@ -4820,8 +4910,8 @@
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
 
-// ManagedInstanceLastAttemptErrors: Encountered errors during the last
-// attempt to create or delete the instance.
+// ManagedInstanceLastAttemptErrors: [Output Only] Encountered errors
+// during the last attempt to create or delete the instance.
 type ManagedInstanceLastAttemptErrors struct {
 	// Errors: [Output Only] The array of errors encountered while
 	// processing this operation.
@@ -4930,9 +5020,10 @@
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
 
-// NamedPort: The named port information. For example: .
+// NamedPort: The named port. For example: .
 type NamedPort struct {
-	// Name: The name for this NamedPort.
+	// Name: The name for this named port. The name must be 1-63 characters
+	// long, and comply with RFC1035.
 	Name string `json:"name,omitempty"`
 
 	// Port: The port number, which can be a value between 1 and 65535.
@@ -5134,7 +5225,7 @@
 	// This is in RFC3339 text format.
 	InsertTime string `json:"insertTime,omitempty"`
 
-	// Kind: [Output Only] Type of the resource. Always compute#Operation
+	// Kind: [Output Only] Type of the resource. Always compute#operation
 	// for Operation resources.
 	Kind string `json:"kind,omitempty"`
 
@@ -5142,7 +5233,7 @@
 	Name string `json:"name,omitempty"`
 
 	// OperationType: [Output Only] Type of the operation, such as insert,
-	// update, and delete.
+	// compute.instanceGroups.update, or compute.instanceGroups.delete.
 	OperationType string `json:"operationType,omitempty"`
 
 	// Progress: [Output Only] An optional progress indicator that ranges
@@ -5493,7 +5584,7 @@
 
 // PathMatcher: A matcher for the path portion of the URL. The
 // BackendService from the longest-matched rule will serve the URL. If
-// no rule was matched, the default_service will be used.
+// no rule was matched, the default service will be used.
 type PathMatcher struct {
 	// DefaultService: The URL to the BackendService resource. This will be
 	// used if none of the 'pathRules' defined by this PathMatcher is met by
@@ -6379,7 +6470,7 @@
 	// server.
 	Id uint64 `json:"id,omitempty,string"`
 
-	// Kind: [Output Only] Type of resource. Always compute#Operation for
+	// Kind: [Output Only] Type of resource. Always compute#operation for
 	// Operation resources.
 	Kind string `json:"kind,omitempty"`
 
@@ -6884,12 +6975,15 @@
 	SelfLink string `json:"selfLink,omitempty"`
 
 	// SessionAffinity: Sesssion affinity option, must be one of the
-	// following values: NONE: Connections from the same client IP may go to
-	// any instance in the pool; CLIENT_IP: Connections from the same client
-	// IP will go to the same instance in the pool while that instance
-	// remains healthy. CLIENT_IP_PROTO: Connections from the same client IP
-	// with the same IP protocol will go to the same instance in the pool
-	// while that instance remains healthy.
+	// following values:
+	// NONE: Connections from the same client IP may go to any instance in
+	// the pool.
+	// CLIENT_IP: Connections from the same client IP will go to the same
+	// instance in the pool while that instance remains
+	// healthy.
+	// CLIENT_IP_PROTO: Connections from the same client IP with the same IP
+	// protocol will go to the same instance in the pool while that instance
+	// remains healthy.
 	//
 	// Possible values:
 	//   "CLIENT_IP"
@@ -19157,8 +19251,15 @@
 	ctx_    context.Context
 }
 
-// List: Retrieves the list of image resources available to the
-// specified project.
+// List: Retrieves the list of private images available to the specified
+// project. Private images are images you create that belong to your
+// project. This method does not get any images that belong to other
+// projects, including publicly-available images, like Debian 7. If you
+// want to get a list of publicly-available images, use this method to
+// make a request to the respective image project, such as debian-cloud
+// or windows-cloud.
+//
+// See Accessing images for more information.
 // For details, see https://cloud.google.com/compute/docs/reference/latest/images/list
 func (r *ImagesService) List(project string) *ImagesListCall {
 	c := &ImagesListCall{s: r.s, opt_: make(map[string]interface{})}
@@ -19316,7 +19417,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Retrieves the list of image resources available to the specified project.",
+	//   "description": "Retrieves the list of private images available to the specified project. Private images are images you create that belong to your project. This method does not get any images that belong to other projects, including publicly-available images, like Debian 7. If you want to get a list of publicly-available images, use this method to make a request to the respective image project, such as debian-cloud or windows-cloud.\n\nSee Accessing images for more information.",
 	//   "httpMethod": "GET",
 	//   "id": "compute.images.list",
 	//   "parameterOrder": [
@@ -19380,11 +19481,15 @@
 	ctx_                                         context.Context
 }
 
-// AbandonInstances: Removes the specified instances from the managed
-// instance group, and from any target pools where they are a member.
-// The instances are not deleted. The managed instance group
-// automatically reduces its targetSize value by the number of instances
-// that you abandon from the group.
+// AbandonInstances: Schedules a group action to remove the specified
+// instances from the managed instance group. Abandoning an instance
+// does not delete the instance, but it does remove the instance from
+// any target pools that are applied by the managed instance group. This
+// method reduces the targetSize of the managed instance group by the
+// number of instances that you abandon. This operation is marked as
+// DONE when the action is scheduled even if the instances have not yet
+// been removed from the group. You must separately verify the status of
+// the abandoning action with the listmanagedinstances method.
 func (r *InstanceGroupManagersService) AbandonInstances(project string, zone string, instanceGroupManager string, instancegroupmanagersabandoninstancesrequest *InstanceGroupManagersAbandonInstancesRequest) *InstanceGroupManagersAbandonInstancesCall {
 	c := &InstanceGroupManagersAbandonInstancesCall{s: r.s, opt_: make(map[string]interface{})}
 	c.project = project
@@ -19474,7 +19579,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Removes the specified instances from the managed instance group, and from any target pools where they are a member. The instances are not deleted. The managed instance group automatically reduces its targetSize value by the number of instances that you abandon from the group.",
+	//   "description": "Schedules a group action to remove the specified instances from the managed instance group. Abandoning an instance does not delete the instance, but it does remove the instance from any target pools that are applied by the managed instance group. This method reduces the targetSize of the managed instance group by the number of instances that you abandon. This operation is marked as DONE when the action is scheduled even if the instances have not yet been removed from the group. You must separately verify the status of the abandoning action with the listmanagedinstances method.",
 	//   "httpMethod": "POST",
 	//   "id": "compute.instanceGroupManagers.abandonInstances",
 	//   "parameterOrder": [
@@ -19484,7 +19589,7 @@
 	//   ],
 	//   "parameters": {
 	//     "instanceGroupManager": {
-	//       "description": "The name of the instance group manager.",
+	//       "description": "The name of the managed instance group.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -19497,7 +19602,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the managed instance group is located.",
+	//       "description": "The name of the zone where the managed instance group is located.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -19527,8 +19632,8 @@
 	ctx_    context.Context
 }
 
-// AggregatedList: Retrieves the list of managed instance groups, and
-// groups them by project and zone.
+// AggregatedList: Retrieves the list of managed instance groups and
+// groups them by zone.
 func (r *InstanceGroupManagersService) AggregatedList(project string) *InstanceGroupManagersAggregatedListCall {
 	c := &InstanceGroupManagersAggregatedListCall{s: r.s, opt_: make(map[string]interface{})}
 	c.project = project
@@ -19686,7 +19791,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Retrieves the list of managed instance groups, and groups them by project and zone.",
+	//   "description": "Retrieves the list of managed instance groups and groups them by zone.",
 	//   "httpMethod": "GET",
 	//   "id": "compute.instanceGroupManagers.aggregatedList",
 	//   "parameterOrder": [
@@ -19749,7 +19854,8 @@
 	ctx_                 context.Context
 }
 
-// Delete: Deletes the specified managed instance group resource.
+// Delete: Deletes the specified managed instance group and all of the
+// instances in that group.
 func (r *InstanceGroupManagersService) Delete(project string, zone string, instanceGroupManager string) *InstanceGroupManagersDeleteCall {
 	c := &InstanceGroupManagersDeleteCall{s: r.s, opt_: make(map[string]interface{})}
 	c.project = project
@@ -19832,7 +19938,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Deletes the specified managed instance group resource.",
+	//   "description": "Deletes the specified managed instance group and all of the instances in that group.",
 	//   "httpMethod": "DELETE",
 	//   "id": "compute.instanceGroupManagers.delete",
 	//   "parameterOrder": [
@@ -19842,7 +19948,7 @@
 	//   ],
 	//   "parameters": {
 	//     "instanceGroupManager": {
-	//       "description": "The name of the instance group manager to delete.",
+	//       "description": "The name of the managed instance group to delete.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -19855,7 +19961,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the managed instance group is located.",
+	//       "description": "The name of the zone where the managed instance group is located.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -19885,11 +19991,14 @@
 	ctx_                                        context.Context
 }
 
-// DeleteInstances: Deletes the specified instances. The instances are
-// deleted and removed from the instance group and any target pools
-// where they are a member. The managed instance group automatically
-// reduces its targetSize value by the number of instances that you
-// delete.
+// DeleteInstances: Schedules a group action to delete the specified
+// instances in the managed instance group. The instances are also
+// removed from any target pools of which they were a member. This
+// method reduces the targetSize of the managed instance group by the
+// number of instances that you delete. This operation is marked as DONE
+// when the action is scheduled even if the instances are still being
+// deleted. You must separately verify the status of the deleting action
+// with the listmanagedinstances method.
 func (r *InstanceGroupManagersService) DeleteInstances(project string, zone string, instanceGroupManager string, instancegroupmanagersdeleteinstancesrequest *InstanceGroupManagersDeleteInstancesRequest) *InstanceGroupManagersDeleteInstancesCall {
 	c := &InstanceGroupManagersDeleteInstancesCall{s: r.s, opt_: make(map[string]interface{})}
 	c.project = project
@@ -19979,7 +20088,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Deletes the specified instances. The instances are deleted and removed from the instance group and any target pools where they are a member. The managed instance group automatically reduces its targetSize value by the number of instances that you delete.",
+	//   "description": "Schedules a group action to delete the specified instances in the managed instance group. The instances are also removed from any target pools of which they were a member. This method reduces the targetSize of the managed instance group by the number of instances that you delete. This operation is marked as DONE when the action is scheduled even if the instances are still being deleted. You must separately verify the status of the deleting action with the listmanagedinstances method.",
 	//   "httpMethod": "POST",
 	//   "id": "compute.instanceGroupManagers.deleteInstances",
 	//   "parameterOrder": [
@@ -19989,7 +20098,7 @@
 	//   ],
 	//   "parameters": {
 	//     "instanceGroupManager": {
-	//       "description": "The name of the instance group manager.",
+	//       "description": "The name of the managed instance group.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -20002,7 +20111,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the managed instance group is located.",
+	//       "description": "The name of the zone where the managed instance group is located.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -20034,7 +20143,8 @@
 	ctx_                 context.Context
 }
 
-// Get: Returns the specified managed instance group resource.
+// Get: Returns all of the details about the specified managed instance
+// group.
 func (r *InstanceGroupManagersService) Get(project string, zone string, instanceGroupManager string) *InstanceGroupManagersGetCall {
 	c := &InstanceGroupManagersGetCall{s: r.s, opt_: make(map[string]interface{})}
 	c.project = project
@@ -20130,7 +20240,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Returns the specified managed instance group resource.",
+	//   "description": "Returns all of the details about the specified managed instance group.",
 	//   "httpMethod": "GET",
 	//   "id": "compute.instanceGroupManagers.get",
 	//   "parameterOrder": [
@@ -20140,7 +20250,7 @@
 	//   ],
 	//   "parameters": {
 	//     "instanceGroupManager": {
-	//       "description": "The name of the instance group manager resource.",
+	//       "description": "The name of the managed instance group.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -20153,7 +20263,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the managed instance group is located.",
+	//       "description": "The name of the zone where the managed instance group is located.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -20183,8 +20293,13 @@
 	ctx_                 context.Context
 }
 
-// Insert: Creates a managed instance group resource in the specified
-// project using the data that is included in the request.
+// Insert: Creates a managed instance group using the information that
+// you specify in the request. After the group is created, it schedules
+// an action to create instances in the group using the specified
+// instance template. This operation is marked as DONE when the group is
+// created even if the instances in the group have not yet been created.
+// You must separately verify the status of the individual instances
+// with the listmanagedinstances method.
 func (r *InstanceGroupManagersService) Insert(project string, zone string, instancegroupmanager *InstanceGroupManager) *InstanceGroupManagersInsertCall {
 	c := &InstanceGroupManagersInsertCall{s: r.s, opt_: make(map[string]interface{})}
 	c.project = project
@@ -20272,7 +20387,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Creates a managed instance group resource in the specified project using the data that is included in the request.",
+	//   "description": "Creates a managed instance group using the information that you specify in the request. After the group is created, it schedules an action to create instances in the group using the specified instance template. This operation is marked as DONE when the group is created even if the instances in the group have not yet been created. You must separately verify the status of the individual instances with the listmanagedinstances method.",
 	//   "httpMethod": "POST",
 	//   "id": "compute.instanceGroupManagers.insert",
 	//   "parameterOrder": [
@@ -20288,7 +20403,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the managed instance group is located.",
+	//       "description": "The name of the zone where you want to create the managed instance group.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -20519,7 +20634,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the managed instance group is located.",
+	//       "description": "The name of the zone where the managed instance group is located.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -20549,7 +20664,12 @@
 	ctx_                 context.Context
 }
 
-// ListManagedInstances: Lists managed instances.
+// ListManagedInstances: Lists all of the instances in the managed
+// instance group. Each instance in the list has a currentAction, which
+// indicates the action that the managed instance group is performing on
+// the instance. For example, if the group is still creating an
+// instance, the currentAction is CREATING. If a previous action failed,
+// the list displays the errors for that failed action.
 func (r *InstanceGroupManagersService) ListManagedInstances(project string, zone string, instanceGroupManager string) *InstanceGroupManagersListManagedInstancesCall {
 	c := &InstanceGroupManagersListManagedInstancesCall{s: r.s, opt_: make(map[string]interface{})}
 	c.project = project
@@ -20634,7 +20754,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Lists managed instances.",
+	//   "description": "Lists all of the instances in the managed instance group. Each instance in the list has a currentAction, which indicates the action that the managed instance group is performing on the instance. For example, if the group is still creating an instance, the currentAction is CREATING. If a previous action failed, the list displays the errors for that failed action.",
 	//   "httpMethod": "POST",
 	//   "id": "compute.instanceGroupManagers.listManagedInstances",
 	//   "parameterOrder": [
@@ -20657,7 +20777,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the managed instance group is located.",
+	//       "description": "The name of the zone where the managed instance group is located.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -20688,9 +20808,13 @@
 	ctx_                                          context.Context
 }
 
-// RecreateInstances: Recreates the specified instances. The instances
-// are deleted, then recreated using the managed instance group's
-// current instance template.
+// RecreateInstances: Schedules a group action to recreate the specified
+// instances in the managed instance group. The instances are deleted
+// and recreated using the current instance template for the managed
+// instance group. This operation is marked as DONE when the action is
+// scheduled even if the instances have not yet been recreated. You must
+// separately verify the status of the recreating action with the
+// listmanagedinstances method.
 func (r *InstanceGroupManagersService) RecreateInstances(project string, zone string, instanceGroupManager string, instancegroupmanagersrecreateinstancesrequest *InstanceGroupManagersRecreateInstancesRequest) *InstanceGroupManagersRecreateInstancesCall {
 	c := &InstanceGroupManagersRecreateInstancesCall{s: r.s, opt_: make(map[string]interface{})}
 	c.project = project
@@ -20780,7 +20904,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Recreates the specified instances. The instances are deleted, then recreated using the managed instance group's current instance template.",
+	//   "description": "Schedules a group action to recreate the specified instances in the managed instance group. The instances are deleted and recreated using the current instance template for the managed instance group. This operation is marked as DONE when the action is scheduled even if the instances have not yet been recreated. You must separately verify the status of the recreating action with the listmanagedinstances method.",
 	//   "httpMethod": "POST",
 	//   "id": "compute.instanceGroupManagers.recreateInstances",
 	//   "parameterOrder": [
@@ -20790,7 +20914,7 @@
 	//   ],
 	//   "parameters": {
 	//     "instanceGroupManager": {
-	//       "description": "The name of the instance group manager.",
+	//       "description": "The name of the managed instance group.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -20803,7 +20927,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the managed instance group is located.",
+	//       "description": "The name of the zone where the managed instance group is located.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -20838,8 +20962,11 @@
 
 // Resize: Resizes the managed instance group. If you increase the size,
 // the group creates new instances using the current instance template.
-// If you decrease the size, the group removes instances in the order
-// that is outlined in Resizing a managed instance group.
+// If you decrease the size, the group deletes instances. The resize
+// operation is marked DONE when the resize actions are scheduled even
+// if the group has not yet added or deleted any instances. You must
+// separately verify the status of the creating or deleting actions with
+// the listmanagedinstances method.
 func (r *InstanceGroupManagersService) Resize(project string, zone string, instanceGroupManager string, size int64) *InstanceGroupManagersResizeCall {
 	c := &InstanceGroupManagersResizeCall{s: r.s, opt_: make(map[string]interface{})}
 	c.project = project
@@ -20924,7 +21051,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Resizes the managed instance group. If you increase the size, the group creates new instances using the current instance template. If you decrease the size, the group removes instances in the order that is outlined in Resizing a managed instance group.",
+	//   "description": "Resizes the managed instance group. If you increase the size, the group creates new instances using the current instance template. If you decrease the size, the group deletes instances. The resize operation is marked DONE when the resize actions are scheduled even if the group has not yet added or deleted any instances. You must separately verify the status of the creating or deleting actions with the listmanagedinstances method.",
 	//   "httpMethod": "POST",
 	//   "id": "compute.instanceGroupManagers.resize",
 	//   "parameterOrder": [
@@ -20935,7 +21062,7 @@
 	//   ],
 	//   "parameters": {
 	//     "instanceGroupManager": {
-	//       "description": "The name of the instance group manager.",
+	//       "description": "The name of the managed instance group.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -20955,7 +21082,7 @@
 	//       "type": "integer"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the managed instance group is located.",
+	//       "description": "The name of the zone where the managed instance group is located.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -21233,7 +21360,7 @@
 	//   ],
 	//   "parameters": {
 	//     "instanceGroupManager": {
-	//       "description": "The name of the instance group manager.",
+	//       "description": "The name of the managed instance group.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -21246,7 +21373,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the managed instance group is located.",
+	//       "description": "The name of the zone where the managed instance group is located.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -21279,9 +21406,13 @@
 	ctx_                                       context.Context
 }
 
-// SetTargetPools: Modifies the target pools to which all new instances
-// in this group are assigned. The target pools for existing instances
-// in the group do not change unless you recreate them.
+// SetTargetPools: Modifies the target pools to which all instances in
+// this managed instance group are assigned. The target pools
+// automatically apply to all of the instances in the managed instance
+// group. This operation is marked DONE when you make the request even
+// if the instances have not yet been added to their target pools. The
+// change might take some time to apply to all of the instances in the
+// group depending on the size of the group.
 func (r *InstanceGroupManagersService) SetTargetPools(project string, zone string, instanceGroupManager string, instancegroupmanagerssettargetpoolsrequest *InstanceGroupManagersSetTargetPoolsRequest) *InstanceGroupManagersSetTargetPoolsCall {
 	c := &InstanceGroupManagersSetTargetPoolsCall{s: r.s, opt_: make(map[string]interface{})}
 	c.project = project
@@ -21371,7 +21502,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Modifies the target pools to which all new instances in this group are assigned. The target pools for existing instances in the group do not change unless you recreate them.",
+	//   "description": "Modifies the target pools to which all instances in this managed instance group are assigned. The target pools automatically apply to all of the instances in the managed instance group. This operation is marked DONE when you make the request even if the instances have not yet been added to their target pools. The change might take some time to apply to all of the instances in the group depending on the size of the group.",
 	//   "httpMethod": "POST",
 	//   "id": "compute.instanceGroupManagers.setTargetPools",
 	//   "parameterOrder": [
@@ -21381,7 +21512,7 @@
 	//   ],
 	//   "parameters": {
 	//     "instanceGroupManager": {
-	//       "description": "The name of the instance group manager.",
+	//       "description": "The name of the managed instance group.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -21394,7 +21525,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the managed instance group is located.",
+	//       "description": "The name of the zone where the managed instance group is located.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -21427,8 +21558,10 @@
 	ctx_                              context.Context
 }
 
-// AddInstances: Adds a list of instances to an instance group. All of
-// the instances in the instance group must be in the same network.
+// AddInstances: Adds a list of instances to the specified instance
+// group. All of the instances in the instance group must be in the same
+// network/subnetwork. TODO: Change to comment to state "if IG is load
+// balanced."
 func (r *InstanceGroupsService) AddInstances(project string, zone string, instanceGroup string, instancegroupsaddinstancesrequest *InstanceGroupsAddInstancesRequest) *InstanceGroupsAddInstancesCall {
 	c := &InstanceGroupsAddInstancesCall{s: r.s, opt_: make(map[string]interface{})}
 	c.project = project
@@ -21518,7 +21651,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Adds a list of instances to an instance group. All of the instances in the instance group must be in the same network.",
+	//   "description": "Adds a list of instances to the specified instance group. All of the instances in the instance group must be in the same network/subnetwork. TODO: Change to comment to state \"if IG is load balanced.\"",
 	//   "httpMethod": "POST",
 	//   "id": "compute.instanceGroups.addInstances",
 	//   "parameterOrder": [
@@ -21541,7 +21674,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the instance group is located.",
+	//       "description": "The name of the zone where the instance group is located.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -21571,7 +21704,7 @@
 	ctx_    context.Context
 }
 
-// AggregatedList: Retrieves the list of instance groups, and sorts them
+// AggregatedList: Retrieves the list of instance groups and sorts them
 // by zone.
 func (r *InstanceGroupsService) AggregatedList(project string) *InstanceGroupsAggregatedListCall {
 	c := &InstanceGroupsAggregatedListCall{s: r.s, opt_: make(map[string]interface{})}
@@ -21729,7 +21862,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Retrieves the list of instance groups, and sorts them by zone.",
+	//   "description": "Retrieves the list of instance groups and sorts them by zone.",
 	//   "httpMethod": "GET",
 	//   "id": "compute.instanceGroups.aggregatedList",
 	//   "parameterOrder": [
@@ -21792,7 +21925,8 @@
 	ctx_          context.Context
 }
 
-// Delete: Deletes the specified instance group.
+// Delete: Deletes the specified instance group. The instances in the
+// group are not deleted.
 func (r *InstanceGroupsService) Delete(project string, zone string, instanceGroup string) *InstanceGroupsDeleteCall {
 	c := &InstanceGroupsDeleteCall{s: r.s, opt_: make(map[string]interface{})}
 	c.project = project
@@ -21875,7 +22009,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Deletes the specified instance group.",
+	//   "description": "Deletes the specified instance group. The instances in the group are not deleted.",
 	//   "httpMethod": "DELETE",
 	//   "id": "compute.instanceGroups.delete",
 	//   "parameterOrder": [
@@ -21898,7 +22032,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the instance group is located.",
+	//       "description": "The name of the zone where the instance group is located.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -22046,7 +22180,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the instance group is located.",
+	//       "description": "The name of the zone where the instance group is located.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -22181,7 +22315,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the instance group is located.",
+	//       "description": "The name of the zone where you want to create the instance group.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -22412,7 +22546,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the instance group is located.",
+	//       "description": "The name of the zone where the instance group is located.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -22443,9 +22577,7 @@
 	ctx_                               context.Context
 }
 
-// ListInstances: Lists instances in an instance group. The parameters
-// for this method specify whether the list filters instances by state
-// and named ports information.
+// ListInstances: Lists the instances in the specified instance group.
 func (r *InstanceGroupsService) ListInstances(project string, zone string, instanceGroup string, instancegroupslistinstancesrequest *InstanceGroupsListInstancesRequest) *InstanceGroupsListInstancesCall {
 	c := &InstanceGroupsListInstancesCall{s: r.s, opt_: make(map[string]interface{})}
 	c.project = project
@@ -22600,7 +22732,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Lists instances in an instance group. The parameters for this method specify whether the list filters instances by state and named ports information.",
+	//   "description": "Lists the instances in the specified instance group.",
 	//   "httpMethod": "POST",
 	//   "id": "compute.instanceGroups.listInstances",
 	//   "parameterOrder": [
@@ -22647,7 +22779,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the instance group is located.",
+	//       "description": "The name of the zone where the instance group is located.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -22681,7 +22813,8 @@
 	ctx_                                 context.Context
 }
 
-// RemoveInstances: Removes a list of instances from an instance group.
+// RemoveInstances: Removes one or more instances from the specified
+// instance group, but does not delete those instances.
 func (r *InstanceGroupsService) RemoveInstances(project string, zone string, instanceGroup string, instancegroupsremoveinstancesrequest *InstanceGroupsRemoveInstancesRequest) *InstanceGroupsRemoveInstancesCall {
 	c := &InstanceGroupsRemoveInstancesCall{s: r.s, opt_: make(map[string]interface{})}
 	c.project = project
@@ -22771,7 +22904,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Removes a list of instances from an instance group.",
+	//   "description": "Removes one or more instances from the specified instance group, but does not delete those instances.",
 	//   "httpMethod": "POST",
 	//   "id": "compute.instanceGroups.removeInstances",
 	//   "parameterOrder": [
@@ -22794,7 +22927,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the instance group is located.",
+	//       "description": "The name of the zone where the instance group is located.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -22827,7 +22960,7 @@
 	ctx_                               context.Context
 }
 
-// SetNamedPorts: Sets the named ports in an instance group.
+// SetNamedPorts: Sets the named ports for the specified instance group.
 func (r *InstanceGroupsService) SetNamedPorts(project string, zone string, instanceGroup string, instancegroupssetnamedportsrequest *InstanceGroupsSetNamedPortsRequest) *InstanceGroupsSetNamedPortsCall {
 	c := &InstanceGroupsSetNamedPortsCall{s: r.s, opt_: make(map[string]interface{})}
 	c.project = project
@@ -22917,7 +23050,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Sets the named ports in an instance group.",
+	//   "description": "Sets the named ports for the specified instance group.",
 	//   "httpMethod": "POST",
 	//   "id": "compute.instanceGroups.setNamedPorts",
 	//   "parameterOrder": [
@@ -22940,7 +23073,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the instance group is located.",
+	//       "description": "The name of the zone where the instance group is located.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -23746,7 +23879,7 @@
 	ctx_    context.Context
 }
 
-// AggregatedList:
+// AggregatedList: Retrieves aggregated list of instance resources.
 // For details, see https://cloud.google.com/compute/docs/reference/latest/instances/aggregatedList
 func (r *InstancesService) AggregatedList(project string) *InstancesAggregatedListCall {
 	c := &InstancesAggregatedListCall{s: r.s, opt_: make(map[string]interface{})}
@@ -23904,6 +24037,7 @@
 	}
 	return ret, nil
 	// {
+	//   "description": "Retrieves aggregated list of instance resources.",
 	//   "httpMethod": "GET",
 	//   "id": "compute.instances.aggregatedList",
 	//   "parameterOrder": [
@@ -25543,6 +25677,304 @@
 
 }
 
+// method id "compute.instances.setLabels":
+
+type InstancesSetLabelsCall struct {
+	s                         *Service
+	project                   string
+	zone                      string
+	instance                  string
+	instancessetlabelsrequest *InstancesSetLabelsRequest
+	opt_                      map[string]interface{}
+	ctx_                      context.Context
+}
+
+// SetLabels: Sets labels for the specified instance to the data
+// included in the request.
+func (r *InstancesService) SetLabels(project string, zone string, instance string, instancessetlabelsrequest *InstancesSetLabelsRequest) *InstancesSetLabelsCall {
+	c := &InstancesSetLabelsCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.zone = zone
+	c.instance = instance
+	c.instancessetlabelsrequest = instancessetlabelsrequest
+	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 *InstancesSetLabelsCall) Fields(s ...googleapi.Field) *InstancesSetLabelsCall {
+	c.opt_["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 *InstancesSetLabelsCall) Context(ctx context.Context) *InstancesSetLabelsCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *InstancesSetLabelsCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancessetlabelsrequest)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instances/{instance}/setLabels")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"project":  c.project,
+		"zone":     c.zone,
+		"instance": c.instance,
+	})
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "compute.instances.setLabels" 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 *InstancesSetLabelsCall) Do() (*Operation, error) {
+	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,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Sets labels for the specified instance to the data included in the request.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.instances.setLabels",
+	//   "parameterOrder": [
+	//     "project",
+	//     "zone",
+	//     "instance"
+	//   ],
+	//   "parameters": {
+	//     "instance": {
+	//       "description": "Name of the instance scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "project": {
+	//       "description": "Project ID for this request.",
+	//       "location": "path",
+	//       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "zone": {
+	//       "description": "The name of the zone for this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/zones/{zone}/instances/{instance}/setLabels",
+	//   "request": {
+	//     "$ref": "InstancesSetLabelsRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.instances.setMachineType":
+
+type InstancesSetMachineTypeCall struct {
+	s                              *Service
+	project                        string
+	zone                           string
+	instance                       string
+	instancessetmachinetyperequest *InstancesSetMachineTypeRequest
+	opt_                           map[string]interface{}
+	ctx_                           context.Context
+}
+
+// SetMachineType: Sets machine type for the specified instances to the
+// data included in the request.
+func (r *InstancesService) SetMachineType(project string, zone string, instance string, instancessetmachinetyperequest *InstancesSetMachineTypeRequest) *InstancesSetMachineTypeCall {
+	c := &InstancesSetMachineTypeCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.zone = zone
+	c.instance = instance
+	c.instancessetmachinetyperequest = instancessetmachinetyperequest
+	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 *InstancesSetMachineTypeCall) Fields(s ...googleapi.Field) *InstancesSetMachineTypeCall {
+	c.opt_["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 *InstancesSetMachineTypeCall) Context(ctx context.Context) *InstancesSetMachineTypeCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *InstancesSetMachineTypeCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancessetmachinetyperequest)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instances/{instance}/setMachineType")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"project":  c.project,
+		"zone":     c.zone,
+		"instance": c.instance,
+	})
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "compute.instances.setMachineType" 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 *InstancesSetMachineTypeCall) Do() (*Operation, error) {
+	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,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Sets machine type for the specified instances to the data included in the request.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.instances.setMachineType",
+	//   "parameterOrder": [
+	//     "project",
+	//     "zone",
+	//     "instance"
+	//   ],
+	//   "parameters": {
+	//     "instance": {
+	//       "description": "Name of the instance scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "project": {
+	//       "description": "Project ID for this request.",
+	//       "location": "path",
+	//       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "zone": {
+	//       "description": "The name of the zone for this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/zones/{zone}/instances/{instance}/setMachineType",
+	//   "request": {
+	//     "$ref": "InstancesSetMachineTypeRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
 // method id "compute.instances.setMetadata":
 
 type InstancesSetMetadataCall struct {
diff --git a/compute/v1/compute-api.json b/compute/v1/compute-api.json
index 4272d1e..9b2e56d 100644
--- a/compute/v1/compute-api.json
+++ b/compute/v1/compute-api.json
@@ -1,11 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/DxnE4TNUGn7fmGw0kTlvolIQtuA\"",
+ "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/K2YWeNBEH2yOCjdgDssBGJY_KU4\"",
  "discoveryVersion": "v1",
  "id": "compute:v1",
  "name": "compute",
  "version": "v1",
- "revision": "20150831",
+ "revision": "20151015",
  "title": "Compute Engine API",
  "description": "API for the Google Compute Engine service.",
  "ownerDomain": "google.com",
@@ -354,6 +354,7 @@
     },
     "interface": {
      "type": "string",
+     "description": "Specifies the disk interface to use for attaching this disk, either SCSI or NVME. The default is SCSI. For performance characteristics of SCSI over NVMe, see Local SSD performance.",
      "enum": [
       "NVME",
       "SCSI"
@@ -819,9 +820,11 @@
     "protocol": {
      "type": "string",
      "enum": [
-      "HTTP"
+      "HTTP",
+      "HTTPS"
      ],
      "enumDescriptions": [
+      "",
       ""
      ]
     },
@@ -1530,7 +1533,7 @@
     },
     "kind": {
      "type": "string",
-     "description": "Type of the resource.",
+     "description": "[Output Only] Type of the resource. Always compute#forwardingRule.",
      "default": "compute#forwardingRule"
     },
     "name": {
@@ -1540,7 +1543,7 @@
     },
     "portRange": {
      "type": "string",
-     "description": "Applicable only when `IPProtocol` is TCP, UDP, or SCTP, only packets addressed to ports in the specified range will be forwarded to target. If portRange is left empty (default value), all ports are forwarded. Forwarding rules with the same `[IPAddress, IPProtocol]` pair must have disjoint port ranges."
+     "description": "Applicable only when IPProtocol is TCP, UDP, or SCTP, only packets addressed to ports in the specified range will be forwarded to target. Forwarding rules with the same `[IPAddress, IPProtocol]` pair must have disjoint port ranges."
     },
     "region": {
      "type": "string",
@@ -1745,14 +1748,14 @@
     },
     "hosts": {
      "type": "array",
-     "description": "The list of host patterns to match. They must be valid hostnames except that they may start with *. or *-. The * acts like a glob and will match any string of atoms (separated by .s and -s) to the left.",
+     "description": "The list of host patterns to match. They must be valid hostnames, except * will match any string of ([a-z0-9-.]*). In that case, * must be the first character and must be followed in the pattern by either - or ..",
      "items": {
       "type": "string"
      }
     },
     "pathMatcher": {
      "type": "string",
-     "description": "The name of the PathMatcher to match the path portion of the URL, if the this hostRule matches the URL's host portion."
+     "description": "The name of the PathMatcher to use to match the path portion of the URL if the hostRule matches the URL's host portion."
     }
    }
   },
@@ -1854,6 +1857,104 @@
     }
    }
   },
+  "HttpsHealthCheck": {
+   "id": "HttpsHealthCheck",
+   "type": "object",
+   "description": "An HttpsHealthCheck resource. This resource defines a template for how individual instances should be checked for health, via HTTPS.",
+   "properties": {
+    "checkIntervalSec": {
+     "type": "integer",
+     "description": "How often (in seconds) to send a health check. The default value is 5 seconds.",
+     "format": "int32"
+    },
+    "creationTimestamp": {
+     "type": "string",
+     "description": "[Output Only] Creation timestamp in RFC3339 text format."
+    },
+    "description": {
+     "type": "string",
+     "description": "An optional textual description of the resource; provided by the client when the resource is created."
+    },
+    "healthyThreshold": {
+     "type": "integer",
+     "description": "A so-far unhealthy instance will be marked healthy after this many consecutive successes. The default value is 2.",
+     "format": "int32"
+    },
+    "host": {
+     "type": "string",
+     "description": "The value of the host header in the HTTPS health check request. If left empty (default value), the public IP on behalf of which this health check is performed will be used."
+    },
+    "id": {
+     "type": "string",
+     "description": "[Output Only] Unique identifier for the resource; defined by the server.",
+     "format": "uint64"
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of the resource.",
+     "default": "compute#httpsHealthCheck"
+    },
+    "name": {
+     "type": "string",
+     "description": "Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.",
+     "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?"
+    },
+    "port": {
+     "type": "integer",
+     "description": "The TCP port number for the HTTPS health check request. The default value is 443.",
+     "format": "int32"
+    },
+    "requestPath": {
+     "type": "string",
+     "description": "The request path of the HTTPS health check request. The default value is \"/\"."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "[Output Only] Server-defined URL for the resource."
+    },
+    "timeoutSec": {
+     "type": "integer",
+     "description": "How long (in seconds) to wait before claiming failure. The default value is 5 seconds. It is invalid for timeoutSec to have a greater value than checkIntervalSec.",
+     "format": "int32"
+    },
+    "unhealthyThreshold": {
+     "type": "integer",
+     "description": "A so-far healthy instance will be marked unhealthy after this many consecutive failures. The default value is 2.",
+     "format": "int32"
+    }
+   }
+  },
+  "HttpsHealthCheckList": {
+   "id": "HttpsHealthCheckList",
+   "type": "object",
+   "description": "Contains a list of HttpsHealthCheck resources.",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "[Output Only] Unique identifier for the resource; defined by the server."
+    },
+    "items": {
+     "type": "array",
+     "description": "A list of HttpsHealthCheck resources.",
+     "items": {
+      "$ref": "HttpsHealthCheck"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of resource.",
+     "default": "compute#httpsHealthCheckList"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "[Output Only] A token used to continue a truncated list request."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "[Output Only] Server-defined URL for this resource."
+    }
+   }
+  },
   "Image": {
    "id": "Image",
    "type": "object",
@@ -1988,7 +2089,7 @@
     },
     "items": {
      "type": "array",
-     "description": "A list of Image resources.",
+     "description": "[Output Only] A list of Image resources.",
      "items": {
       "$ref": "Image"
      }
@@ -2168,12 +2269,12 @@
     },
     "fingerprint": {
      "type": "string",
-     "description": "[Output Only] The fingerprint of the named ports information. The system uses this fingerprint to detect conflicts when multiple users change the named ports information concurrently.",
+     "description": "[Output Only] The fingerprint of the named ports. The system uses this fingerprint to detect conflicts when multiple users change the named ports concurrently.",
      "format": "byte"
     },
     "id": {
      "type": "string",
-     "description": "[Output Only] A unique identifier for this instance group. The server defines this identifier.",
+     "description": "[Output Only] A unique identifier for this resource type. The server generates this identifier.",
      "format": "uint64"
     },
     "kind": {
@@ -2193,18 +2294,18 @@
     },
     "namedPorts": {
      "type": "array",
-     "description": "Assigns a name to a port number. For example: {name: ?http?, port: 80} This allows the system to reference ports by the assigned name instead of a port number. Named ports can also contain multiple ports. For example: [{name: ?http?, port: 80},{name: \"http\", port: 8080}] Named ports apply to all instances in this instance group.",
+     "description": "Assigns a name to a port number. For example: {name: \"http\", port: 80}\n\nThis allows the system to reference ports by the assigned name instead of a port number. Named ports can also contain multiple ports. For example: [{name: \"http\", port: 80},{name: \"http\", port: 8080}] \n\nNamed ports apply to all instances in this instance group.",
      "items": {
       "$ref": "NamedPort"
      }
     },
     "network": {
      "type": "string",
-     "description": "The URL of the network to which all instances in the instance group belong."
+     "description": "[Output Only] The URL of the network to which all instances in the instance group belong."
     },
     "selfLink": {
      "type": "string",
-     "description": "[Output Only] The URL for this instance group. The server defines this URL."
+     "description": "[Output Only] The URL for this instance group. The server generates this URL."
     },
     "size": {
      "type": "integer",
@@ -2213,7 +2314,7 @@
     },
     "zone": {
      "type": "string",
-     "description": "The URL of the zone where the instance group is located."
+     "description": "[Output Only] The URL of the zone where the instance group is located."
     }
    }
   },
@@ -2223,7 +2324,7 @@
    "properties": {
     "id": {
      "type": "string",
-     "description": "[Output Only] A unique identifier for this aggregated list of instance groups. The server defines this identifier."
+     "description": "[Output Only] A unique identifier for this aggregated list of instance groups. The server generates this identifier."
     },
     "items": {
      "type": "object",
@@ -2244,7 +2345,7 @@
     },
     "selfLink": {
      "type": "string",
-     "description": "[Output Only] A unique identifier for this aggregated list of instance groups. The server defines this identifier."
+     "description": "[Output Only] The URL for this resource type. The server generates this URL."
     }
    }
   },
@@ -2255,11 +2356,11 @@
    "properties": {
     "id": {
      "type": "string",
-     "description": "[Output Only] A unique identifier for this list of instance groups. The server defines this identifier."
+     "description": "[Output Only] A unique identifier for this list of instance groups. The server generates this identifier."
     },
     "items": {
      "type": "array",
-     "description": "A list of InstanceGroup resources.",
+     "description": "A list of instance groups.",
      "items": {
       "$ref": "InstanceGroup"
      }
@@ -2275,7 +2376,7 @@
     },
     "selfLink": {
      "type": "string",
-     "description": "[Output Only] The URL for this instance group. The server defines this URL."
+     "description": "[Output Only] The URL for this resource type. The server generates this URL."
     }
    }
   },
@@ -2300,7 +2401,7 @@
     },
     "currentActions": {
      "$ref": "InstanceGroupManagerActionsSummary",
-     "description": "[Output Only] The list of instance actions and the number of instances in this managed instance group that are scheduled for those actions."
+     "description": "[Output Only] The list of instance actions and the number of instances in this managed instance group that are scheduled for each of those actions."
     },
     "description": {
      "type": "string",
@@ -2308,17 +2409,17 @@
     },
     "fingerprint": {
      "type": "string",
-     "description": "[Output Only] The fingerprint of the target pools information, which is a hash of the contents. This field is used for optimistic locking when updating the target pool entries.",
+     "description": "[Output Only] The fingerprint of the target pools information. You can use this optional field for optimistic locking when you update the target pool entries.",
      "format": "byte"
     },
     "id": {
      "type": "string",
-     "description": "[Output Only] A unique identifier for this managed instance group. The server defines this identifier.",
+     "description": "[Output Only] A unique identifier for this resource type. The server generates this identifier.",
      "format": "uint64"
     },
     "instanceGroup": {
      "type": "string",
-     "description": "[Output Only] The URL of the InstanceGroup resource."
+     "description": "[Output Only] The URL of the Instance Group resource."
     },
     "instanceTemplate": {
      "type": "string",
@@ -2346,11 +2447,11 @@
     },
     "selfLink": {
      "type": "string",
-     "description": "[Output Only] Server-defined URL for this managed instance group."
+     "description": "[Output Only] The URL for this managed instance group. The server defines this URL."
     },
     "targetPools": {
      "type": "array",
-     "description": "The URLs of all TargetPool resources to which new instances in the instanceGroup field are added. Updating the target pool values does not affect existing instances.",
+     "description": "The URLs for all TargetPool resources to which instances in the instanceGroup field are added. The target pools automatically apply to all of the instances in the managed instance group.",
      "items": {
       "type": "string"
      }
@@ -2367,7 +2468,7 @@
     },
     "zone": {
      "type": "string",
-     "description": "The URL of the zone where the managed instance group is located."
+     "description": "The name of the zone where the managed instance group is located."
     }
    }
   },
@@ -2377,7 +2478,7 @@
    "properties": {
     "abandoning": {
      "type": "integer",
-     "description": "[Output Only] Total number of instances in the managed instance group that are scheduled to be abandoned. Abandoning an instance removes it from the managed instance group without deleting it.",
+     "description": "[Output Only] The total number of instances in the managed instance group that are scheduled to be abandoned. Abandoning an instance removes it from the managed instance group without deleting it.",
      "format": "int32"
     },
     "creating": {
@@ -2392,7 +2493,7 @@
     },
     "none": {
      "type": "integer",
-     "description": "[Output Only] The number of instances in the managed instance group that currently have no scheduled actions.",
+     "description": "[Output Only] The number of instances in the managed instance group that are running and have no scheduled actions.",
      "format": "int32"
     },
     "recreating": {
@@ -2418,19 +2519,19 @@
    "properties": {
     "id": {
      "type": "string",
-     "description": "[Output Only] A unique identifier for this aggregated list of managed instance groups. The server defines this identifier."
+     "description": "[Output Only] A unique identifier for this aggregated list of managed instance groups. The server generates this identifier."
     },
     "items": {
      "type": "object",
-     "description": "A map of filtered managed instance group lists.",
+     "description": "[Output Only] A map of filtered managed instance group lists.",
      "additionalProperties": {
       "$ref": "InstanceGroupManagersScopedList",
-      "description": "The name of the scope that contains this set of managed instance groups."
+      "description": "[Output Only] The name of the scope that contains this set of managed instance groups."
      }
     },
     "kind": {
      "type": "string",
-     "description": "[Output Only] Type of the resource. Always compute#instanceGroupManagerAggregatedList for an aggregated list of managed instance groups.",
+     "description": "[Output Only] The resource type, which is always compute#instanceGroupManagerAggregatedList for an aggregated list of managed instance groups.",
      "default": "compute#instanceGroupManagerAggregatedList"
     },
     "nextPageToken": {
@@ -2439,29 +2540,29 @@
     },
     "selfLink": {
      "type": "string",
-     "description": "[Output Only] The URL for this aggregated list of managed instance groups. The server defines this URL."
+     "description": "[Output Only] The URL for this resource type. The server generates this URL."
     }
    }
   },
   "InstanceGroupManagerList": {
    "id": "InstanceGroupManagerList",
    "type": "object",
-   "description": "[Output Only] A list of InstanceGroupManager resources.",
+   "description": "[Output Only] A list of managed instance groups.",
    "properties": {
     "id": {
      "type": "string",
-     "description": "[Output Only] A unique identifier for this managed instance group. The server defines this identifier."
+     "description": "[Output Only] A unique identifier for this resource type. The server generates this identifier."
     },
     "items": {
      "type": "array",
-     "description": "[Output Only] A list of managed instance group resources.",
+     "description": "[Output Only] A list of managed instance groups.",
      "items": {
       "$ref": "InstanceGroupManager"
      }
     },
     "kind": {
      "type": "string",
-     "description": "[Output Only] Type of the resource. Always compute#instanceGroupManagerList for a list of managed instance group resources.",
+     "description": "[Output Only] The resource type, which is always compute#instanceGroupManagerList for a list of managed instance groups.",
      "default": "compute#instanceGroupManagerList"
     },
     "nextPageToken": {
@@ -2470,7 +2571,7 @@
     },
     "selfLink": {
      "type": "string",
-     "description": "[Output Only] The URL for this managed instance group. The server defines this URL."
+     "description": "[Output Only] The URL for this resource type. The server generates this URL."
     }
    }
   },
@@ -2480,7 +2581,7 @@
    "properties": {
     "instances": {
      "type": "array",
-     "description": "The names of instances to abandon from the managed instance group.",
+     "description": "The URL for one or more instances to abandon from the managed instance group.",
      "items": {
       "type": "string"
      }
@@ -2493,7 +2594,7 @@
    "properties": {
     "instances": {
      "type": "array",
-     "description": "The names of one or more instances to delete.",
+     "description": "The list of instances to delete from this managed instance group. Specify one or more instance URLs.",
      "items": {
       "type": "string"
      }
@@ -2506,7 +2607,7 @@
    "properties": {
     "managedInstances": {
      "type": "array",
-     "description": "List of managed instances. If empty - all instances are listed.",
+     "description": "[Output Only] The list of instances in the managed instance group.",
      "items": {
       "$ref": "ManagedInstance"
      }
@@ -2519,7 +2620,7 @@
    "properties": {
     "instances": {
      "type": "array",
-     "description": "The names of one or more instances to recreate.",
+     "description": "The URL for one or more instances to recreate.",
      "items": {
       "type": "string"
      }
@@ -2618,12 +2719,12 @@
    "properties": {
     "fingerprint": {
      "type": "string",
-     "description": "The fingerprint of the target pools information, which is a hash of the contents. This field is used for optimistic locking when updating the target pool entries.",
+     "description": "The fingerprint of the target pools information. Use this optional property to prevent conflicts when multiple users change the target pools settings concurrently. Obtain the fingerprint with the instanceGroupManagers.get method. Then, include the fingerprint in your request to ensure that you do not overwrite changes that were applied from another concurrent request.",
      "format": "byte"
     },
     "targetPools": {
      "type": "array",
-     "description": "The list of target pool URLs that instances in this managed instance group belong to. When the managed instance group creates new instances, the group automatically adds those instances to the target pools that are specified in this parameter. Changing the value of this parameter does not change the target pools of existing instances in this managed instance group.",
+     "description": "The list of target pool URLs that instances in this managed instance group belong to. The managed instance group applies these target pools to all of the instances in the group. Existing instances and new instances in the group all receive these target pool settings.",
      "items": {
       "type": "string"
      }
@@ -2636,7 +2737,7 @@
    "properties": {
     "instances": {
      "type": "array",
-     "description": "The instances to add to the instance group.",
+     "description": "The list of instances to add to the instance group.",
      "items": {
       "$ref": "InstanceReference"
      }
@@ -2649,11 +2750,11 @@
    "properties": {
     "id": {
      "type": "string",
-     "description": "[Output Only] A unique identifier for this list of instance groups. The server defines this identifier."
+     "description": "[Output Only] A unique identifier for this list of instance groups. The server generates this identifier."
     },
     "items": {
      "type": "array",
-     "description": "A list of InstanceWithNamedPorts resources, which contains all named ports for the given instance.",
+     "description": "[Output Only] A list of instances and any named ports that are assigned to those instances.",
      "items": {
       "$ref": "InstanceWithNamedPorts"
      }
@@ -2669,7 +2770,7 @@
     },
     "selfLink": {
      "type": "string",
-     "description": "[Output Only] The URL for this list of instance groups. The server defines this URL."
+     "description": "[Output Only] The URL for this list of instance groups. The server generates this URL."
     }
    }
   },
@@ -2697,7 +2798,7 @@
    "properties": {
     "instances": {
      "type": "array",
-     "description": "The instances to remove from the instance group.",
+     "description": "The list of instances to remove from the instance group.",
      "items": {
       "$ref": "InstanceReference"
      }
@@ -2786,7 +2887,7 @@
    "properties": {
     "fingerprint": {
      "type": "string",
-     "description": "The fingerprint of the named ports information, which is a hash of the contents. Use this field for optimistic locking when you update the named ports entries.",
+     "description": "The fingerprint of the named ports information for this instance group. Use this optional property to prevent conflicts when multiple users change the named ports settings concurrently. Obtain the fingerprint with the instanceGroups.get method. Then, include the fingerprint in your request to ensure that you do not overwrite changes that were applied from another concurrent request.",
      "format": "byte"
     },
     "namedPorts": {
@@ -2850,7 +2951,7 @@
    "properties": {
     "canIpForward": {
      "type": "boolean",
-     "description": "A boolean that specifies if instances created from this template can send packets with source IP addresses other than their own or receive packets with destination IP addresses other than their own. If you use these instances as an IP gateway or as the next-hop in a Route resource, specify true. Otherwise, specify false."
+     "description": "Enables instances created based on this template to send packets with source IP addresses other than their own and receive packets with destination IP addresses other than their own. If these instances will be used as an IP gateway or it will be set as the next-hop in a Route resource, specify true. If unsure, leave this set to false. See the canIpForward documentation for more information."
     },
     "description": {
      "type": "string",
@@ -2878,14 +2979,14 @@
     },
     "networkInterfaces": {
      "type": "array",
-     "description": "An array of network access configurations for this interface. This specifies how this interface is configured to interact with other network services, such as connecting to the internet. Currently, ONE_TO_ONE_NAT is the only supported access configuration. If you do not specify any access configurations, the instances that are created from this template will have no external internet access.",
+     "description": "An array of network access configurations for this interface.",
      "items": {
       "$ref": "NetworkInterface"
      }
     },
     "scheduling": {
      "$ref": "Scheduling",
-     "description": "A list of scheduling options for the instances that are created from this template."
+     "description": "Specifies the scheduling options for the instances that are created from this template."
     },
     "serviceAccounts": {
      "type": "array",
@@ -2905,7 +3006,8 @@
    "type": "object",
    "properties": {
     "instance": {
-     "type": "string"
+     "type": "string",
+     "description": "The URL for a specific instance."
     }
    }
   },
@@ -2934,7 +3036,7 @@
     },
     "name": {
      "type": "string",
-     "description": "The name of the instance template. The name must be 1-63 characters long, and comply with RFC1035.",
+     "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.",
      "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
      "annotations": {
       "required": [
@@ -2944,7 +3046,7 @@
     },
     "properties": {
      "$ref": "InstanceProperties",
-     "description": "The instance properties for the instance template resource."
+     "description": "The instance properties for this instance template."
     },
     "selfLink": {
      "type": "string",
@@ -2963,7 +3065,7 @@
     },
     "items": {
      "type": "array",
-     "description": "A list of InstanceTemplate resources.",
+     "description": "[Output Only] list of InstanceTemplate resources.",
      "items": {
       "$ref": "InstanceTemplate"
      }
@@ -2989,18 +3091,18 @@
    "properties": {
     "instance": {
      "type": "string",
-     "description": "The URL of the instance."
+     "description": "[Output Only] The URL of the instance."
     },
     "namedPorts": {
      "type": "array",
-     "description": "The named ports that belong to this instance group.",
+     "description": "[Output Only] The named ports that belong to this instance group.",
      "items": {
       "$ref": "NamedPort"
      }
     },
     "status": {
      "type": "string",
-     "description": "The status of the instance.",
+     "description": "[Output Only] The status of the instance.",
      "enum": [
       "PROVISIONING",
       "RUNNING",
@@ -3355,7 +3457,7 @@
    "properties": {
     "currentAction": {
      "type": "string",
-     "description": "The current action that the managed instance group has scheduled for the instance.",
+     "description": "[Output Only] The current action that the managed instance group has scheduled for the instance. Possible values: \n- NONE The instance is running, and the managed instance group does not have any scheduled actions for this instance. \n- CREATING The managed instance group is creating this instance. \n- RECREATING The managed instance group is recreating this instance. \n- DELETING The managed instance group is permanently deleting this instance. \n- ABANDONING The managed instance group is abandoning this instance. The instance will be removed from the instance group and from any target pools that are associated with this group. \n- RESTARTING The managed instance group is restarting the instance. \n- REFRESHING The managed instance group is applying configuration changes to the instance without stopping it. For example, the group can update the target pool list for an instance without stopping that instance.",
      "enum": [
       "ABANDONING",
       "CREATING",
@@ -3377,16 +3479,16 @@
     },
     "id": {
      "type": "string",
-     "description": "The unique identifier for this resource (empty when instance does not exist).",
+     "description": "[Output only] The unique identifier for this resource. This field is empty when instance does not exist.",
      "format": "uint64"
     },
     "instance": {
      "type": "string",
-     "description": "The URL of the instance (set even though instance does not exist yet)."
+     "description": "[Output Only] The URL of the instance. The URL can exist even if the instance has not yet been created."
     },
     "instanceStatus": {
      "type": "string",
-     "description": "The status of the instance (empty when instance does not exist).",
+     "description": "[Output Only] The status of the instance. This field is empty when the instance does not exist.",
      "enum": [
       "PROVISIONING",
       "RUNNING",
@@ -3410,7 +3512,7 @@
     },
     "lastAttempt": {
      "$ref": "ManagedInstanceLastAttempt",
-     "description": "Information about the last attempt to create or delete the instance."
+     "description": "[Output Only] Information about the last attempt to create or delete the instance."
     }
    }
   },
@@ -3420,7 +3522,7 @@
    "properties": {
     "errors": {
      "type": "object",
-     "description": "Encountered errors during the last attempt to create or delete the instance.",
+     "description": "[Output Only] Encountered errors during the last attempt to create or delete the instance.",
      "properties": {
       "errors": {
        "type": "array",
@@ -3497,12 +3599,11 @@
   "NamedPort": {
    "id": "NamedPort",
    "type": "object",
-   "description": "The named port information. For example: .",
+   "description": "The named port. For example: .",
    "properties": {
     "name": {
      "type": "string",
-     "description": "The name for this NamedPort.",
-     "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?"
+     "description": "The name for this named port. The name must be 1-63 characters long, and comply with RFC1035."
     },
     "port": {
      "type": "integer",
@@ -3519,12 +3620,7 @@
     "IPv4Range": {
      "type": "string",
      "description": "The range of internal addresses that are legal on this network. This range is a CIDR specification, for example: 192.168.0.0/16. Provided by the client when the network is created.",
-     "pattern": "[0-9]{1,3}(?:\\.[0-9]{1,3}){3}/[0-9]{1,2}",
-     "annotations": {
-      "required": [
-       "compute.networks.insert"
-      ]
-     }
+     "pattern": "[0-9]{1,3}(?:\\.[0-9]{1,3}){3}/[0-9]{1,2}"
     },
     "creationTimestamp": {
      "type": "string",
@@ -3691,7 +3787,7 @@
     },
     "kind": {
      "type": "string",
-     "description": "[Output Only] Type of the resource. Always compute#Operation for Operation resources.",
+     "description": "[Output Only] Type of the resource. Always compute#operation for Operation resources.",
      "default": "compute#operation"
     },
     "name": {
@@ -3700,7 +3796,7 @@
     },
     "operationType": {
      "type": "string",
-     "description": "[Output Only] Type of the operation, such as insert, update, and delete."
+     "description": "[Output Only] Type of the operation, such as insert, compute.instanceGroups.update, or compute.instanceGroups.delete."
     },
     "progress": {
      "type": "integer",
@@ -3963,7 +4059,7 @@
   "PathMatcher": {
    "id": "PathMatcher",
    "type": "object",
-   "description": "A matcher for the path portion of the URL. The BackendService from the longest-matched rule will serve the URL. If no rule was matched, the default_service will be used.",
+   "description": "A matcher for the path portion of the URL. The BackendService from the longest-matched rule will serve the URL. If no rule was matched, the default service will be used.",
    "properties": {
     "defaultService": {
      "type": "string",
@@ -4617,6 +4713,79 @@
     }
    }
   },
+  "SslCertificate": {
+   "id": "SslCertificate",
+   "type": "object",
+   "description": "An SslCertificate resource. This resource provides a mechanism to upload an SSL key and certificate to global HTTPS loadbalancer to serve secure connections.",
+   "properties": {
+    "certificate": {
+     "type": "string",
+     "description": "A local certificate file. The certificate must be in PEM format. The certificate chain must be no greater than 5 certs long. The chain must include at least one intermediate cert."
+    },
+    "creationTimestamp": {
+     "type": "string",
+     "description": "[Output Only] Creation timestamp in RFC3339 text format."
+    },
+    "description": {
+     "type": "string",
+     "description": "An optional textual description of the resource. Provided by the client when the resource is created."
+    },
+    "id": {
+     "type": "string",
+     "description": "[Output Only] Unique identifier for the resource. Defined by the server.",
+     "format": "uint64"
+    },
+    "kind": {
+     "type": "string",
+     "description": "[Output Only] Type of the resource. Always compute#sslCertificate for SSL certificates.",
+     "default": "compute#sslCertificate"
+    },
+    "name": {
+     "type": "string",
+     "description": "Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.",
+     "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?"
+    },
+    "privateKey": {
+     "type": "string",
+     "description": "A write-only private key in PEM format. Only insert RPCs will include this field."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "[Output only] Server-defined URL for the resource."
+    }
+   }
+  },
+  "SslCertificateList": {
+   "id": "SslCertificateList",
+   "type": "object",
+   "description": "Contains a list of SslCertificate resources.",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "[Output Only] Unique identifier for the resource. Defined by the server."
+    },
+    "items": {
+     "type": "array",
+     "description": "A list of SslCertificate resources.",
+     "items": {
+      "$ref": "SslCertificate"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of resource.",
+     "default": "compute#sslCertificateList"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "[Output Only] A token used to continue a truncated list request."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "[Output Only] Server-defined URL for this resource."
+    }
+   }
+  },
   "Tags": {
    "id": "Tags",
    "type": "object",
@@ -4656,7 +4825,7 @@
     },
     "kind": {
      "type": "string",
-     "description": "[Output Only] Type of resource. Always compute#Operation for Operation resources.",
+     "description": "[Output Only] Type of resource. Always compute#operation for Operation resources.",
      "default": "compute#targetHttpProxy"
     },
     "name": {
@@ -4705,6 +4874,95 @@
     }
    }
   },
+  "TargetHttpsProxiesSetSslCertificatesRequest": {
+   "id": "TargetHttpsProxiesSetSslCertificatesRequest",
+   "type": "object",
+   "properties": {
+    "sslCertificates": {
+     "type": "array",
+     "description": "New set of URLs to SslCertificate resources to associate with this TargetHttpProxy. Currently exactly one ssl certificate must be specified.",
+     "items": {
+      "type": "string"
+     }
+    }
+   }
+  },
+  "TargetHttpsProxy": {
+   "id": "TargetHttpsProxy",
+   "type": "object",
+   "description": "A TargetHttpsProxy resource. This resource defines an HTTPS proxy.",
+   "properties": {
+    "creationTimestamp": {
+     "type": "string",
+     "description": "[Output Only] Creation timestamp in RFC3339 text format."
+    },
+    "description": {
+     "type": "string",
+     "description": "An optional textual description of the resource. Provided by the client when the resource is created."
+    },
+    "id": {
+     "type": "string",
+     "description": "[Output Only] Unique identifier for the resource; defined by the server.",
+     "format": "uint64"
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of the resource.",
+     "default": "compute#targetHttpsProxy"
+    },
+    "name": {
+     "type": "string",
+     "description": "Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.",
+     "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?"
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "[Output Only] Server-defined URL for the resource."
+    },
+    "sslCertificates": {
+     "type": "array",
+     "description": "URLs to SslCertificate resources that are used to authenticate connections to Backends. Currently exactly one SSL certificate must be specified.",
+     "items": {
+      "type": "string"
+     }
+    },
+    "urlMap": {
+     "type": "string",
+     "description": "URL to the UrlMap resource that defines the mapping from URL to the BackendService."
+    }
+   }
+  },
+  "TargetHttpsProxyList": {
+   "id": "TargetHttpsProxyList",
+   "type": "object",
+   "description": "Contains a list of TargetHttpsProxy resources.",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "[Output Only] Unique identifier for the resource; defined by the server."
+    },
+    "items": {
+     "type": "array",
+     "description": "A list of TargetHttpsProxy resources.",
+     "items": {
+      "$ref": "TargetHttpsProxy"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of resource.",
+     "default": "compute#targetHttpsProxyList"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "[Output Only] A token used to continue a truncated list request."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "[Output Only] Server-defined URL for this resource."
+    }
+   }
+  },
   "TargetInstance": {
    "id": "TargetInstance",
    "type": "object",
@@ -4956,7 +5214,7 @@
     },
     "sessionAffinity": {
      "type": "string",
-     "description": "Sesssion affinity option, must be one of the following values: NONE: Connections from the same client IP may go to any instance in the pool; CLIENT_IP: Connections from the same client IP will go to the same instance in the pool while that instance remains healthy. CLIENT_IP_PROTO: Connections from the same client IP with the same IP protocol will go to the same instance in the pool while that instance remains healthy.",
+     "description": "Sesssion affinity option, must be one of the following values:\nNONE: Connections from the same client IP may go to any instance in the pool.\nCLIENT_IP: Connections from the same client IP will go to the same instance in the pool while that instance remains healthy.\nCLIENT_IP_PROTO: Connections from the same client IP with the same IP protocol will go to the same instance in the pool while that instance remains healthy.",
      "enum": [
       "CLIENT_IP",
       "CLIENT_IP_PROTO",
@@ -8335,6 +8593,222 @@
     }
    }
   },
+  "httpsHealthChecks": {
+   "methods": {
+    "delete": {
+     "id": "compute.httpsHealthChecks.delete",
+     "path": "{project}/global/httpsHealthChecks/{httpsHealthCheck}",
+     "httpMethod": "DELETE",
+     "description": "Deletes the specified HttpsHealthCheck resource.",
+     "parameters": {
+      "httpsHealthCheck": {
+       "type": "string",
+       "description": "Name of the HttpsHealthCheck resource to delete.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      },
+      "project": {
+       "type": "string",
+       "description": "Name of the project scoping this request.",
+       "required": true,
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "httpsHealthCheck"
+     ],
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/cloud-platform",
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "get": {
+     "id": "compute.httpsHealthChecks.get",
+     "path": "{project}/global/httpsHealthChecks/{httpsHealthCheck}",
+     "httpMethod": "GET",
+     "description": "Returns the specified HttpsHealthCheck resource.",
+     "parameters": {
+      "httpsHealthCheck": {
+       "type": "string",
+       "description": "Name of the HttpsHealthCheck resource to return.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      },
+      "project": {
+       "type": "string",
+       "description": "Name of the project scoping this request.",
+       "required": true,
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "httpsHealthCheck"
+     ],
+     "response": {
+      "$ref": "HttpsHealthCheck"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/cloud-platform",
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "insert": {
+     "id": "compute.httpsHealthChecks.insert",
+     "path": "{project}/global/httpsHealthChecks",
+     "httpMethod": "POST",
+     "description": "Creates a HttpsHealthCheck resource in the specified project using the data included in the request.",
+     "parameters": {
+      "project": {
+       "type": "string",
+       "description": "Name of the project scoping this request.",
+       "required": true,
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project"
+     ],
+     "request": {
+      "$ref": "HttpsHealthCheck"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/cloud-platform",
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "list": {
+     "id": "compute.httpsHealthChecks.list",
+     "path": "{project}/global/httpsHealthChecks",
+     "httpMethod": "GET",
+     "description": "Retrieves the list of HttpsHealthCheck resources available to the specified project.",
+     "parameters": {
+      "filter": {
+       "type": "string",
+       "description": "Sets a filter expression for filtering listed resources, in the form filter={expression}. Your {expression} must be in the format: FIELD_NAME COMPARISON_STRING LITERAL_STRING.\n\nThe FIELD_NAME is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The COMPARISON_STRING must be either eq (equals) or ne (not equals). The LITERAL_STRING is the string value to filter to. The literal value must be valid for the type of field (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.\n\nFor example, filter=name ne example-instance.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "Maximum count of results to be returned.",
+       "default": "500",
+       "format": "uint32",
+       "minimum": "0",
+       "maximum": "500",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "Specifies a page token to use. Use this parameter if you want to list the next page of results. Set pageToken to the nextPageToken returned by a previous list request.",
+       "location": "query"
+      },
+      "project": {
+       "type": "string",
+       "description": "Name of the project scoping this request.",
+       "required": true,
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project"
+     ],
+     "response": {
+      "$ref": "HttpsHealthCheckList"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/cloud-platform",
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "patch": {
+     "id": "compute.httpsHealthChecks.patch",
+     "path": "{project}/global/httpsHealthChecks/{httpsHealthCheck}",
+     "httpMethod": "PATCH",
+     "description": "Updates a HttpsHealthCheck resource in the specified project using the data included in the request. This method supports patch semantics.",
+     "parameters": {
+      "httpsHealthCheck": {
+       "type": "string",
+       "description": "Name of the HttpsHealthCheck resource to update.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      },
+      "project": {
+       "type": "string",
+       "description": "Name of the project scoping this request.",
+       "required": true,
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "httpsHealthCheck"
+     ],
+     "request": {
+      "$ref": "HttpsHealthCheck"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/cloud-platform",
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "update": {
+     "id": "compute.httpsHealthChecks.update",
+     "path": "{project}/global/httpsHealthChecks/{httpsHealthCheck}",
+     "httpMethod": "PUT",
+     "description": "Updates a HttpsHealthCheck resource in the specified project using the data included in the request.",
+     "parameters": {
+      "httpsHealthCheck": {
+       "type": "string",
+       "description": "Name of the HttpsHealthCheck resource to update.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      },
+      "project": {
+       "type": "string",
+       "description": "Name of the project scoping this request.",
+       "required": true,
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "httpsHealthCheck"
+     ],
+     "request": {
+      "$ref": "HttpsHealthCheck"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/cloud-platform",
+      "https://www.googleapis.com/auth/compute"
+     ]
+    }
+   }
+  },
   "images": {
    "methods": {
     "delete": {
@@ -8475,7 +8949,7 @@
      "id": "compute.images.list",
      "path": "{project}/global/images",
      "httpMethod": "GET",
-     "description": "Retrieves the list of image resources available to the specified project.",
+     "description": "Retrieves the list of private images available to the specified project. Private images are images you create that belong to your project. This method does not get any images that belong to other projects, including publicly-available images, like Debian 7. If you want to get a list of publicly-available images, use this method to make a request to the respective image project, such as debian-cloud or windows-cloud.\n\nSee Accessing images for more information.",
      "parameters": {
       "filter": {
        "type": "string",
@@ -8524,11 +8998,11 @@
      "id": "compute.instanceGroupManagers.abandonInstances",
      "path": "{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/abandonInstances",
      "httpMethod": "POST",
-     "description": "Removes the specified instances from the managed instance group, and from any target pools where they are a member. The instances are not deleted. The managed instance group automatically reduces its targetSize value by the number of instances that you abandon from the group.",
+     "description": "Schedules a group action to remove the specified instances from the managed instance group. Abandoning an instance does not delete the instance, but it does remove the instance from any target pools that are applied by the managed instance group. This method reduces the targetSize of the managed instance group by the number of instances that you abandon. This operation is marked as DONE when the action is scheduled even if the instances have not yet been removed from the group. You must separately verify the status of the abandoning action with the listmanagedinstances method.",
      "parameters": {
       "instanceGroupManager": {
        "type": "string",
-       "description": "The name of the instance group manager.",
+       "description": "The name of the managed instance group.",
        "required": true,
        "location": "path"
       },
@@ -8541,7 +9015,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the managed instance group is located.",
+       "description": "The name of the zone where the managed instance group is located.",
        "required": true,
        "location": "path"
       }
@@ -8566,7 +9040,7 @@
      "id": "compute.instanceGroupManagers.aggregatedList",
      "path": "{project}/aggregated/instanceGroupManagers",
      "httpMethod": "GET",
-     "description": "Retrieves the list of managed instance groups, and groups them by project and zone.",
+     "description": "Retrieves the list of managed instance groups and groups them by zone.",
      "parameters": {
       "filter": {
        "type": "string",
@@ -8611,11 +9085,11 @@
      "id": "compute.instanceGroupManagers.delete",
      "path": "{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}",
      "httpMethod": "DELETE",
-     "description": "Deletes the specified managed instance group resource.",
+     "description": "Deletes the specified managed instance group and all of the instances in that group.",
      "parameters": {
       "instanceGroupManager": {
        "type": "string",
-       "description": "The name of the instance group manager to delete.",
+       "description": "The name of the managed instance group to delete.",
        "required": true,
        "location": "path"
       },
@@ -8628,7 +9102,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the managed instance group is located.",
+       "description": "The name of the zone where the managed instance group is located.",
        "required": true,
        "location": "path"
       }
@@ -8650,11 +9124,11 @@
      "id": "compute.instanceGroupManagers.deleteInstances",
      "path": "{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/deleteInstances",
      "httpMethod": "POST",
-     "description": "Deletes the specified instances. The instances are deleted and removed from the instance group and any target pools where they are a member. The managed instance group automatically reduces its targetSize value by the number of instances that you delete.",
+     "description": "Schedules a group action to delete the specified instances in the managed instance group. The instances are also removed from any target pools of which they were a member. This method reduces the targetSize of the managed instance group by the number of instances that you delete. This operation is marked as DONE when the action is scheduled even if the instances are still being deleted. You must separately verify the status of the deleting action with the listmanagedinstances method.",
      "parameters": {
       "instanceGroupManager": {
        "type": "string",
-       "description": "The name of the instance group manager.",
+       "description": "The name of the managed instance group.",
        "required": true,
        "location": "path"
       },
@@ -8667,7 +9141,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the managed instance group is located.",
+       "description": "The name of the zone where the managed instance group is located.",
        "required": true,
        "location": "path"
       }
@@ -8692,11 +9166,11 @@
      "id": "compute.instanceGroupManagers.get",
      "path": "{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}",
      "httpMethod": "GET",
-     "description": "Returns the specified managed instance group resource.",
+     "description": "Returns all of the details about the specified managed instance group.",
      "parameters": {
       "instanceGroupManager": {
        "type": "string",
-       "description": "The name of the instance group manager resource.",
+       "description": "The name of the managed instance group.",
        "required": true,
        "location": "path"
       },
@@ -8709,7 +9183,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the managed instance group is located.",
+       "description": "The name of the zone where the managed instance group is located.",
        "required": true,
        "location": "path"
       }
@@ -8732,7 +9206,7 @@
      "id": "compute.instanceGroupManagers.insert",
      "path": "{project}/zones/{zone}/instanceGroupManagers",
      "httpMethod": "POST",
-     "description": "Creates a managed instance group resource in the specified project using the data that is included in the request.",
+     "description": "Creates a managed instance group using the information that you specify in the request. After the group is created, it schedules an action to create instances in the group using the specified instance template. This operation is marked as DONE when the group is created even if the instances in the group have not yet been created. You must separately verify the status of the individual instances with the listmanagedinstances method.",
      "parameters": {
       "project": {
        "type": "string",
@@ -8743,7 +9217,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the managed instance group is located.",
+       "description": "The name of the zone where you want to create the managed instance group.",
        "required": true,
        "location": "path"
       }
@@ -8797,7 +9271,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the managed instance group is located.",
+       "description": "The name of the zone where the managed instance group is located.",
        "required": true,
        "location": "path"
       }
@@ -8819,7 +9293,7 @@
      "id": "compute.instanceGroupManagers.listManagedInstances",
      "path": "{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/listManagedInstances",
      "httpMethod": "POST",
-     "description": "Lists managed instances.",
+     "description": "Lists all of the instances in the managed instance group. Each instance in the list has a currentAction, which indicates the action that the managed instance group is performing on the instance. For example, if the group is still creating an instance, the currentAction is CREATING. If a previous action failed, the list displays the errors for that failed action.",
      "parameters": {
       "instanceGroupManager": {
        "type": "string",
@@ -8836,7 +9310,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the managed instance group is located.",
+       "description": "The name of the zone where the managed instance group is located.",
        "required": true,
        "location": "path"
       }
@@ -8859,11 +9333,11 @@
      "id": "compute.instanceGroupManagers.recreateInstances",
      "path": "{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/recreateInstances",
      "httpMethod": "POST",
-     "description": "Recreates the specified instances. The instances are deleted, then recreated using the managed instance group's current instance template.",
+     "description": "Schedules a group action to recreate the specified instances in the managed instance group. The instances are deleted and recreated using the current instance template for the managed instance group. This operation is marked as DONE when the action is scheduled even if the instances have not yet been recreated. You must separately verify the status of the recreating action with the listmanagedinstances method.",
      "parameters": {
       "instanceGroupManager": {
        "type": "string",
-       "description": "The name of the instance group manager.",
+       "description": "The name of the managed instance group.",
        "required": true,
        "location": "path"
       },
@@ -8876,7 +9350,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the managed instance group is located.",
+       "description": "The name of the zone where the managed instance group is located.",
        "required": true,
        "location": "path"
       }
@@ -8901,11 +9375,11 @@
      "id": "compute.instanceGroupManagers.resize",
      "path": "{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/resize",
      "httpMethod": "POST",
-     "description": "Resizes the managed instance group. If you increase the size, the group creates new instances using the current instance template. If you decrease the size, the group removes instances in the order that is outlined in Resizing a managed instance group.",
+     "description": "Resizes the managed instance group. If you increase the size, the group creates new instances using the current instance template. If you decrease the size, the group deletes instances. The resize operation is marked DONE when the resize actions are scheduled even if the group has not yet added or deleted any instances. You must separately verify the status of the creating or deleting actions with the listmanagedinstances method.",
      "parameters": {
       "instanceGroupManager": {
        "type": "string",
-       "description": "The name of the instance group manager.",
+       "description": "The name of the managed instance group.",
        "required": true,
        "location": "path"
       },
@@ -8925,7 +9399,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the managed instance group is located.",
+       "description": "The name of the zone where the managed instance group is located.",
        "required": true,
        "location": "path"
       }
@@ -8952,7 +9426,7 @@
      "parameters": {
       "instanceGroupManager": {
        "type": "string",
-       "description": "The name of the instance group manager.",
+       "description": "The name of the managed instance group.",
        "required": true,
        "location": "path"
       },
@@ -8965,7 +9439,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the managed instance group is located.",
+       "description": "The name of the zone where the managed instance group is located.",
        "required": true,
        "location": "path"
       }
@@ -8990,11 +9464,11 @@
      "id": "compute.instanceGroupManagers.setTargetPools",
      "path": "{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/setTargetPools",
      "httpMethod": "POST",
-     "description": "Modifies the target pools to which all new instances in this group are assigned. The target pools for existing instances in the group do not change unless you recreate them.",
+     "description": "Modifies the target pools to which all instances in this managed instance group are assigned. The target pools automatically apply to all of the instances in the managed instance group. This operation is marked DONE when you make the request even if the instances have not yet been added to their target pools. The change might take some time to apply to all of the instances in the group depending on the size of the group.",
      "parameters": {
       "instanceGroupManager": {
        "type": "string",
-       "description": "The name of the instance group manager.",
+       "description": "The name of the managed instance group.",
        "required": true,
        "location": "path"
       },
@@ -9007,7 +9481,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the managed instance group is located.",
+       "description": "The name of the zone where the managed instance group is located.",
        "required": true,
        "location": "path"
       }
@@ -9036,7 +9510,7 @@
      "id": "compute.instanceGroups.addInstances",
      "path": "{project}/zones/{zone}/instanceGroups/{instanceGroup}/addInstances",
      "httpMethod": "POST",
-     "description": "Adds a list of instances to an instance group. All of the instances in the instance group must be in the same network.",
+     "description": "Adds a list of instances to the specified instance group. All of the instances in the instance group must be in the same network/subnetwork. TODO: Change to comment to state \"if IG is load balanced.\"",
      "parameters": {
       "instanceGroup": {
        "type": "string",
@@ -9053,7 +9527,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the instance group is located.",
+       "description": "The name of the zone where the instance group is located.",
        "required": true,
        "location": "path"
       }
@@ -9078,7 +9552,7 @@
      "id": "compute.instanceGroups.aggregatedList",
      "path": "{project}/aggregated/instanceGroups",
      "httpMethod": "GET",
-     "description": "Retrieves the list of instance groups, and sorts them by zone.",
+     "description": "Retrieves the list of instance groups and sorts them by zone.",
      "parameters": {
       "filter": {
        "type": "string",
@@ -9123,7 +9597,7 @@
      "id": "compute.instanceGroups.delete",
      "path": "{project}/zones/{zone}/instanceGroups/{instanceGroup}",
      "httpMethod": "DELETE",
-     "description": "Deletes the specified instance group.",
+     "description": "Deletes the specified instance group. The instances in the group are not deleted.",
      "parameters": {
       "instanceGroup": {
        "type": "string",
@@ -9140,7 +9614,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the instance group is located.",
+       "description": "The name of the zone where the instance group is located.",
        "required": true,
        "location": "path"
       }
@@ -9179,7 +9653,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the instance group is located.",
+       "description": "The name of the zone where the instance group is located.",
        "required": true,
        "location": "path"
       }
@@ -9213,7 +9687,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the instance group is located.",
+       "description": "The name of the zone where you want to create the instance group.",
        "required": true,
        "location": "path"
       }
@@ -9267,7 +9741,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the instance group is located.",
+       "description": "The name of the zone where the instance group is located.",
        "required": true,
        "location": "path"
       }
@@ -9289,7 +9763,7 @@
      "id": "compute.instanceGroups.listInstances",
      "path": "{project}/zones/{zone}/instanceGroups/{instanceGroup}/listInstances",
      "httpMethod": "POST",
-     "description": "Lists instances in an instance group. The parameters for this method specify whether the list filters instances by state and named ports information.",
+     "description": "Lists the instances in the specified instance group.",
      "parameters": {
       "filter": {
        "type": "string",
@@ -9325,7 +9799,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the instance group is located.",
+       "description": "The name of the zone where the instance group is located.",
        "required": true,
        "location": "path"
       }
@@ -9351,7 +9825,7 @@
      "id": "compute.instanceGroups.removeInstances",
      "path": "{project}/zones/{zone}/instanceGroups/{instanceGroup}/removeInstances",
      "httpMethod": "POST",
-     "description": "Removes a list of instances from an instance group.",
+     "description": "Removes one or more instances from the specified instance group, but does not delete those instances.",
      "parameters": {
       "instanceGroup": {
        "type": "string",
@@ -9368,7 +9842,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the instance group is located.",
+       "description": "The name of the zone where the instance group is located.",
        "required": true,
        "location": "path"
       }
@@ -9393,7 +9867,7 @@
      "id": "compute.instanceGroups.setNamedPorts",
      "path": "{project}/zones/{zone}/instanceGroups/{instanceGroup}/setNamedPorts",
      "httpMethod": "POST",
-     "description": "Sets the named ports in an instance group.",
+     "description": "Sets the named ports for the specified instance group.",
      "parameters": {
       "instanceGroup": {
        "type": "string",
@@ -9410,7 +9884,7 @@
       },
       "zone": {
        "type": "string",
-       "description": "The URL of the zone where the instance group is located.",
+       "description": "The name of the zone where the instance group is located.",
        "required": true,
        "location": "path"
       }
@@ -9634,6 +10108,7 @@
      "id": "compute.instances.aggregatedList",
      "path": "{project}/aggregated/instances",
      "httpMethod": "GET",
+     "description": "Retrieves aggregated list of instance resources.",
      "parameters": {
       "filter": {
        "type": "string",
@@ -11309,6 +11784,150 @@
     }
    }
   },
+  "sslCertificates": {
+   "methods": {
+    "delete": {
+     "id": "compute.sslCertificates.delete",
+     "path": "{project}/global/sslCertificates/{sslCertificate}",
+     "httpMethod": "DELETE",
+     "description": "Deletes the specified SslCertificate resource.",
+     "parameters": {
+      "project": {
+       "type": "string",
+       "description": "Name of the project scoping this request.",
+       "required": true,
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+       "location": "path"
+      },
+      "sslCertificate": {
+       "type": "string",
+       "description": "Name of the SslCertificate resource to delete.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "sslCertificate"
+     ],
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/cloud-platform",
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "get": {
+     "id": "compute.sslCertificates.get",
+     "path": "{project}/global/sslCertificates/{sslCertificate}",
+     "httpMethod": "GET",
+     "description": "Returns the specified SslCertificate resource.",
+     "parameters": {
+      "project": {
+       "type": "string",
+       "description": "Name of the project scoping this request.",
+       "required": true,
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+       "location": "path"
+      },
+      "sslCertificate": {
+       "type": "string",
+       "description": "Name of the SslCertificate resource to return.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "sslCertificate"
+     ],
+     "response": {
+      "$ref": "SslCertificate"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/cloud-platform",
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "insert": {
+     "id": "compute.sslCertificates.insert",
+     "path": "{project}/global/sslCertificates",
+     "httpMethod": "POST",
+     "description": "Creates a SslCertificate resource in the specified project using the data included in the request.",
+     "parameters": {
+      "project": {
+       "type": "string",
+       "description": "Name of the project scoping this request.",
+       "required": true,
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project"
+     ],
+     "request": {
+      "$ref": "SslCertificate"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/cloud-platform",
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "list": {
+     "id": "compute.sslCertificates.list",
+     "path": "{project}/global/sslCertificates",
+     "httpMethod": "GET",
+     "description": "Retrieves the list of SslCertificate resources available to the specified project.",
+     "parameters": {
+      "filter": {
+       "type": "string",
+       "description": "Sets a filter expression for filtering listed resources, in the form filter={expression}. Your {expression} must be in the format: FIELD_NAME COMPARISON_STRING LITERAL_STRING.\n\nThe FIELD_NAME is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The COMPARISON_STRING must be either eq (equals) or ne (not equals). The LITERAL_STRING is the string value to filter to. The literal value must be valid for the type of field (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.\n\nFor example, filter=name ne example-instance.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "Maximum count of results to be returned.",
+       "default": "500",
+       "format": "uint32",
+       "minimum": "0",
+       "maximum": "500",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "Specifies a page token to use. Use this parameter if you want to list the next page of results. Set pageToken to the nextPageToken returned by a previous list request.",
+       "location": "query"
+      },
+      "project": {
+       "type": "string",
+       "description": "Name of the project scoping this request.",
+       "required": true,
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project"
+     ],
+     "response": {
+      "$ref": "SslCertificateList"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/cloud-platform",
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    }
+   }
+  },
   "targetHttpProxies": {
    "methods": {
     "delete": {
@@ -11489,6 +12108,222 @@
     }
    }
   },
+  "targetHttpsProxies": {
+   "methods": {
+    "delete": {
+     "id": "compute.targetHttpsProxies.delete",
+     "path": "{project}/global/targetHttpsProxies/{targetHttpsProxy}",
+     "httpMethod": "DELETE",
+     "description": "Deletes the specified TargetHttpsProxy resource.",
+     "parameters": {
+      "project": {
+       "type": "string",
+       "description": "Name of the project scoping this request.",
+       "required": true,
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+       "location": "path"
+      },
+      "targetHttpsProxy": {
+       "type": "string",
+       "description": "Name of the TargetHttpsProxy resource to delete.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "targetHttpsProxy"
+     ],
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/cloud-platform",
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "get": {
+     "id": "compute.targetHttpsProxies.get",
+     "path": "{project}/global/targetHttpsProxies/{targetHttpsProxy}",
+     "httpMethod": "GET",
+     "description": "Returns the specified TargetHttpsProxy resource.",
+     "parameters": {
+      "project": {
+       "type": "string",
+       "description": "Name of the project scoping this request.",
+       "required": true,
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+       "location": "path"
+      },
+      "targetHttpsProxy": {
+       "type": "string",
+       "description": "Name of the TargetHttpsProxy resource to return.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "targetHttpsProxy"
+     ],
+     "response": {
+      "$ref": "TargetHttpsProxy"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/cloud-platform",
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "insert": {
+     "id": "compute.targetHttpsProxies.insert",
+     "path": "{project}/global/targetHttpsProxies",
+     "httpMethod": "POST",
+     "description": "Creates a TargetHttpsProxy resource in the specified project using the data included in the request.",
+     "parameters": {
+      "project": {
+       "type": "string",
+       "description": "Name of the project scoping this request.",
+       "required": true,
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project"
+     ],
+     "request": {
+      "$ref": "TargetHttpsProxy"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/cloud-platform",
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "list": {
+     "id": "compute.targetHttpsProxies.list",
+     "path": "{project}/global/targetHttpsProxies",
+     "httpMethod": "GET",
+     "description": "Retrieves the list of TargetHttpsProxy resources available to the specified project.",
+     "parameters": {
+      "filter": {
+       "type": "string",
+       "description": "Sets a filter expression for filtering listed resources, in the form filter={expression}. Your {expression} must be in the format: FIELD_NAME COMPARISON_STRING LITERAL_STRING.\n\nThe FIELD_NAME is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The COMPARISON_STRING must be either eq (equals) or ne (not equals). The LITERAL_STRING is the string value to filter to. The literal value must be valid for the type of field (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.\n\nFor example, filter=name ne example-instance.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "Maximum count of results to be returned.",
+       "default": "500",
+       "format": "uint32",
+       "minimum": "0",
+       "maximum": "500",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "Specifies a page token to use. Use this parameter if you want to list the next page of results. Set pageToken to the nextPageToken returned by a previous list request.",
+       "location": "query"
+      },
+      "project": {
+       "type": "string",
+       "description": "Name of the project scoping this request.",
+       "required": true,
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project"
+     ],
+     "response": {
+      "$ref": "TargetHttpsProxyList"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/cloud-platform",
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "setSslCertificates": {
+     "id": "compute.targetHttpsProxies.setSslCertificates",
+     "path": "{project}/targetHttpsProxies/{targetHttpsProxy}/setSslCertificates",
+     "httpMethod": "POST",
+     "description": "Replaces SslCertificates for TargetHttpsProxy.",
+     "parameters": {
+      "project": {
+       "type": "string",
+       "description": "Name of the project scoping this request.",
+       "required": true,
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+       "location": "path"
+      },
+      "targetHttpsProxy": {
+       "type": "string",
+       "description": "Name of the TargetHttpsProxy resource whose URL map is to be set.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "targetHttpsProxy"
+     ],
+     "request": {
+      "$ref": "TargetHttpsProxiesSetSslCertificatesRequest"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/cloud-platform",
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "setUrlMap": {
+     "id": "compute.targetHttpsProxies.setUrlMap",
+     "path": "{project}/targetHttpsProxies/{targetHttpsProxy}/setUrlMap",
+     "httpMethod": "POST",
+     "description": "Changes the URL map for TargetHttpsProxy.",
+     "parameters": {
+      "project": {
+       "type": "string",
+       "description": "Name of the project scoping this request.",
+       "required": true,
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+       "location": "path"
+      },
+      "targetHttpsProxy": {
+       "type": "string",
+       "description": "Name of the TargetHttpsProxy resource whose URL map is to be set.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "targetHttpsProxy"
+     ],
+     "request": {
+      "$ref": "UrlMapReference"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/cloud-platform",
+      "https://www.googleapis.com/auth/compute"
+     ]
+    }
+   }
+  },
   "targetInstances": {
    "methods": {
     "aggregatedList": {
diff --git a/compute/v1/compute-gen.go b/compute/v1/compute-gen.go
index f63e794..55e1fdf 100644
--- a/compute/v1/compute-gen.go
+++ b/compute/v1/compute-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "compute:v1"
 const apiName = "compute"
@@ -80,6 +82,7 @@
 	s.GlobalForwardingRules = NewGlobalForwardingRulesService(s)
 	s.GlobalOperations = NewGlobalOperationsService(s)
 	s.HttpHealthChecks = NewHttpHealthChecksService(s)
+	s.HttpsHealthChecks = NewHttpsHealthChecksService(s)
 	s.Images = NewImagesService(s)
 	s.InstanceGroupManagers = NewInstanceGroupManagersService(s)
 	s.InstanceGroups = NewInstanceGroupsService(s)
@@ -93,7 +96,9 @@
 	s.Regions = NewRegionsService(s)
 	s.Routes = NewRoutesService(s)
 	s.Snapshots = NewSnapshotsService(s)
+	s.SslCertificates = NewSslCertificatesService(s)
 	s.TargetHttpProxies = NewTargetHttpProxiesService(s)
+	s.TargetHttpsProxies = NewTargetHttpsProxiesService(s)
 	s.TargetInstances = NewTargetInstancesService(s)
 	s.TargetPools = NewTargetPoolsService(s)
 	s.TargetVpnGateways = NewTargetVpnGatewaysService(s)
@@ -131,6 +136,8 @@
 
 	HttpHealthChecks *HttpHealthChecksService
 
+	HttpsHealthChecks *HttpsHealthChecksService
+
 	Images *ImagesService
 
 	InstanceGroupManagers *InstanceGroupManagersService
@@ -157,8 +164,12 @@
 
 	Snapshots *SnapshotsService
 
+	SslCertificates *SslCertificatesService
+
 	TargetHttpProxies *TargetHttpProxiesService
 
+	TargetHttpsProxies *TargetHttpsProxiesService
+
 	TargetInstances *TargetInstancesService
 
 	TargetPools *TargetPoolsService
@@ -280,6 +291,15 @@
 	s *Service
 }
 
+func NewHttpsHealthChecksService(s *Service) *HttpsHealthChecksService {
+	rs := &HttpsHealthChecksService{s: s}
+	return rs
+}
+
+type HttpsHealthChecksService struct {
+	s *Service
+}
+
 func NewImagesService(s *Service) *ImagesService {
 	rs := &ImagesService{s: s}
 	return rs
@@ -397,6 +417,15 @@
 	s *Service
 }
 
+func NewSslCertificatesService(s *Service) *SslCertificatesService {
+	rs := &SslCertificatesService{s: s}
+	return rs
+}
+
+type SslCertificatesService struct {
+	s *Service
+}
+
 func NewTargetHttpProxiesService(s *Service) *TargetHttpProxiesService {
 	rs := &TargetHttpProxiesService{s: s}
 	return rs
@@ -406,6 +435,15 @@
 	s *Service
 }
 
+func NewTargetHttpsProxiesService(s *Service) *TargetHttpsProxiesService {
+	rs := &TargetHttpsProxiesService{s: s}
+	return rs
+}
+
+type TargetHttpsProxiesService struct {
+	s *Service
+}
+
 func NewTargetInstancesService(s *Service) *TargetInstancesService {
 	rs := &TargetInstancesService{s: s}
 	return rs
@@ -782,6 +820,10 @@
 	// only define one or the other, but not both.
 	InitializeParams *AttachedDiskInitializeParams `json:"initializeParams,omitempty"`
 
+	// Interface: Specifies the disk interface to use for attaching this
+	// disk, either SCSI or NVME. The default is SCSI. For performance
+	// characteristics of SCSI over NVMe, see Local SSD performance.
+	//
 	// Possible values:
 	//   "NVME"
 	//   "SCSI"
@@ -1374,6 +1416,7 @@
 
 	// Possible values:
 	//   "HTTP"
+	//   "HTTPS"
 	Protocol string `json:"protocol,omitempty"`
 
 	// SelfLink: [Output Only] Server-defined URL for the resource.
@@ -2276,7 +2319,8 @@
 	// server.
 	Id uint64 `json:"id,omitempty,string"`
 
-	// Kind: Type of the resource.
+	// Kind: [Output Only] Type of the resource. Always
+	// compute#forwardingRule.
 	Kind string `json:"kind,omitempty"`
 
 	// Name: Name of the resource; provided by the client when the resource
@@ -2288,11 +2332,10 @@
 	// last character, which cannot be a dash.
 	Name string `json:"name,omitempty"`
 
-	// PortRange: Applicable only when `IPProtocol` is TCP, UDP, or SCTP,
-	// only packets addressed to ports in the specified range will be
-	// forwarded to target. If portRange is left empty (default value), all
-	// ports are forwarded. Forwarding rules with the same `[IPAddress,
-	// IPProtocol]` pair must have disjoint port ranges.
+	// PortRange: Applicable only when IPProtocol is TCP, UDP, or SCTP, only
+	// packets addressed to ports in the specified range will be forwarded
+	// to target. Forwarding rules with the same `[IPAddress, IPProtocol]`
+	// pair must have disjoint port ranges.
 	PortRange string `json:"portRange,omitempty"`
 
 	// Region: [Output Only] URL of the region where the regional forwarding
@@ -2549,13 +2592,13 @@
 	Description string `json:"description,omitempty"`
 
 	// Hosts: The list of host patterns to match. They must be valid
-	// hostnames except that they may start with *. or *-. The * acts like a
-	// glob and will match any string of atoms (separated by .s and -s) to
-	// the left.
+	// hostnames, except * will match any string of ([a-z0-9-.]*). In that
+	// case, * must be the first character and must be followed in the
+	// pattern by either - or ..
 	Hosts []string `json:"hosts,omitempty"`
 
-	// PathMatcher: The name of the PathMatcher to match the path portion of
-	// the URL, if the this hostRule matches the URL's host portion.
+	// PathMatcher: The name of the PathMatcher to use to match the path
+	// portion of the URL if the hostRule matches the URL's host portion.
 	PathMatcher string `json:"pathMatcher,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Description") to
@@ -2692,6 +2735,125 @@
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
 
+// HttpsHealthCheck: An HttpsHealthCheck resource. This resource defines
+// a template for how individual instances should be checked for health,
+// via HTTPS.
+type HttpsHealthCheck struct {
+	// CheckIntervalSec: How often (in seconds) to send a health check. The
+	// default value is 5 seconds.
+	CheckIntervalSec int64 `json:"checkIntervalSec,omitempty"`
+
+	// CreationTimestamp: [Output Only] Creation timestamp in RFC3339 text
+	// format.
+	CreationTimestamp string `json:"creationTimestamp,omitempty"`
+
+	// Description: An optional textual description of the resource;
+	// provided by the client when the resource is created.
+	Description string `json:"description,omitempty"`
+
+	// HealthyThreshold: A so-far unhealthy instance will be marked healthy
+	// after this many consecutive successes. The default value is 2.
+	HealthyThreshold int64 `json:"healthyThreshold,omitempty"`
+
+	// Host: The value of the host header in the HTTPS health check request.
+	// If left empty (default value), the public IP on behalf of which this
+	// health check is performed will be used.
+	Host string `json:"host,omitempty"`
+
+	// Id: [Output Only] Unique identifier for the resource; defined by the
+	// server.
+	Id uint64 `json:"id,omitempty,string"`
+
+	// Kind: Type of the resource.
+	Kind string `json:"kind,omitempty"`
+
+	// Name: Name of the resource. Provided by the client when the resource
+	// is created. The name must be 1-63 characters long, and comply with
+	// RFC1035. Specifically, the name must be 1-63 characters long and
+	// match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means
+	// the first character must be a lowercase letter, and all following
+	// characters must be a dash, lowercase letter, or digit, except the
+	// last character, which cannot be a dash.
+	Name string `json:"name,omitempty"`
+
+	// Port: The TCP port number for the HTTPS health check request. The
+	// default value is 443.
+	Port int64 `json:"port,omitempty"`
+
+	// RequestPath: The request path of the HTTPS health check request. The
+	// default value is "/".
+	RequestPath string `json:"requestPath,omitempty"`
+
+	// SelfLink: [Output Only] Server-defined URL for the resource.
+	SelfLink string `json:"selfLink,omitempty"`
+
+	// TimeoutSec: How long (in seconds) to wait before claiming failure.
+	// The default value is 5 seconds. It is invalid for timeoutSec to have
+	// a greater value than checkIntervalSec.
+	TimeoutSec int64 `json:"timeoutSec,omitempty"`
+
+	// UnhealthyThreshold: A so-far healthy instance will be marked
+	// unhealthy after this many consecutive failures. The default value is
+	// 2.
+	UnhealthyThreshold int64 `json:"unhealthyThreshold,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "CheckIntervalSec") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *HttpsHealthCheck) MarshalJSON() ([]byte, error) {
+	type noMethod HttpsHealthCheck
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// HttpsHealthCheckList: Contains a list of HttpsHealthCheck resources.
+type HttpsHealthCheckList struct {
+	// Id: [Output Only] Unique identifier for the resource; defined by the
+	// server.
+	Id string `json:"id,omitempty"`
+
+	// Items: A list of HttpsHealthCheck resources.
+	Items []*HttpsHealthCheck `json:"items,omitempty"`
+
+	// Kind: Type of resource.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: [Output Only] A token used to continue a truncated
+	// list request.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// SelfLink: [Output Only] Server-defined URL for this resource.
+	SelfLink string `json:"selfLink,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Id") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *HttpsHealthCheckList) MarshalJSON() ([]byte, error) {
+	type noMethod HttpsHealthCheckList
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
 // Image: An Image resource.
 type Image struct {
 	// ArchiveSizeBytes: Size of the image tar.gz archive stored in Google
@@ -2832,7 +2994,7 @@
 	// server.
 	Id string `json:"id,omitempty"`
 
-	// Items: A list of Image resources.
+	// Items: [Output Only] A list of Image resources.
 	Items []*Image `json:"items,omitempty"`
 
 	// Kind: Type of resource.
@@ -3029,13 +3191,13 @@
 	// Description: An optional text description for the instance group.
 	Description string `json:"description,omitempty"`
 
-	// Fingerprint: [Output Only] The fingerprint of the named ports
-	// information. The system uses this fingerprint to detect conflicts
-	// when multiple users change the named ports information concurrently.
+	// Fingerprint: [Output Only] The fingerprint of the named ports. The
+	// system uses this fingerprint to detect conflicts when multiple users
+	// change the named ports concurrently.
 	Fingerprint string `json:"fingerprint,omitempty"`
 
-	// Id: [Output Only] A unique identifier for this instance group. The
-	// server defines this identifier.
+	// Id: [Output Only] A unique identifier for this resource type. The
+	// server generates this identifier.
 	Id uint64 `json:"id,omitempty,string"`
 
 	// Kind: [Output Only] The resource type, which is always
@@ -3047,26 +3209,30 @@
 	Name string `json:"name,omitempty"`
 
 	// NamedPorts: Assigns a name to a port number. For example: {name:
-	// ?http?, port: 80} This allows the system to reference ports by the
-	// assigned name instead of a port number. Named ports can also contain
-	// multiple ports. For example: [{name: ?http?, port: 80},{name: "http",
-	// port: 8080}] Named ports apply to all instances in this instance
-	// group.
+	// "http", port: 80}
+	//
+	// This allows the system to reference ports by the assigned name
+	// instead of a port number. Named ports can also contain multiple
+	// ports. For example: [{name: "http", port: 80},{name: "http", port:
+	// 8080}]
+	//
+	// Named ports apply to all instances in this instance group.
 	NamedPorts []*NamedPort `json:"namedPorts,omitempty"`
 
-	// Network: The URL of the network to which all instances in the
-	// instance group belong.
+	// Network: [Output Only] The URL of the network to which all instances
+	// in the instance group belong.
 	Network string `json:"network,omitempty"`
 
 	// SelfLink: [Output Only] The URL for this instance group. The server
-	// defines this URL.
+	// generates this URL.
 	SelfLink string `json:"selfLink,omitempty"`
 
 	// Size: [Output Only] The total number of instances in the instance
 	// group.
 	Size int64 `json:"size,omitempty"`
 
-	// Zone: The URL of the zone where the instance group is located.
+	// Zone: [Output Only] The URL of the zone where the instance group is
+	// located.
 	Zone string `json:"zone,omitempty"`
 
 	// ServerResponse contains the HTTP response code and headers from the
@@ -3090,7 +3256,7 @@
 
 type InstanceGroupAggregatedList struct {
 	// Id: [Output Only] A unique identifier for this aggregated list of
-	// instance groups. The server defines this identifier.
+	// instance groups. The server generates this identifier.
 	Id string `json:"id,omitempty"`
 
 	// Items: A map of scoped instance group lists.
@@ -3105,8 +3271,8 @@
 	// truncated list request.
 	NextPageToken string `json:"nextPageToken,omitempty"`
 
-	// SelfLink: [Output Only] A unique identifier for this aggregated list
-	// of instance groups. The server defines this identifier.
+	// SelfLink: [Output Only] The URL for this resource type. The server
+	// generates this URL.
 	SelfLink string `json:"selfLink,omitempty"`
 
 	// ServerResponse contains the HTTP response code and headers from the
@@ -3131,10 +3297,10 @@
 // InstanceGroupList: A list of InstanceGroup resources.
 type InstanceGroupList struct {
 	// Id: [Output Only] A unique identifier for this list of instance
-	// groups. The server defines this identifier.
+	// groups. The server generates this identifier.
 	Id string `json:"id,omitempty"`
 
-	// Items: A list of InstanceGroup resources.
+	// Items: A list of instance groups.
 	Items []*InstanceGroup `json:"items,omitempty"`
 
 	// Kind: [Output Only] The resource type, which is always
@@ -3145,8 +3311,8 @@
 	// truncated list request.
 	NextPageToken string `json:"nextPageToken,omitempty"`
 
-	// SelfLink: [Output Only] The URL for this instance group. The server
-	// defines this URL.
+	// SelfLink: [Output Only] The URL for this resource type. The server
+	// generates this URL.
 	SelfLink string `json:"selfLink,omitempty"`
 
 	// ServerResponse contains the HTTP response code and headers from the
@@ -3184,7 +3350,7 @@
 
 	// CurrentActions: [Output Only] The list of instance actions and the
 	// number of instances in this managed instance group that are scheduled
-	// for those actions.
+	// for each of those actions.
 	CurrentActions *InstanceGroupManagerActionsSummary `json:"currentActions,omitempty"`
 
 	// Description: An optional text description for the managed instance
@@ -3192,15 +3358,15 @@
 	Description string `json:"description,omitempty"`
 
 	// Fingerprint: [Output Only] The fingerprint of the target pools
-	// information, which is a hash of the contents. This field is used for
-	// optimistic locking when updating the target pool entries.
+	// information. You can use this optional field for optimistic locking
+	// when you update the target pool entries.
 	Fingerprint string `json:"fingerprint,omitempty"`
 
-	// Id: [Output Only] A unique identifier for this managed instance
-	// group. The server defines this identifier.
+	// Id: [Output Only] A unique identifier for this resource type. The
+	// server generates this identifier.
 	Id uint64 `json:"id,omitempty,string"`
 
-	// InstanceGroup: [Output Only] The URL of the InstanceGroup resource.
+	// InstanceGroup: [Output Only] The URL of the Instance Group resource.
 	InstanceGroup string `json:"instanceGroup,omitempty"`
 
 	// InstanceTemplate: The URL of the instance template that is specified
@@ -3216,13 +3382,13 @@
 	// characters long, and comply with RFC1035.
 	Name string `json:"name,omitempty"`
 
-	// SelfLink: [Output Only] Server-defined URL for this managed instance
-	// group.
+	// SelfLink: [Output Only] The URL for this managed instance group. The
+	// server defines this URL.
 	SelfLink string `json:"selfLink,omitempty"`
 
-	// TargetPools: The URLs of all TargetPool resources to which new
-	// instances in the instanceGroup field are added. Updating the target
-	// pool values does not affect existing instances.
+	// TargetPools: The URLs for all TargetPool resources to which instances
+	// in the instanceGroup field are added. The target pools automatically
+	// apply to all of the instances in the managed instance group.
 	TargetPools []string `json:"targetPools,omitempty"`
 
 	// TargetSize: The target number of running instances for this managed
@@ -3230,7 +3396,7 @@
 	// Resizing the group changes this number.
 	TargetSize int64 `json:"targetSize,omitempty"`
 
-	// Zone: The URL of the zone where the managed instance group is
+	// Zone: The name of the zone where the managed instance group is
 	// located.
 	Zone string `json:"zone,omitempty"`
 
@@ -3254,10 +3420,10 @@
 }
 
 type InstanceGroupManagerActionsSummary struct {
-	// Abandoning: [Output Only] Total number of instances in the managed
-	// instance group that are scheduled to be abandoned. Abandoning an
-	// instance removes it from the managed instance group without deleting
-	// it.
+	// Abandoning: [Output Only] The total number of instances in the
+	// managed instance group that are scheduled to be abandoned. Abandoning
+	// an instance removes it from the managed instance group without
+	// deleting it.
 	Abandoning int64 `json:"abandoning,omitempty"`
 
 	// Creating: [Output Only] The number of instances in the managed
@@ -3271,7 +3437,7 @@
 	Deleting int64 `json:"deleting,omitempty"`
 
 	// None: [Output Only] The number of instances in the managed instance
-	// group that currently have no scheduled actions.
+	// group that are running and have no scheduled actions.
 	None int64 `json:"none,omitempty"`
 
 	// Recreating: [Output Only] The number of instances in the managed
@@ -3309,13 +3475,13 @@
 
 type InstanceGroupManagerAggregatedList struct {
 	// Id: [Output Only] A unique identifier for this aggregated list of
-	// managed instance groups. The server defines this identifier.
+	// managed instance groups. The server generates this identifier.
 	Id string `json:"id,omitempty"`
 
-	// Items: A map of filtered managed instance group lists.
+	// Items: [Output Only] A map of filtered managed instance group lists.
 	Items map[string]InstanceGroupManagersScopedList `json:"items,omitempty"`
 
-	// Kind: [Output Only] Type of the resource. Always
+	// Kind: [Output Only] The resource type, which is always
 	// compute#instanceGroupManagerAggregatedList for an aggregated list of
 	// managed instance groups.
 	Kind string `json:"kind,omitempty"`
@@ -3324,8 +3490,8 @@
 	// truncated list request.
 	NextPageToken string `json:"nextPageToken,omitempty"`
 
-	// SelfLink: [Output Only] The URL for this aggregated list of managed
-	// instance groups. The server defines this URL.
+	// SelfLink: [Output Only] The URL for this resource type. The server
+	// generates this URL.
 	SelfLink string `json:"selfLink,omitempty"`
 
 	// ServerResponse contains the HTTP response code and headers from the
@@ -3347,27 +3513,27 @@
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
 
-// InstanceGroupManagerList: [Output Only] A list of
-// InstanceGroupManager resources.
+// InstanceGroupManagerList: [Output Only] A list of managed instance
+// groups.
 type InstanceGroupManagerList struct {
-	// Id: [Output Only] A unique identifier for this managed instance
-	// group. The server defines this identifier.
+	// Id: [Output Only] A unique identifier for this resource type. The
+	// server generates this identifier.
 	Id string `json:"id,omitempty"`
 
-	// Items: [Output Only] A list of managed instance group resources.
+	// Items: [Output Only] A list of managed instance groups.
 	Items []*InstanceGroupManager `json:"items,omitempty"`
 
-	// Kind: [Output Only] Type of the resource. Always
-	// compute#instanceGroupManagerList for a list of managed instance group
-	// resources.
+	// Kind: [Output Only] The resource type, which is always
+	// compute#instanceGroupManagerList for a list of managed instance
+	// groups.
 	Kind string `json:"kind,omitempty"`
 
 	// NextPageToken: [Output Only] A token that is used to continue a
 	// truncated list request.
 	NextPageToken string `json:"nextPageToken,omitempty"`
 
-	// SelfLink: [Output Only] The URL for this managed instance group. The
-	// server defines this URL.
+	// SelfLink: [Output Only] The URL for this resource type. The server
+	// generates this URL.
 	SelfLink string `json:"selfLink,omitempty"`
 
 	// ServerResponse contains the HTTP response code and headers from the
@@ -3390,8 +3556,8 @@
 }
 
 type InstanceGroupManagersAbandonInstancesRequest struct {
-	// Instances: The names of instances to abandon from the managed
-	// instance group.
+	// Instances: The URL for one or more instances to abandon from the
+	// managed instance group.
 	Instances []string `json:"instances,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Instances") to
@@ -3410,7 +3576,8 @@
 }
 
 type InstanceGroupManagersDeleteInstancesRequest struct {
-	// Instances: The names of one or more instances to delete.
+	// Instances: The list of instances to delete from this managed instance
+	// group. Specify one or more instance URLs.
 	Instances []string `json:"instances,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Instances") to
@@ -3429,8 +3596,8 @@
 }
 
 type InstanceGroupManagersListManagedInstancesResponse struct {
-	// ManagedInstances: List of managed instances. If empty - all instances
-	// are listed.
+	// ManagedInstances: [Output Only] The list of instances in the managed
+	// instance group.
 	ManagedInstances []*ManagedInstance `json:"managedInstances,omitempty"`
 
 	// ServerResponse contains the HTTP response code and headers from the
@@ -3453,7 +3620,7 @@
 }
 
 type InstanceGroupManagersRecreateInstancesRequest struct {
-	// Instances: The names of one or more instances to recreate.
+	// Instances: The URL for one or more instances to recreate.
 	Instances []string `json:"instances,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Instances") to
@@ -3585,17 +3752,19 @@
 }
 
 type InstanceGroupManagersSetTargetPoolsRequest struct {
-	// Fingerprint: The fingerprint of the target pools information, which
-	// is a hash of the contents. This field is used for optimistic locking
-	// when updating the target pool entries.
+	// Fingerprint: The fingerprint of the target pools information. Use
+	// this optional property to prevent conflicts when multiple users
+	// change the target pools settings concurrently. Obtain the fingerprint
+	// with the instanceGroupManagers.get method. Then, include the
+	// fingerprint in your request to ensure that you do not overwrite
+	// changes that were applied from another concurrent request.
 	Fingerprint string `json:"fingerprint,omitempty"`
 
 	// TargetPools: The list of target pool URLs that instances in this
-	// managed instance group belong to. When the managed instance group
-	// creates new instances, the group automatically adds those instances
-	// to the target pools that are specified in this parameter. Changing
-	// the value of this parameter does not change the target pools of
-	// existing instances in this managed instance group.
+	// managed instance group belong to. The managed instance group applies
+	// these target pools to all of the instances in the group. Existing
+	// instances and new instances in the group all receive these target
+	// pool settings.
 	TargetPools []string `json:"targetPools,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Fingerprint") to
@@ -3614,7 +3783,7 @@
 }
 
 type InstanceGroupsAddInstancesRequest struct {
-	// Instances: The instances to add to the instance group.
+	// Instances: The list of instances to add to the instance group.
 	Instances []*InstanceReference `json:"instances,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Instances") to
@@ -3634,11 +3803,11 @@
 
 type InstanceGroupsListInstances struct {
 	// Id: [Output Only] A unique identifier for this list of instance
-	// groups. The server defines this identifier.
+	// groups. The server generates this identifier.
 	Id string `json:"id,omitempty"`
 
-	// Items: A list of InstanceWithNamedPorts resources, which contains all
-	// named ports for the given instance.
+	// Items: [Output Only] A list of instances and any named ports that are
+	// assigned to those instances.
 	Items []*InstanceWithNamedPorts `json:"items,omitempty"`
 
 	// Kind: [Output Only] The resource type, which is always
@@ -3650,7 +3819,7 @@
 	NextPageToken string `json:"nextPageToken,omitempty"`
 
 	// SelfLink: [Output Only] The URL for this list of instance groups. The
-	// server defines this URL.
+	// server generates this URL.
 	SelfLink string `json:"selfLink,omitempty"`
 
 	// ServerResponse contains the HTTP response code and headers from the
@@ -3699,7 +3868,7 @@
 }
 
 type InstanceGroupsRemoveInstancesRequest struct {
-	// Instances: The instances to remove from the instance group.
+	// Instances: The list of instances to remove from the instance group.
 	Instances []*InstanceReference `json:"instances,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Instances") to
@@ -3809,9 +3978,12 @@
 }
 
 type InstanceGroupsSetNamedPortsRequest struct {
-	// Fingerprint: The fingerprint of the named ports information, which is
-	// a hash of the contents. Use this field for optimistic locking when
-	// you update the named ports entries.
+	// Fingerprint: The fingerprint of the named ports information for this
+	// instance group. Use this optional property to prevent conflicts when
+	// multiple users change the named ports settings concurrently. Obtain
+	// the fingerprint with the instanceGroups.get method. Then, include the
+	// fingerprint in your request to ensure that you do not overwrite
+	// changes that were applied from another concurrent request.
 	Fingerprint string `json:"fingerprint,omitempty"`
 
 	// NamedPorts: The list of named ports to set for this instance group.
@@ -3906,11 +4078,13 @@
 }
 
 type InstanceProperties struct {
-	// CanIpForward: A boolean that specifies if instances created from this
-	// template can send packets with source IP addresses other than their
-	// own or receive packets with destination IP addresses other than their
-	// own. If you use these instances as an IP gateway or as the next-hop
-	// in a Route resource, specify true. Otherwise, specify false.
+	// CanIpForward: Enables instances created based on this template to
+	// send packets with source IP addresses other than their own and
+	// receive packets with destination IP addresses other than their own.
+	// If these instances will be used as an IP gateway or it will be set as
+	// the next-hop in a Route resource, specify true. If unsure, leave this
+	// set to false. See the canIpForward documentation for more
+	// information.
 	CanIpForward bool `json:"canIpForward,omitempty"`
 
 	// Description: An optional text description for the instances that are
@@ -3932,16 +4106,11 @@
 	Metadata *Metadata `json:"metadata,omitempty"`
 
 	// NetworkInterfaces: An array of network access configurations for this
-	// interface. This specifies how this interface is configured to
-	// interact with other network services, such as connecting to the
-	// internet. Currently, ONE_TO_ONE_NAT is the only supported access
-	// configuration. If you do not specify any access configurations, the
-	// instances that are created from this template will have no external
-	// internet access.
+	// interface.
 	NetworkInterfaces []*NetworkInterface `json:"networkInterfaces,omitempty"`
 
-	// Scheduling: A list of scheduling options for the instances that are
-	// created from this template.
+	// Scheduling: Specifies the scheduling options for the instances that
+	// are created from this template.
 	Scheduling *Scheduling `json:"scheduling,omitempty"`
 
 	// ServiceAccounts: A list of service accounts with specified scopes.
@@ -3972,6 +4141,7 @@
 }
 
 type InstanceReference struct {
+	// Instance: The URL for a specific instance.
 	Instance string `json:"instance,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Instance") to
@@ -4006,12 +4176,16 @@
 	// compute#instanceTemplate for instance templates.
 	Kind string `json:"kind,omitempty"`
 
-	// Name: The name of the instance template. The name must be 1-63
-	// characters long, and comply with RFC1035.
+	// Name: Name of the resource; provided by the client when the resource
+	// is created. The name must be 1-63 characters long, and comply with
+	// RFC1035. Specifically, the name must be 1-63 characters long and
+	// match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means
+	// the first character must be a lowercase letter, and all following
+	// characters must be a dash, lowercase letter, or digit, except the
+	// last character, which cannot be a dash.
 	Name string `json:"name,omitempty"`
 
-	// Properties: The instance properties for the instance template
-	// resource.
+	// Properties: The instance properties for this instance template.
 	Properties *InstanceProperties `json:"properties,omitempty"`
 
 	// SelfLink: [Output Only] The URL for this instance template. The
@@ -4043,7 +4217,7 @@
 	// server defines this identifier.
 	Id string `json:"id,omitempty"`
 
-	// Items: A list of InstanceTemplate resources.
+	// Items: [Output Only] list of InstanceTemplate resources.
 	Items []*InstanceTemplate `json:"items,omitempty"`
 
 	// Kind: [Output Only] The resource type, which is always
@@ -4078,13 +4252,14 @@
 }
 
 type InstanceWithNamedPorts struct {
-	// Instance: The URL of the instance.
+	// Instance: [Output Only] The URL of the instance.
 	Instance string `json:"instance,omitempty"`
 
-	// NamedPorts: The named ports that belong to this instance group.
+	// NamedPorts: [Output Only] The named ports that belong to this
+	// instance group.
 	NamedPorts []*NamedPort `json:"namedPorts,omitempty"`
 
-	// Status: The status of the instance.
+	// Status: [Output Only] The status of the instance.
 	//
 	// Possible values:
 	//   "PROVISIONING"
@@ -4498,8 +4673,24 @@
 }
 
 type ManagedInstance struct {
-	// CurrentAction: The current action that the managed instance group has
-	// scheduled for the instance.
+	// CurrentAction: [Output Only] The current action that the managed
+	// instance group has scheduled for the instance. Possible values:
+	// - NONE The instance is running, and the managed instance group does
+	// not have any scheduled actions for this instance.
+	// - CREATING The managed instance group is creating this instance.
+	// - RECREATING The managed instance group is recreating this instance.
+	//
+	// - DELETING The managed instance group is permanently deleting this
+	// instance.
+	// - ABANDONING The managed instance group is abandoning this instance.
+	// The instance will be removed from the instance group and from any
+	// target pools that are associated with this group.
+	// - RESTARTING The managed instance group is restarting the instance.
+	//
+	// - REFRESHING The managed instance group is applying configuration
+	// changes to the instance without stopping it. For example, the group
+	// can update the target pool list for an instance without stopping that
+	// instance.
 	//
 	// Possible values:
 	//   "ABANDONING"
@@ -4511,16 +4702,16 @@
 	//   "RESTARTING"
 	CurrentAction string `json:"currentAction,omitempty"`
 
-	// Id: The unique identifier for this resource (empty when instance does
-	// not exist).
+	// Id: [Output only] The unique identifier for this resource. This field
+	// is empty when instance does not exist.
 	Id uint64 `json:"id,omitempty,string"`
 
-	// Instance: The URL of the instance (set even though instance does not
-	// exist yet).
+	// Instance: [Output Only] The URL of the instance. The URL can exist
+	// even if the instance has not yet been created.
 	Instance string `json:"instance,omitempty"`
 
-	// InstanceStatus: The status of the instance (empty when instance does
-	// not exist).
+	// InstanceStatus: [Output Only] The status of the instance. This field
+	// is empty when the instance does not exist.
 	//
 	// Possible values:
 	//   "PROVISIONING"
@@ -4533,8 +4724,8 @@
 	//   "TERMINATED"
 	InstanceStatus string `json:"instanceStatus,omitempty"`
 
-	// LastAttempt: Information about the last attempt to create or delete
-	// the instance.
+	// LastAttempt: [Output Only] Information about the last attempt to
+	// create or delete the instance.
 	LastAttempt *ManagedInstanceLastAttempt `json:"lastAttempt,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "CurrentAction") to
@@ -4553,8 +4744,8 @@
 }
 
 type ManagedInstanceLastAttempt struct {
-	// Errors: Encountered errors during the last attempt to create or
-	// delete the instance.
+	// Errors: [Output Only] Encountered errors during the last attempt to
+	// create or delete the instance.
 	Errors *ManagedInstanceLastAttemptErrors `json:"errors,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Errors") to
@@ -4572,8 +4763,8 @@
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
 
-// ManagedInstanceLastAttemptErrors: Encountered errors during the last
-// attempt to create or delete the instance.
+// ManagedInstanceLastAttemptErrors: [Output Only] Encountered errors
+// during the last attempt to create or delete the instance.
 type ManagedInstanceLastAttemptErrors struct {
 	// Errors: [Output Only] The array of errors encountered while
 	// processing this operation.
@@ -4682,9 +4873,10 @@
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
 
-// NamedPort: The named port information. For example: .
+// NamedPort: The named port. For example: .
 type NamedPort struct {
-	// Name: The name for this NamedPort.
+	// Name: The name for this named port. The name must be 1-63 characters
+	// long, and comply with RFC1035.
 	Name string `json:"name,omitempty"`
 
 	// Port: The port number, which can be a value between 1 and 65535.
@@ -4886,7 +5078,7 @@
 	// This is in RFC3339 text format.
 	InsertTime string `json:"insertTime,omitempty"`
 
-	// Kind: [Output Only] Type of the resource. Always compute#Operation
+	// Kind: [Output Only] Type of the resource. Always compute#operation
 	// for Operation resources.
 	Kind string `json:"kind,omitempty"`
 
@@ -4894,7 +5086,7 @@
 	Name string `json:"name,omitempty"`
 
 	// OperationType: [Output Only] Type of the operation, such as insert,
-	// update, and delete.
+	// compute.instanceGroups.update, or compute.instanceGroups.delete.
 	OperationType string `json:"operationType,omitempty"`
 
 	// Progress: [Output Only] An optional progress indicator that ranges
@@ -5245,7 +5437,7 @@
 
 // PathMatcher: A matcher for the path portion of the URL. The
 // BackendService from the longest-matched rule will serve the URL. If
-// no rule was matched, the default_service will be used.
+// no rule was matched, the default service will be used.
 type PathMatcher struct {
 	// DefaultService: The URL to the BackendService resource. This will be
 	// used if none of the 'pathRules' defined by this PathMatcher is met by
@@ -5963,6 +6155,104 @@
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
 
+// SslCertificate: An SslCertificate resource. This resource provides a
+// mechanism to upload an SSL key and certificate to global HTTPS
+// loadbalancer to serve secure connections.
+type SslCertificate struct {
+	// Certificate: A local certificate file. The certificate must be in PEM
+	// format. The certificate chain must be no greater than 5 certs long.
+	// The chain must include at least one intermediate cert.
+	Certificate string `json:"certificate,omitempty"`
+
+	// CreationTimestamp: [Output Only] Creation timestamp in RFC3339 text
+	// format.
+	CreationTimestamp string `json:"creationTimestamp,omitempty"`
+
+	// Description: An optional textual description of the resource.
+	// Provided by the client when the resource is created.
+	Description string `json:"description,omitempty"`
+
+	// Id: [Output Only] Unique identifier for the resource. Defined by the
+	// server.
+	Id uint64 `json:"id,omitempty,string"`
+
+	// Kind: [Output Only] Type of the resource. Always
+	// compute#sslCertificate for SSL certificates.
+	Kind string `json:"kind,omitempty"`
+
+	// Name: Name of the resource. Provided by the client when the resource
+	// is created. The name must be 1-63 characters long, and comply with
+	// RFC1035. Specifically, the name must be 1-63 characters long and
+	// match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means
+	// the first character must be a lowercase letter, and all following
+	// characters must be a dash, lowercase letter, or digit, except the
+	// last character, which cannot be a dash.
+	Name string `json:"name,omitempty"`
+
+	// PrivateKey: A write-only private key in PEM format. Only insert RPCs
+	// will include this field.
+	PrivateKey string `json:"privateKey,omitempty"`
+
+	// SelfLink: [Output only] Server-defined URL for the resource.
+	SelfLink string `json:"selfLink,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Certificate") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *SslCertificate) MarshalJSON() ([]byte, error) {
+	type noMethod SslCertificate
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// SslCertificateList: Contains a list of SslCertificate resources.
+type SslCertificateList struct {
+	// Id: [Output Only] Unique identifier for the resource. Defined by the
+	// server.
+	Id string `json:"id,omitempty"`
+
+	// Items: A list of SslCertificate resources.
+	Items []*SslCertificate `json:"items,omitempty"`
+
+	// Kind: Type of resource.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: [Output Only] A token used to continue a truncated
+	// list request.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// SelfLink: [Output Only] Server-defined URL for this resource.
+	SelfLink string `json:"selfLink,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Id") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *SslCertificateList) MarshalJSON() ([]byte, error) {
+	type noMethod SslCertificateList
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
 // Tags: A set of instance tags.
 type Tags struct {
 	// Fingerprint: Specifies a fingerprint for this request, which is
@@ -6009,7 +6299,7 @@
 	// server.
 	Id uint64 `json:"id,omitempty,string"`
 
-	// Kind: [Output Only] Type of resource. Always compute#Operation for
+	// Kind: [Output Only] Type of resource. Always compute#operation for
 	// Operation resources.
 	Kind string `json:"kind,omitempty"`
 
@@ -6087,6 +6377,123 @@
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
 
+type TargetHttpsProxiesSetSslCertificatesRequest struct {
+	// SslCertificates: New set of URLs to SslCertificate resources to
+	// associate with this TargetHttpProxy. Currently exactly one ssl
+	// certificate must be specified.
+	SslCertificates []string `json:"sslCertificates,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "SslCertificates") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *TargetHttpsProxiesSetSslCertificatesRequest) MarshalJSON() ([]byte, error) {
+	type noMethod TargetHttpsProxiesSetSslCertificatesRequest
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// TargetHttpsProxy: A TargetHttpsProxy resource. This resource defines
+// an HTTPS proxy.
+type TargetHttpsProxy struct {
+	// CreationTimestamp: [Output Only] Creation timestamp in RFC3339 text
+	// format.
+	CreationTimestamp string `json:"creationTimestamp,omitempty"`
+
+	// Description: An optional textual description of the resource.
+	// Provided by the client when the resource is created.
+	Description string `json:"description,omitempty"`
+
+	// Id: [Output Only] Unique identifier for the resource; defined by the
+	// server.
+	Id uint64 `json:"id,omitempty,string"`
+
+	// Kind: Type of the resource.
+	Kind string `json:"kind,omitempty"`
+
+	// Name: Name of the resource. Provided by the client when the resource
+	// is created. The name must be 1-63 characters long, and comply with
+	// RFC1035. Specifically, the name must be 1-63 characters long and
+	// match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means
+	// the first character must be a lowercase letter, and all following
+	// characters must be a dash, lowercase letter, or digit, except the
+	// last character, which cannot be a dash.
+	Name string `json:"name,omitempty"`
+
+	// SelfLink: [Output Only] Server-defined URL for the resource.
+	SelfLink string `json:"selfLink,omitempty"`
+
+	// SslCertificates: URLs to SslCertificate resources that are used to
+	// authenticate connections to Backends. Currently exactly one SSL
+	// certificate must be specified.
+	SslCertificates []string `json:"sslCertificates,omitempty"`
+
+	// UrlMap: URL to the UrlMap resource that defines the mapping from URL
+	// to the BackendService.
+	UrlMap string `json:"urlMap,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "CreationTimestamp")
+	// to unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *TargetHttpsProxy) MarshalJSON() ([]byte, error) {
+	type noMethod TargetHttpsProxy
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// TargetHttpsProxyList: Contains a list of TargetHttpsProxy resources.
+type TargetHttpsProxyList struct {
+	// Id: [Output Only] Unique identifier for the resource; defined by the
+	// server.
+	Id string `json:"id,omitempty"`
+
+	// Items: A list of TargetHttpsProxy resources.
+	Items []*TargetHttpsProxy `json:"items,omitempty"`
+
+	// Kind: Type of resource.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: [Output Only] A token used to continue a truncated
+	// list request.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// SelfLink: [Output Only] Server-defined URL for this resource.
+	SelfLink string `json:"selfLink,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Id") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *TargetHttpsProxyList) MarshalJSON() ([]byte, error) {
+	type noMethod TargetHttpsProxyList
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
 // TargetInstance: A TargetInstance resource. This resource defines an
 // endpoint instance that terminates traffic of certain protocols.
 type TargetInstance struct {
@@ -6397,12 +6804,15 @@
 	SelfLink string `json:"selfLink,omitempty"`
 
 	// SessionAffinity: Sesssion affinity option, must be one of the
-	// following values: NONE: Connections from the same client IP may go to
-	// any instance in the pool; CLIENT_IP: Connections from the same client
-	// IP will go to the same instance in the pool while that instance
-	// remains healthy. CLIENT_IP_PROTO: Connections from the same client IP
-	// with the same IP protocol will go to the same instance in the pool
-	// while that instance remains healthy.
+	// following values:
+	// NONE: Connections from the same client IP may go to any instance in
+	// the pool.
+	// CLIENT_IP: Connections from the same client IP will go to the same
+	// instance in the pool while that instance remains
+	// healthy.
+	// CLIENT_IP_PROTO: Connections from the same client IP with the same IP
+	// protocol will go to the same instance in the pool while that instance
+	// remains healthy.
 	//
 	// Possible values:
 	//   "CLIENT_IP"
@@ -16807,6 +17217,870 @@
 
 }
 
+// method id "compute.httpsHealthChecks.delete":
+
+type HttpsHealthChecksDeleteCall struct {
+	s                *Service
+	project          string
+	httpsHealthCheck string
+	opt_             map[string]interface{}
+	ctx_             context.Context
+}
+
+// Delete: Deletes the specified HttpsHealthCheck resource.
+func (r *HttpsHealthChecksService) Delete(project string, httpsHealthCheck string) *HttpsHealthChecksDeleteCall {
+	c := &HttpsHealthChecksDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.httpsHealthCheck = httpsHealthCheck
+	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 *HttpsHealthChecksDeleteCall) Fields(s ...googleapi.Field) *HttpsHealthChecksDeleteCall {
+	c.opt_["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 *HttpsHealthChecksDeleteCall) Context(ctx context.Context) *HttpsHealthChecksDeleteCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *HttpsHealthChecksDeleteCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/httpsHealthChecks/{httpsHealthCheck}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"project":          c.project,
+		"httpsHealthCheck": c.httpsHealthCheck,
+	})
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "compute.httpsHealthChecks.delete" call.
+// Exactly one of *Operation or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *Operation.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *HttpsHealthChecksDeleteCall) Do() (*Operation, error) {
+	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,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Deletes the specified HttpsHealthCheck resource.",
+	//   "httpMethod": "DELETE",
+	//   "id": "compute.httpsHealthChecks.delete",
+	//   "parameterOrder": [
+	//     "project",
+	//     "httpsHealthCheck"
+	//   ],
+	//   "parameters": {
+	//     "httpsHealthCheck": {
+	//       "description": "Name of the HttpsHealthCheck resource to delete.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "project": {
+	//       "description": "Name of the project scoping this request.",
+	//       "location": "path",
+	//       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/global/httpsHealthChecks/{httpsHealthCheck}",
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.httpsHealthChecks.get":
+
+type HttpsHealthChecksGetCall struct {
+	s                *Service
+	project          string
+	httpsHealthCheck string
+	opt_             map[string]interface{}
+	ctx_             context.Context
+}
+
+// Get: Returns the specified HttpsHealthCheck resource.
+func (r *HttpsHealthChecksService) Get(project string, httpsHealthCheck string) *HttpsHealthChecksGetCall {
+	c := &HttpsHealthChecksGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.httpsHealthCheck = httpsHealthCheck
+	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 *HttpsHealthChecksGetCall) Fields(s ...googleapi.Field) *HttpsHealthChecksGetCall {
+	c.opt_["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 *HttpsHealthChecksGetCall) IfNoneMatch(entityTag string) *HttpsHealthChecksGetCall {
+	c.opt_["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 *HttpsHealthChecksGetCall) Context(ctx context.Context) *HttpsHealthChecksGetCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *HttpsHealthChecksGetCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/httpsHealthChecks/{httpsHealthCheck}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"project":          c.project,
+		"httpsHealthCheck": c.httpsHealthCheck,
+	})
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if v, ok := c.opt_["ifNoneMatch"]; ok {
+		req.Header.Set("If-None-Match", fmt.Sprintf("%v", v))
+	}
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "compute.httpsHealthChecks.get" call.
+// Exactly one of *HttpsHealthCheck or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *HttpsHealthCheck.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 *HttpsHealthChecksGetCall) Do() (*HttpsHealthCheck, error) {
+	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 := &HttpsHealthCheck{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Returns the specified HttpsHealthCheck resource.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.httpsHealthChecks.get",
+	//   "parameterOrder": [
+	//     "project",
+	//     "httpsHealthCheck"
+	//   ],
+	//   "parameters": {
+	//     "httpsHealthCheck": {
+	//       "description": "Name of the HttpsHealthCheck resource to return.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "project": {
+	//       "description": "Name of the project scoping this request.",
+	//       "location": "path",
+	//       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/global/httpsHealthChecks/{httpsHealthCheck}",
+	//   "response": {
+	//     "$ref": "HttpsHealthCheck"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.httpsHealthChecks.insert":
+
+type HttpsHealthChecksInsertCall struct {
+	s                *Service
+	project          string
+	httpshealthcheck *HttpsHealthCheck
+	opt_             map[string]interface{}
+	ctx_             context.Context
+}
+
+// Insert: Creates a HttpsHealthCheck resource in the specified project
+// using the data included in the request.
+func (r *HttpsHealthChecksService) Insert(project string, httpshealthcheck *HttpsHealthCheck) *HttpsHealthChecksInsertCall {
+	c := &HttpsHealthChecksInsertCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.httpshealthcheck = httpshealthcheck
+	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 *HttpsHealthChecksInsertCall) Fields(s ...googleapi.Field) *HttpsHealthChecksInsertCall {
+	c.opt_["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 *HttpsHealthChecksInsertCall) Context(ctx context.Context) *HttpsHealthChecksInsertCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *HttpsHealthChecksInsertCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.httpshealthcheck)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/httpsHealthChecks")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"project": c.project,
+	})
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "compute.httpsHealthChecks.insert" 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 *HttpsHealthChecksInsertCall) Do() (*Operation, error) {
+	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,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Creates a HttpsHealthCheck resource in the specified project using the data included in the request.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.httpsHealthChecks.insert",
+	//   "parameterOrder": [
+	//     "project"
+	//   ],
+	//   "parameters": {
+	//     "project": {
+	//       "description": "Name of the project scoping this request.",
+	//       "location": "path",
+	//       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/global/httpsHealthChecks",
+	//   "request": {
+	//     "$ref": "HttpsHealthCheck"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.httpsHealthChecks.list":
+
+type HttpsHealthChecksListCall struct {
+	s       *Service
+	project string
+	opt_    map[string]interface{}
+	ctx_    context.Context
+}
+
+// List: Retrieves the list of HttpsHealthCheck resources available to
+// the specified project.
+func (r *HttpsHealthChecksService) List(project string) *HttpsHealthChecksListCall {
+	c := &HttpsHealthChecksListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	return c
+}
+
+// Filter sets the optional parameter "filter": Sets a filter expression
+// for filtering listed resources, in the form filter={expression}. Your
+// {expression} must be in the format: FIELD_NAME COMPARISON_STRING
+// LITERAL_STRING.
+//
+// The FIELD_NAME is the name of the field you want to compare. Only
+// atomic field types are supported (string, number, boolean). The
+// COMPARISON_STRING must be either eq (equals) or ne (not equals). The
+// LITERAL_STRING is the string value to filter to. The literal value
+// must be valid for the type of field (string, number, boolean). For
+// string fields, the literal value is interpreted as a regular
+// expression using RE2 syntax. The literal value must match the entire
+// field.
+//
+// For example, filter=name ne example-instance.
+func (c *HttpsHealthChecksListCall) Filter(filter string) *HttpsHealthChecksListCall {
+	c.opt_["filter"] = filter
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": Maximum count of
+// results to be returned.
+func (c *HttpsHealthChecksListCall) MaxResults(maxResults int64) *HttpsHealthChecksListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Specifies a page
+// token to use. Use this parameter if you want to list the next page of
+// results. Set pageToken to the nextPageToken returned by a previous
+// list request.
+func (c *HttpsHealthChecksListCall) PageToken(pageToken string) *HttpsHealthChecksListCall {
+	c.opt_["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 *HttpsHealthChecksListCall) Fields(s ...googleapi.Field) *HttpsHealthChecksListCall {
+	c.opt_["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 *HttpsHealthChecksListCall) IfNoneMatch(entityTag string) *HttpsHealthChecksListCall {
+	c.opt_["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 *HttpsHealthChecksListCall) Context(ctx context.Context) *HttpsHealthChecksListCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *HttpsHealthChecksListCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["filter"]; ok {
+		params.Set("filter", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["maxResults"]; ok {
+		params.Set("maxResults", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["pageToken"]; ok {
+		params.Set("pageToken", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/httpsHealthChecks")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"project": c.project,
+	})
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if v, ok := c.opt_["ifNoneMatch"]; ok {
+		req.Header.Set("If-None-Match", fmt.Sprintf("%v", v))
+	}
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "compute.httpsHealthChecks.list" call.
+// Exactly one of *HttpsHealthCheckList or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *HttpsHealthCheckList.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 *HttpsHealthChecksListCall) Do() (*HttpsHealthCheckList, error) {
+	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 := &HttpsHealthCheckList{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves the list of HttpsHealthCheck resources available to the specified project.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.httpsHealthChecks.list",
+	//   "parameterOrder": [
+	//     "project"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "Sets a filter expression for filtering listed resources, in the form filter={expression}. Your {expression} must be in the format: FIELD_NAME COMPARISON_STRING LITERAL_STRING.\n\nThe FIELD_NAME is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The COMPARISON_STRING must be either eq (equals) or ne (not equals). The LITERAL_STRING is the string value to filter to. The literal value must be valid for the type of field (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.\n\nFor example, filter=name ne example-instance.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "default": "500",
+	//       "description": "Maximum count of results to be returned.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "maximum": "500",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Specifies a page token to use. Use this parameter if you want to list the next page of results. Set pageToken to the nextPageToken returned by a previous list request.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "project": {
+	//       "description": "Name of the project scoping this request.",
+	//       "location": "path",
+	//       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/global/httpsHealthChecks",
+	//   "response": {
+	//     "$ref": "HttpsHealthCheckList"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.httpsHealthChecks.patch":
+
+type HttpsHealthChecksPatchCall struct {
+	s                *Service
+	project          string
+	httpsHealthCheck string
+	httpshealthcheck *HttpsHealthCheck
+	opt_             map[string]interface{}
+	ctx_             context.Context
+}
+
+// Patch: Updates a HttpsHealthCheck resource in the specified project
+// using the data included in the request. This method supports patch
+// semantics.
+func (r *HttpsHealthChecksService) Patch(project string, httpsHealthCheck string, httpshealthcheck *HttpsHealthCheck) *HttpsHealthChecksPatchCall {
+	c := &HttpsHealthChecksPatchCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.httpsHealthCheck = httpsHealthCheck
+	c.httpshealthcheck = httpshealthcheck
+	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 *HttpsHealthChecksPatchCall) Fields(s ...googleapi.Field) *HttpsHealthChecksPatchCall {
+	c.opt_["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 *HttpsHealthChecksPatchCall) Context(ctx context.Context) *HttpsHealthChecksPatchCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *HttpsHealthChecksPatchCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.httpshealthcheck)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/httpsHealthChecks/{httpsHealthCheck}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("PATCH", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"project":          c.project,
+		"httpsHealthCheck": c.httpsHealthCheck,
+	})
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "compute.httpsHealthChecks.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 *HttpsHealthChecksPatchCall) Do() (*Operation, error) {
+	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,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates a HttpsHealthCheck resource in the specified project using the data included in the request. This method supports patch semantics.",
+	//   "httpMethod": "PATCH",
+	//   "id": "compute.httpsHealthChecks.patch",
+	//   "parameterOrder": [
+	//     "project",
+	//     "httpsHealthCheck"
+	//   ],
+	//   "parameters": {
+	//     "httpsHealthCheck": {
+	//       "description": "Name of the HttpsHealthCheck resource to update.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "project": {
+	//       "description": "Name of the project scoping this request.",
+	//       "location": "path",
+	//       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/global/httpsHealthChecks/{httpsHealthCheck}",
+	//   "request": {
+	//     "$ref": "HttpsHealthCheck"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.httpsHealthChecks.update":
+
+type HttpsHealthChecksUpdateCall struct {
+	s                *Service
+	project          string
+	httpsHealthCheck string
+	httpshealthcheck *HttpsHealthCheck
+	opt_             map[string]interface{}
+	ctx_             context.Context
+}
+
+// Update: Updates a HttpsHealthCheck resource in the specified project
+// using the data included in the request.
+func (r *HttpsHealthChecksService) Update(project string, httpsHealthCheck string, httpshealthcheck *HttpsHealthCheck) *HttpsHealthChecksUpdateCall {
+	c := &HttpsHealthChecksUpdateCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.httpsHealthCheck = httpsHealthCheck
+	c.httpshealthcheck = httpshealthcheck
+	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 *HttpsHealthChecksUpdateCall) Fields(s ...googleapi.Field) *HttpsHealthChecksUpdateCall {
+	c.opt_["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 *HttpsHealthChecksUpdateCall) Context(ctx context.Context) *HttpsHealthChecksUpdateCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *HttpsHealthChecksUpdateCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.httpshealthcheck)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/httpsHealthChecks/{httpsHealthCheck}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("PUT", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"project":          c.project,
+		"httpsHealthCheck": c.httpsHealthCheck,
+	})
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "compute.httpsHealthChecks.update" 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 *HttpsHealthChecksUpdateCall) Do() (*Operation, error) {
+	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,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates a HttpsHealthCheck resource in the specified project using the data included in the request.",
+	//   "httpMethod": "PUT",
+	//   "id": "compute.httpsHealthChecks.update",
+	//   "parameterOrder": [
+	//     "project",
+	//     "httpsHealthCheck"
+	//   ],
+	//   "parameters": {
+	//     "httpsHealthCheck": {
+	//       "description": "Name of the HttpsHealthCheck resource to update.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "project": {
+	//       "description": "Name of the project scoping this request.",
+	//       "location": "path",
+	//       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/global/httpsHealthChecks/{httpsHealthCheck}",
+	//   "request": {
+	//     "$ref": "HttpsHealthCheck"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
 // method id "compute.images.delete":
 
 type ImagesDeleteCall struct {
@@ -17356,8 +18630,15 @@
 	ctx_    context.Context
 }
 
-// List: Retrieves the list of image resources available to the
-// specified project.
+// List: Retrieves the list of private images available to the specified
+// project. Private images are images you create that belong to your
+// project. This method does not get any images that belong to other
+// projects, including publicly-available images, like Debian 7. If you
+// want to get a list of publicly-available images, use this method to
+// make a request to the respective image project, such as debian-cloud
+// or windows-cloud.
+//
+// See Accessing images for more information.
 // For details, see https://cloud.google.com/compute/docs/reference/latest/images/list
 func (r *ImagesService) List(project string) *ImagesListCall {
 	c := &ImagesListCall{s: r.s, opt_: make(map[string]interface{})}
@@ -17495,7 +18776,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Retrieves the list of image resources available to the specified project.",
+	//   "description": "Retrieves the list of private images available to the specified project. Private images are images you create that belong to your project. This method does not get any images that belong to other projects, including publicly-available images, like Debian 7. If you want to get a list of publicly-available images, use this method to make a request to the respective image project, such as debian-cloud or windows-cloud.\n\nSee Accessing images for more information.",
 	//   "httpMethod": "GET",
 	//   "id": "compute.images.list",
 	//   "parameterOrder": [
@@ -17554,11 +18835,15 @@
 	ctx_                                         context.Context
 }
 
-// AbandonInstances: Removes the specified instances from the managed
-// instance group, and from any target pools where they are a member.
-// The instances are not deleted. The managed instance group
-// automatically reduces its targetSize value by the number of instances
-// that you abandon from the group.
+// AbandonInstances: Schedules a group action to remove the specified
+// instances from the managed instance group. Abandoning an instance
+// does not delete the instance, but it does remove the instance from
+// any target pools that are applied by the managed instance group. This
+// method reduces the targetSize of the managed instance group by the
+// number of instances that you abandon. This operation is marked as
+// DONE when the action is scheduled even if the instances have not yet
+// been removed from the group. You must separately verify the status of
+// the abandoning action with the listmanagedinstances method.
 func (r *InstanceGroupManagersService) AbandonInstances(project string, zone string, instanceGroupManager string, instancegroupmanagersabandoninstancesrequest *InstanceGroupManagersAbandonInstancesRequest) *InstanceGroupManagersAbandonInstancesCall {
 	c := &InstanceGroupManagersAbandonInstancesCall{s: r.s, opt_: make(map[string]interface{})}
 	c.project = project
@@ -17648,7 +18933,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Removes the specified instances from the managed instance group, and from any target pools where they are a member. The instances are not deleted. The managed instance group automatically reduces its targetSize value by the number of instances that you abandon from the group.",
+	//   "description": "Schedules a group action to remove the specified instances from the managed instance group. Abandoning an instance does not delete the instance, but it does remove the instance from any target pools that are applied by the managed instance group. This method reduces the targetSize of the managed instance group by the number of instances that you abandon. This operation is marked as DONE when the action is scheduled even if the instances have not yet been removed from the group. You must separately verify the status of the abandoning action with the listmanagedinstances method.",
 	//   "httpMethod": "POST",
 	//   "id": "compute.instanceGroupManagers.abandonInstances",
 	//   "parameterOrder": [
@@ -17658,7 +18943,7 @@
 	//   ],
 	//   "parameters": {
 	//     "instanceGroupManager": {
-	//       "description": "The name of the instance group manager.",
+	//       "description": "The name of the managed instance group.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -17671,7 +18956,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the managed instance group is located.",
+	//       "description": "The name of the zone where the managed instance group is located.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -17701,8 +18986,8 @@
 	ctx_    context.Context
 }
 
-// AggregatedList: Retrieves the list of managed instance groups, and
-// groups them by project and zone.
+// AggregatedList: Retrieves the list of managed instance groups and
+// groups them by zone.
 func (r *InstanceGroupManagersService) AggregatedList(project string) *InstanceGroupManagersAggregatedListCall {
 	c := &InstanceGroupManagersAggregatedListCall{s: r.s, opt_: make(map[string]interface{})}
 	c.project = project
@@ -17840,7 +19125,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Retrieves the list of managed instance groups, and groups them by project and zone.",
+	//   "description": "Retrieves the list of managed instance groups and groups them by zone.",
 	//   "httpMethod": "GET",
 	//   "id": "compute.instanceGroupManagers.aggregatedList",
 	//   "parameterOrder": [
@@ -17898,7 +19183,8 @@
 	ctx_                 context.Context
 }
 
-// Delete: Deletes the specified managed instance group resource.
+// Delete: Deletes the specified managed instance group and all of the
+// instances in that group.
 func (r *InstanceGroupManagersService) Delete(project string, zone string, instanceGroupManager string) *InstanceGroupManagersDeleteCall {
 	c := &InstanceGroupManagersDeleteCall{s: r.s, opt_: make(map[string]interface{})}
 	c.project = project
@@ -17981,7 +19267,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Deletes the specified managed instance group resource.",
+	//   "description": "Deletes the specified managed instance group and all of the instances in that group.",
 	//   "httpMethod": "DELETE",
 	//   "id": "compute.instanceGroupManagers.delete",
 	//   "parameterOrder": [
@@ -17991,7 +19277,7 @@
 	//   ],
 	//   "parameters": {
 	//     "instanceGroupManager": {
-	//       "description": "The name of the instance group manager to delete.",
+	//       "description": "The name of the managed instance group to delete.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -18004,7 +19290,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the managed instance group is located.",
+	//       "description": "The name of the zone where the managed instance group is located.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -18034,11 +19320,14 @@
 	ctx_                                        context.Context
 }
 
-// DeleteInstances: Deletes the specified instances. The instances are
-// deleted and removed from the instance group and any target pools
-// where they are a member. The managed instance group automatically
-// reduces its targetSize value by the number of instances that you
-// delete.
+// DeleteInstances: Schedules a group action to delete the specified
+// instances in the managed instance group. The instances are also
+// removed from any target pools of which they were a member. This
+// method reduces the targetSize of the managed instance group by the
+// number of instances that you delete. This operation is marked as DONE
+// when the action is scheduled even if the instances are still being
+// deleted. You must separately verify the status of the deleting action
+// with the listmanagedinstances method.
 func (r *InstanceGroupManagersService) DeleteInstances(project string, zone string, instanceGroupManager string, instancegroupmanagersdeleteinstancesrequest *InstanceGroupManagersDeleteInstancesRequest) *InstanceGroupManagersDeleteInstancesCall {
 	c := &InstanceGroupManagersDeleteInstancesCall{s: r.s, opt_: make(map[string]interface{})}
 	c.project = project
@@ -18128,7 +19417,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Deletes the specified instances. The instances are deleted and removed from the instance group and any target pools where they are a member. The managed instance group automatically reduces its targetSize value by the number of instances that you delete.",
+	//   "description": "Schedules a group action to delete the specified instances in the managed instance group. The instances are also removed from any target pools of which they were a member. This method reduces the targetSize of the managed instance group by the number of instances that you delete. This operation is marked as DONE when the action is scheduled even if the instances are still being deleted. You must separately verify the status of the deleting action with the listmanagedinstances method.",
 	//   "httpMethod": "POST",
 	//   "id": "compute.instanceGroupManagers.deleteInstances",
 	//   "parameterOrder": [
@@ -18138,7 +19427,7 @@
 	//   ],
 	//   "parameters": {
 	//     "instanceGroupManager": {
-	//       "description": "The name of the instance group manager.",
+	//       "description": "The name of the managed instance group.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -18151,7 +19440,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the managed instance group is located.",
+	//       "description": "The name of the zone where the managed instance group is located.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -18183,7 +19472,8 @@
 	ctx_                 context.Context
 }
 
-// Get: Returns the specified managed instance group resource.
+// Get: Returns all of the details about the specified managed instance
+// group.
 func (r *InstanceGroupManagersService) Get(project string, zone string, instanceGroupManager string) *InstanceGroupManagersGetCall {
 	c := &InstanceGroupManagersGetCall{s: r.s, opt_: make(map[string]interface{})}
 	c.project = project
@@ -18279,7 +19569,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Returns the specified managed instance group resource.",
+	//   "description": "Returns all of the details about the specified managed instance group.",
 	//   "httpMethod": "GET",
 	//   "id": "compute.instanceGroupManagers.get",
 	//   "parameterOrder": [
@@ -18289,7 +19579,7 @@
 	//   ],
 	//   "parameters": {
 	//     "instanceGroupManager": {
-	//       "description": "The name of the instance group manager resource.",
+	//       "description": "The name of the managed instance group.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -18302,7 +19592,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the managed instance group is located.",
+	//       "description": "The name of the zone where the managed instance group is located.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -18332,8 +19622,13 @@
 	ctx_                 context.Context
 }
 
-// Insert: Creates a managed instance group resource in the specified
-// project using the data that is included in the request.
+// Insert: Creates a managed instance group using the information that
+// you specify in the request. After the group is created, it schedules
+// an action to create instances in the group using the specified
+// instance template. This operation is marked as DONE when the group is
+// created even if the instances in the group have not yet been created.
+// You must separately verify the status of the individual instances
+// with the listmanagedinstances method.
 func (r *InstanceGroupManagersService) Insert(project string, zone string, instancegroupmanager *InstanceGroupManager) *InstanceGroupManagersInsertCall {
 	c := &InstanceGroupManagersInsertCall{s: r.s, opt_: make(map[string]interface{})}
 	c.project = project
@@ -18421,7 +19716,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Creates a managed instance group resource in the specified project using the data that is included in the request.",
+	//   "description": "Creates a managed instance group using the information that you specify in the request. After the group is created, it schedules an action to create instances in the group using the specified instance template. This operation is marked as DONE when the group is created even if the instances in the group have not yet been created. You must separately verify the status of the individual instances with the listmanagedinstances method.",
 	//   "httpMethod": "POST",
 	//   "id": "compute.instanceGroupManagers.insert",
 	//   "parameterOrder": [
@@ -18437,7 +19732,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the managed instance group is located.",
+	//       "description": "The name of the zone where you want to create the managed instance group.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -18643,7 +19938,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the managed instance group is located.",
+	//       "description": "The name of the zone where the managed instance group is located.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -18673,7 +19968,12 @@
 	ctx_                 context.Context
 }
 
-// ListManagedInstances: Lists managed instances.
+// ListManagedInstances: Lists all of the instances in the managed
+// instance group. Each instance in the list has a currentAction, which
+// indicates the action that the managed instance group is performing on
+// the instance. For example, if the group is still creating an
+// instance, the currentAction is CREATING. If a previous action failed,
+// the list displays the errors for that failed action.
 func (r *InstanceGroupManagersService) ListManagedInstances(project string, zone string, instanceGroupManager string) *InstanceGroupManagersListManagedInstancesCall {
 	c := &InstanceGroupManagersListManagedInstancesCall{s: r.s, opt_: make(map[string]interface{})}
 	c.project = project
@@ -18758,7 +20058,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Lists managed instances.",
+	//   "description": "Lists all of the instances in the managed instance group. Each instance in the list has a currentAction, which indicates the action that the managed instance group is performing on the instance. For example, if the group is still creating an instance, the currentAction is CREATING. If a previous action failed, the list displays the errors for that failed action.",
 	//   "httpMethod": "POST",
 	//   "id": "compute.instanceGroupManagers.listManagedInstances",
 	//   "parameterOrder": [
@@ -18781,7 +20081,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the managed instance group is located.",
+	//       "description": "The name of the zone where the managed instance group is located.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -18812,9 +20112,13 @@
 	ctx_                                          context.Context
 }
 
-// RecreateInstances: Recreates the specified instances. The instances
-// are deleted, then recreated using the managed instance group's
-// current instance template.
+// RecreateInstances: Schedules a group action to recreate the specified
+// instances in the managed instance group. The instances are deleted
+// and recreated using the current instance template for the managed
+// instance group. This operation is marked as DONE when the action is
+// scheduled even if the instances have not yet been recreated. You must
+// separately verify the status of the recreating action with the
+// listmanagedinstances method.
 func (r *InstanceGroupManagersService) RecreateInstances(project string, zone string, instanceGroupManager string, instancegroupmanagersrecreateinstancesrequest *InstanceGroupManagersRecreateInstancesRequest) *InstanceGroupManagersRecreateInstancesCall {
 	c := &InstanceGroupManagersRecreateInstancesCall{s: r.s, opt_: make(map[string]interface{})}
 	c.project = project
@@ -18904,7 +20208,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Recreates the specified instances. The instances are deleted, then recreated using the managed instance group's current instance template.",
+	//   "description": "Schedules a group action to recreate the specified instances in the managed instance group. The instances are deleted and recreated using the current instance template for the managed instance group. This operation is marked as DONE when the action is scheduled even if the instances have not yet been recreated. You must separately verify the status of the recreating action with the listmanagedinstances method.",
 	//   "httpMethod": "POST",
 	//   "id": "compute.instanceGroupManagers.recreateInstances",
 	//   "parameterOrder": [
@@ -18914,7 +20218,7 @@
 	//   ],
 	//   "parameters": {
 	//     "instanceGroupManager": {
-	//       "description": "The name of the instance group manager.",
+	//       "description": "The name of the managed instance group.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -18927,7 +20231,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the managed instance group is located.",
+	//       "description": "The name of the zone where the managed instance group is located.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -18962,8 +20266,11 @@
 
 // Resize: Resizes the managed instance group. If you increase the size,
 // the group creates new instances using the current instance template.
-// If you decrease the size, the group removes instances in the order
-// that is outlined in Resizing a managed instance group.
+// If you decrease the size, the group deletes instances. The resize
+// operation is marked DONE when the resize actions are scheduled even
+// if the group has not yet added or deleted any instances. You must
+// separately verify the status of the creating or deleting actions with
+// the listmanagedinstances method.
 func (r *InstanceGroupManagersService) Resize(project string, zone string, instanceGroupManager string, size int64) *InstanceGroupManagersResizeCall {
 	c := &InstanceGroupManagersResizeCall{s: r.s, opt_: make(map[string]interface{})}
 	c.project = project
@@ -19048,7 +20355,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Resizes the managed instance group. If you increase the size, the group creates new instances using the current instance template. If you decrease the size, the group removes instances in the order that is outlined in Resizing a managed instance group.",
+	//   "description": "Resizes the managed instance group. If you increase the size, the group creates new instances using the current instance template. If you decrease the size, the group deletes instances. The resize operation is marked DONE when the resize actions are scheduled even if the group has not yet added or deleted any instances. You must separately verify the status of the creating or deleting actions with the listmanagedinstances method.",
 	//   "httpMethod": "POST",
 	//   "id": "compute.instanceGroupManagers.resize",
 	//   "parameterOrder": [
@@ -19059,7 +20366,7 @@
 	//   ],
 	//   "parameters": {
 	//     "instanceGroupManager": {
-	//       "description": "The name of the instance group manager.",
+	//       "description": "The name of the managed instance group.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -19079,7 +20386,7 @@
 	//       "type": "integer"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the managed instance group is located.",
+	//       "description": "The name of the zone where the managed instance group is located.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -19211,7 +20518,7 @@
 	//   ],
 	//   "parameters": {
 	//     "instanceGroupManager": {
-	//       "description": "The name of the instance group manager.",
+	//       "description": "The name of the managed instance group.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -19224,7 +20531,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the managed instance group is located.",
+	//       "description": "The name of the zone where the managed instance group is located.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -19257,9 +20564,13 @@
 	ctx_                                       context.Context
 }
 
-// SetTargetPools: Modifies the target pools to which all new instances
-// in this group are assigned. The target pools for existing instances
-// in the group do not change unless you recreate them.
+// SetTargetPools: Modifies the target pools to which all instances in
+// this managed instance group are assigned. The target pools
+// automatically apply to all of the instances in the managed instance
+// group. This operation is marked DONE when you make the request even
+// if the instances have not yet been added to their target pools. The
+// change might take some time to apply to all of the instances in the
+// group depending on the size of the group.
 func (r *InstanceGroupManagersService) SetTargetPools(project string, zone string, instanceGroupManager string, instancegroupmanagerssettargetpoolsrequest *InstanceGroupManagersSetTargetPoolsRequest) *InstanceGroupManagersSetTargetPoolsCall {
 	c := &InstanceGroupManagersSetTargetPoolsCall{s: r.s, opt_: make(map[string]interface{})}
 	c.project = project
@@ -19349,7 +20660,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Modifies the target pools to which all new instances in this group are assigned. The target pools for existing instances in the group do not change unless you recreate them.",
+	//   "description": "Modifies the target pools to which all instances in this managed instance group are assigned. The target pools automatically apply to all of the instances in the managed instance group. This operation is marked DONE when you make the request even if the instances have not yet been added to their target pools. The change might take some time to apply to all of the instances in the group depending on the size of the group.",
 	//   "httpMethod": "POST",
 	//   "id": "compute.instanceGroupManagers.setTargetPools",
 	//   "parameterOrder": [
@@ -19359,7 +20670,7 @@
 	//   ],
 	//   "parameters": {
 	//     "instanceGroupManager": {
-	//       "description": "The name of the instance group manager.",
+	//       "description": "The name of the managed instance group.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -19372,7 +20683,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the managed instance group is located.",
+	//       "description": "The name of the zone where the managed instance group is located.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -19405,8 +20716,10 @@
 	ctx_                              context.Context
 }
 
-// AddInstances: Adds a list of instances to an instance group. All of
-// the instances in the instance group must be in the same network.
+// AddInstances: Adds a list of instances to the specified instance
+// group. All of the instances in the instance group must be in the same
+// network/subnetwork. TODO: Change to comment to state "if IG is load
+// balanced."
 func (r *InstanceGroupsService) AddInstances(project string, zone string, instanceGroup string, instancegroupsaddinstancesrequest *InstanceGroupsAddInstancesRequest) *InstanceGroupsAddInstancesCall {
 	c := &InstanceGroupsAddInstancesCall{s: r.s, opt_: make(map[string]interface{})}
 	c.project = project
@@ -19496,7 +20809,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Adds a list of instances to an instance group. All of the instances in the instance group must be in the same network.",
+	//   "description": "Adds a list of instances to the specified instance group. All of the instances in the instance group must be in the same network/subnetwork. TODO: Change to comment to state \"if IG is load balanced.\"",
 	//   "httpMethod": "POST",
 	//   "id": "compute.instanceGroups.addInstances",
 	//   "parameterOrder": [
@@ -19519,7 +20832,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the instance group is located.",
+	//       "description": "The name of the zone where the instance group is located.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -19549,7 +20862,7 @@
 	ctx_    context.Context
 }
 
-// AggregatedList: Retrieves the list of instance groups, and sorts them
+// AggregatedList: Retrieves the list of instance groups and sorts them
 // by zone.
 func (r *InstanceGroupsService) AggregatedList(project string) *InstanceGroupsAggregatedListCall {
 	c := &InstanceGroupsAggregatedListCall{s: r.s, opt_: make(map[string]interface{})}
@@ -19687,7 +21000,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Retrieves the list of instance groups, and sorts them by zone.",
+	//   "description": "Retrieves the list of instance groups and sorts them by zone.",
 	//   "httpMethod": "GET",
 	//   "id": "compute.instanceGroups.aggregatedList",
 	//   "parameterOrder": [
@@ -19745,7 +21058,8 @@
 	ctx_          context.Context
 }
 
-// Delete: Deletes the specified instance group.
+// Delete: Deletes the specified instance group. The instances in the
+// group are not deleted.
 func (r *InstanceGroupsService) Delete(project string, zone string, instanceGroup string) *InstanceGroupsDeleteCall {
 	c := &InstanceGroupsDeleteCall{s: r.s, opt_: make(map[string]interface{})}
 	c.project = project
@@ -19828,7 +21142,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Deletes the specified instance group.",
+	//   "description": "Deletes the specified instance group. The instances in the group are not deleted.",
 	//   "httpMethod": "DELETE",
 	//   "id": "compute.instanceGroups.delete",
 	//   "parameterOrder": [
@@ -19851,7 +21165,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the instance group is located.",
+	//       "description": "The name of the zone where the instance group is located.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -19999,7 +21313,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the instance group is located.",
+	//       "description": "The name of the zone where the instance group is located.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -20134,7 +21448,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the instance group is located.",
+	//       "description": "The name of the zone where you want to create the instance group.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -20340,7 +21654,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the instance group is located.",
+	//       "description": "The name of the zone where the instance group is located.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -20371,9 +21685,7 @@
 	ctx_                               context.Context
 }
 
-// ListInstances: Lists instances in an instance group. The parameters
-// for this method specify whether the list filters instances by state
-// and named ports information.
+// ListInstances: Lists the instances in the specified instance group.
 func (r *InstanceGroupsService) ListInstances(project string, zone string, instanceGroup string, instancegroupslistinstancesrequest *InstanceGroupsListInstancesRequest) *InstanceGroupsListInstancesCall {
 	c := &InstanceGroupsListInstancesCall{s: r.s, opt_: make(map[string]interface{})}
 	c.project = project
@@ -20508,7 +21820,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Lists instances in an instance group. The parameters for this method specify whether the list filters instances by state and named ports information.",
+	//   "description": "Lists the instances in the specified instance group.",
 	//   "httpMethod": "POST",
 	//   "id": "compute.instanceGroups.listInstances",
 	//   "parameterOrder": [
@@ -20550,7 +21862,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the instance group is located.",
+	//       "description": "The name of the zone where the instance group is located.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -20584,7 +21896,8 @@
 	ctx_                                 context.Context
 }
 
-// RemoveInstances: Removes a list of instances from an instance group.
+// RemoveInstances: Removes one or more instances from the specified
+// instance group, but does not delete those instances.
 func (r *InstanceGroupsService) RemoveInstances(project string, zone string, instanceGroup string, instancegroupsremoveinstancesrequest *InstanceGroupsRemoveInstancesRequest) *InstanceGroupsRemoveInstancesCall {
 	c := &InstanceGroupsRemoveInstancesCall{s: r.s, opt_: make(map[string]interface{})}
 	c.project = project
@@ -20674,7 +21987,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Removes a list of instances from an instance group.",
+	//   "description": "Removes one or more instances from the specified instance group, but does not delete those instances.",
 	//   "httpMethod": "POST",
 	//   "id": "compute.instanceGroups.removeInstances",
 	//   "parameterOrder": [
@@ -20697,7 +22010,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the instance group is located.",
+	//       "description": "The name of the zone where the instance group is located.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -20730,7 +22043,7 @@
 	ctx_                               context.Context
 }
 
-// SetNamedPorts: Sets the named ports in an instance group.
+// SetNamedPorts: Sets the named ports for the specified instance group.
 func (r *InstanceGroupsService) SetNamedPorts(project string, zone string, instanceGroup string, instancegroupssetnamedportsrequest *InstanceGroupsSetNamedPortsRequest) *InstanceGroupsSetNamedPortsCall {
 	c := &InstanceGroupsSetNamedPortsCall{s: r.s, opt_: make(map[string]interface{})}
 	c.project = project
@@ -20820,7 +22133,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Sets the named ports in an instance group.",
+	//   "description": "Sets the named ports for the specified instance group.",
 	//   "httpMethod": "POST",
 	//   "id": "compute.instanceGroups.setNamedPorts",
 	//   "parameterOrder": [
@@ -20843,7 +22156,7 @@
 	//       "type": "string"
 	//     },
 	//     "zone": {
-	//       "description": "The URL of the zone where the instance group is located.",
+	//       "description": "The name of the zone where the instance group is located.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -21624,7 +22937,7 @@
 	ctx_    context.Context
 }
 
-// AggregatedList:
+// AggregatedList: Retrieves aggregated list of instance resources.
 // For details, see https://cloud.google.com/compute/docs/reference/latest/instances/aggregatedList
 func (r *InstancesService) AggregatedList(project string) *InstancesAggregatedListCall {
 	c := &InstancesAggregatedListCall{s: r.s, opt_: make(map[string]interface{})}
@@ -21762,6 +23075,7 @@
 	}
 	return ret, nil
 	// {
+	//   "description": "Retrieves aggregated list of instance resources.",
 	//   "httpMethod": "GET",
 	//   "id": "compute.instances.aggregatedList",
 	//   "parameterOrder": [
@@ -27898,6 +29212,593 @@
 
 }
 
+// method id "compute.sslCertificates.delete":
+
+type SslCertificatesDeleteCall struct {
+	s              *Service
+	project        string
+	sslCertificate string
+	opt_           map[string]interface{}
+	ctx_           context.Context
+}
+
+// Delete: Deletes the specified SslCertificate resource.
+func (r *SslCertificatesService) Delete(project string, sslCertificate string) *SslCertificatesDeleteCall {
+	c := &SslCertificatesDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.sslCertificate = sslCertificate
+	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 *SslCertificatesDeleteCall) Fields(s ...googleapi.Field) *SslCertificatesDeleteCall {
+	c.opt_["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 *SslCertificatesDeleteCall) Context(ctx context.Context) *SslCertificatesDeleteCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *SslCertificatesDeleteCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/sslCertificates/{sslCertificate}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"project":        c.project,
+		"sslCertificate": c.sslCertificate,
+	})
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "compute.sslCertificates.delete" call.
+// Exactly one of *Operation or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *Operation.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *SslCertificatesDeleteCall) Do() (*Operation, error) {
+	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,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Deletes the specified SslCertificate resource.",
+	//   "httpMethod": "DELETE",
+	//   "id": "compute.sslCertificates.delete",
+	//   "parameterOrder": [
+	//     "project",
+	//     "sslCertificate"
+	//   ],
+	//   "parameters": {
+	//     "project": {
+	//       "description": "Name of the project scoping this request.",
+	//       "location": "path",
+	//       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "sslCertificate": {
+	//       "description": "Name of the SslCertificate resource to delete.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/global/sslCertificates/{sslCertificate}",
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.sslCertificates.get":
+
+type SslCertificatesGetCall struct {
+	s              *Service
+	project        string
+	sslCertificate string
+	opt_           map[string]interface{}
+	ctx_           context.Context
+}
+
+// Get: Returns the specified SslCertificate resource.
+func (r *SslCertificatesService) Get(project string, sslCertificate string) *SslCertificatesGetCall {
+	c := &SslCertificatesGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.sslCertificate = sslCertificate
+	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 *SslCertificatesGetCall) Fields(s ...googleapi.Field) *SslCertificatesGetCall {
+	c.opt_["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 *SslCertificatesGetCall) IfNoneMatch(entityTag string) *SslCertificatesGetCall {
+	c.opt_["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 *SslCertificatesGetCall) Context(ctx context.Context) *SslCertificatesGetCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *SslCertificatesGetCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/sslCertificates/{sslCertificate}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"project":        c.project,
+		"sslCertificate": c.sslCertificate,
+	})
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if v, ok := c.opt_["ifNoneMatch"]; ok {
+		req.Header.Set("If-None-Match", fmt.Sprintf("%v", v))
+	}
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "compute.sslCertificates.get" call.
+// Exactly one of *SslCertificate or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *SslCertificate.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 *SslCertificatesGetCall) Do() (*SslCertificate, error) {
+	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 := &SslCertificate{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Returns the specified SslCertificate resource.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.sslCertificates.get",
+	//   "parameterOrder": [
+	//     "project",
+	//     "sslCertificate"
+	//   ],
+	//   "parameters": {
+	//     "project": {
+	//       "description": "Name of the project scoping this request.",
+	//       "location": "path",
+	//       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "sslCertificate": {
+	//       "description": "Name of the SslCertificate resource to return.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/global/sslCertificates/{sslCertificate}",
+	//   "response": {
+	//     "$ref": "SslCertificate"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.sslCertificates.insert":
+
+type SslCertificatesInsertCall struct {
+	s              *Service
+	project        string
+	sslcertificate *SslCertificate
+	opt_           map[string]interface{}
+	ctx_           context.Context
+}
+
+// Insert: Creates a SslCertificate resource in the specified project
+// using the data included in the request.
+func (r *SslCertificatesService) Insert(project string, sslcertificate *SslCertificate) *SslCertificatesInsertCall {
+	c := &SslCertificatesInsertCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.sslcertificate = sslcertificate
+	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 *SslCertificatesInsertCall) Fields(s ...googleapi.Field) *SslCertificatesInsertCall {
+	c.opt_["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 *SslCertificatesInsertCall) Context(ctx context.Context) *SslCertificatesInsertCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *SslCertificatesInsertCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.sslcertificate)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/sslCertificates")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"project": c.project,
+	})
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "compute.sslCertificates.insert" 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 *SslCertificatesInsertCall) Do() (*Operation, error) {
+	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,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Creates a SslCertificate resource in the specified project using the data included in the request.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.sslCertificates.insert",
+	//   "parameterOrder": [
+	//     "project"
+	//   ],
+	//   "parameters": {
+	//     "project": {
+	//       "description": "Name of the project scoping this request.",
+	//       "location": "path",
+	//       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/global/sslCertificates",
+	//   "request": {
+	//     "$ref": "SslCertificate"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.sslCertificates.list":
+
+type SslCertificatesListCall struct {
+	s       *Service
+	project string
+	opt_    map[string]interface{}
+	ctx_    context.Context
+}
+
+// List: Retrieves the list of SslCertificate resources available to the
+// specified project.
+func (r *SslCertificatesService) List(project string) *SslCertificatesListCall {
+	c := &SslCertificatesListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	return c
+}
+
+// Filter sets the optional parameter "filter": Sets a filter expression
+// for filtering listed resources, in the form filter={expression}. Your
+// {expression} must be in the format: FIELD_NAME COMPARISON_STRING
+// LITERAL_STRING.
+//
+// The FIELD_NAME is the name of the field you want to compare. Only
+// atomic field types are supported (string, number, boolean). The
+// COMPARISON_STRING must be either eq (equals) or ne (not equals). The
+// LITERAL_STRING is the string value to filter to. The literal value
+// must be valid for the type of field (string, number, boolean). For
+// string fields, the literal value is interpreted as a regular
+// expression using RE2 syntax. The literal value must match the entire
+// field.
+//
+// For example, filter=name ne example-instance.
+func (c *SslCertificatesListCall) Filter(filter string) *SslCertificatesListCall {
+	c.opt_["filter"] = filter
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": Maximum count of
+// results to be returned.
+func (c *SslCertificatesListCall) MaxResults(maxResults int64) *SslCertificatesListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Specifies a page
+// token to use. Use this parameter if you want to list the next page of
+// results. Set pageToken to the nextPageToken returned by a previous
+// list request.
+func (c *SslCertificatesListCall) PageToken(pageToken string) *SslCertificatesListCall {
+	c.opt_["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 *SslCertificatesListCall) Fields(s ...googleapi.Field) *SslCertificatesListCall {
+	c.opt_["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 *SslCertificatesListCall) IfNoneMatch(entityTag string) *SslCertificatesListCall {
+	c.opt_["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 *SslCertificatesListCall) Context(ctx context.Context) *SslCertificatesListCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *SslCertificatesListCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["filter"]; ok {
+		params.Set("filter", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["maxResults"]; ok {
+		params.Set("maxResults", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["pageToken"]; ok {
+		params.Set("pageToken", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/sslCertificates")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"project": c.project,
+	})
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if v, ok := c.opt_["ifNoneMatch"]; ok {
+		req.Header.Set("If-None-Match", fmt.Sprintf("%v", v))
+	}
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "compute.sslCertificates.list" call.
+// Exactly one of *SslCertificateList or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *SslCertificateList.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 *SslCertificatesListCall) Do() (*SslCertificateList, error) {
+	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 := &SslCertificateList{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves the list of SslCertificate resources available to the specified project.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.sslCertificates.list",
+	//   "parameterOrder": [
+	//     "project"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "Sets a filter expression for filtering listed resources, in the form filter={expression}. Your {expression} must be in the format: FIELD_NAME COMPARISON_STRING LITERAL_STRING.\n\nThe FIELD_NAME is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The COMPARISON_STRING must be either eq (equals) or ne (not equals). The LITERAL_STRING is the string value to filter to. The literal value must be valid for the type of field (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.\n\nFor example, filter=name ne example-instance.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "default": "500",
+	//       "description": "Maximum count of results to be returned.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "maximum": "500",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Specifies a page token to use. Use this parameter if you want to list the next page of results. Set pageToken to the nextPageToken returned by a previous list request.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "project": {
+	//       "description": "Name of the project scoping this request.",
+	//       "location": "path",
+	//       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/global/sslCertificates",
+	//   "response": {
+	//     "$ref": "SslCertificateList"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
 // method id "compute.targetHttpProxies.delete":
 
 type TargetHttpProxiesDeleteCall struct {
@@ -28627,6 +30528,867 @@
 
 }
 
+// method id "compute.targetHttpsProxies.delete":
+
+type TargetHttpsProxiesDeleteCall struct {
+	s                *Service
+	project          string
+	targetHttpsProxy string
+	opt_             map[string]interface{}
+	ctx_             context.Context
+}
+
+// Delete: Deletes the specified TargetHttpsProxy resource.
+func (r *TargetHttpsProxiesService) Delete(project string, targetHttpsProxy string) *TargetHttpsProxiesDeleteCall {
+	c := &TargetHttpsProxiesDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.targetHttpsProxy = targetHttpsProxy
+	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 *TargetHttpsProxiesDeleteCall) Fields(s ...googleapi.Field) *TargetHttpsProxiesDeleteCall {
+	c.opt_["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 *TargetHttpsProxiesDeleteCall) Context(ctx context.Context) *TargetHttpsProxiesDeleteCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *TargetHttpsProxiesDeleteCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/targetHttpsProxies/{targetHttpsProxy}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"project":          c.project,
+		"targetHttpsProxy": c.targetHttpsProxy,
+	})
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "compute.targetHttpsProxies.delete" call.
+// Exactly one of *Operation or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *Operation.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *TargetHttpsProxiesDeleteCall) Do() (*Operation, error) {
+	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,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Deletes the specified TargetHttpsProxy resource.",
+	//   "httpMethod": "DELETE",
+	//   "id": "compute.targetHttpsProxies.delete",
+	//   "parameterOrder": [
+	//     "project",
+	//     "targetHttpsProxy"
+	//   ],
+	//   "parameters": {
+	//     "project": {
+	//       "description": "Name of the project scoping this request.",
+	//       "location": "path",
+	//       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "targetHttpsProxy": {
+	//       "description": "Name of the TargetHttpsProxy resource to delete.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/global/targetHttpsProxies/{targetHttpsProxy}",
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.targetHttpsProxies.get":
+
+type TargetHttpsProxiesGetCall struct {
+	s                *Service
+	project          string
+	targetHttpsProxy string
+	opt_             map[string]interface{}
+	ctx_             context.Context
+}
+
+// Get: Returns the specified TargetHttpsProxy resource.
+func (r *TargetHttpsProxiesService) Get(project string, targetHttpsProxy string) *TargetHttpsProxiesGetCall {
+	c := &TargetHttpsProxiesGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.targetHttpsProxy = targetHttpsProxy
+	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 *TargetHttpsProxiesGetCall) Fields(s ...googleapi.Field) *TargetHttpsProxiesGetCall {
+	c.opt_["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 *TargetHttpsProxiesGetCall) IfNoneMatch(entityTag string) *TargetHttpsProxiesGetCall {
+	c.opt_["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 *TargetHttpsProxiesGetCall) Context(ctx context.Context) *TargetHttpsProxiesGetCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *TargetHttpsProxiesGetCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/targetHttpsProxies/{targetHttpsProxy}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"project":          c.project,
+		"targetHttpsProxy": c.targetHttpsProxy,
+	})
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if v, ok := c.opt_["ifNoneMatch"]; ok {
+		req.Header.Set("If-None-Match", fmt.Sprintf("%v", v))
+	}
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "compute.targetHttpsProxies.get" call.
+// Exactly one of *TargetHttpsProxy or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *TargetHttpsProxy.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 *TargetHttpsProxiesGetCall) Do() (*TargetHttpsProxy, error) {
+	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 := &TargetHttpsProxy{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Returns the specified TargetHttpsProxy resource.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.targetHttpsProxies.get",
+	//   "parameterOrder": [
+	//     "project",
+	//     "targetHttpsProxy"
+	//   ],
+	//   "parameters": {
+	//     "project": {
+	//       "description": "Name of the project scoping this request.",
+	//       "location": "path",
+	//       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "targetHttpsProxy": {
+	//       "description": "Name of the TargetHttpsProxy resource to return.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/global/targetHttpsProxies/{targetHttpsProxy}",
+	//   "response": {
+	//     "$ref": "TargetHttpsProxy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.targetHttpsProxies.insert":
+
+type TargetHttpsProxiesInsertCall struct {
+	s                *Service
+	project          string
+	targethttpsproxy *TargetHttpsProxy
+	opt_             map[string]interface{}
+	ctx_             context.Context
+}
+
+// Insert: Creates a TargetHttpsProxy resource in the specified project
+// using the data included in the request.
+func (r *TargetHttpsProxiesService) Insert(project string, targethttpsproxy *TargetHttpsProxy) *TargetHttpsProxiesInsertCall {
+	c := &TargetHttpsProxiesInsertCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.targethttpsproxy = targethttpsproxy
+	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 *TargetHttpsProxiesInsertCall) Fields(s ...googleapi.Field) *TargetHttpsProxiesInsertCall {
+	c.opt_["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 *TargetHttpsProxiesInsertCall) Context(ctx context.Context) *TargetHttpsProxiesInsertCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *TargetHttpsProxiesInsertCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targethttpsproxy)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/targetHttpsProxies")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"project": c.project,
+	})
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "compute.targetHttpsProxies.insert" 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 *TargetHttpsProxiesInsertCall) Do() (*Operation, error) {
+	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,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Creates a TargetHttpsProxy resource in the specified project using the data included in the request.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.targetHttpsProxies.insert",
+	//   "parameterOrder": [
+	//     "project"
+	//   ],
+	//   "parameters": {
+	//     "project": {
+	//       "description": "Name of the project scoping this request.",
+	//       "location": "path",
+	//       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/global/targetHttpsProxies",
+	//   "request": {
+	//     "$ref": "TargetHttpsProxy"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.targetHttpsProxies.list":
+
+type TargetHttpsProxiesListCall struct {
+	s       *Service
+	project string
+	opt_    map[string]interface{}
+	ctx_    context.Context
+}
+
+// List: Retrieves the list of TargetHttpsProxy resources available to
+// the specified project.
+func (r *TargetHttpsProxiesService) List(project string) *TargetHttpsProxiesListCall {
+	c := &TargetHttpsProxiesListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	return c
+}
+
+// Filter sets the optional parameter "filter": Sets a filter expression
+// for filtering listed resources, in the form filter={expression}. Your
+// {expression} must be in the format: FIELD_NAME COMPARISON_STRING
+// LITERAL_STRING.
+//
+// The FIELD_NAME is the name of the field you want to compare. Only
+// atomic field types are supported (string, number, boolean). The
+// COMPARISON_STRING must be either eq (equals) or ne (not equals). The
+// LITERAL_STRING is the string value to filter to. The literal value
+// must be valid for the type of field (string, number, boolean). For
+// string fields, the literal value is interpreted as a regular
+// expression using RE2 syntax. The literal value must match the entire
+// field.
+//
+// For example, filter=name ne example-instance.
+func (c *TargetHttpsProxiesListCall) Filter(filter string) *TargetHttpsProxiesListCall {
+	c.opt_["filter"] = filter
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": Maximum count of
+// results to be returned.
+func (c *TargetHttpsProxiesListCall) MaxResults(maxResults int64) *TargetHttpsProxiesListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Specifies a page
+// token to use. Use this parameter if you want to list the next page of
+// results. Set pageToken to the nextPageToken returned by a previous
+// list request.
+func (c *TargetHttpsProxiesListCall) PageToken(pageToken string) *TargetHttpsProxiesListCall {
+	c.opt_["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 *TargetHttpsProxiesListCall) Fields(s ...googleapi.Field) *TargetHttpsProxiesListCall {
+	c.opt_["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 *TargetHttpsProxiesListCall) IfNoneMatch(entityTag string) *TargetHttpsProxiesListCall {
+	c.opt_["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 *TargetHttpsProxiesListCall) Context(ctx context.Context) *TargetHttpsProxiesListCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *TargetHttpsProxiesListCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["filter"]; ok {
+		params.Set("filter", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["maxResults"]; ok {
+		params.Set("maxResults", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["pageToken"]; ok {
+		params.Set("pageToken", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/targetHttpsProxies")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"project": c.project,
+	})
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if v, ok := c.opt_["ifNoneMatch"]; ok {
+		req.Header.Set("If-None-Match", fmt.Sprintf("%v", v))
+	}
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "compute.targetHttpsProxies.list" call.
+// Exactly one of *TargetHttpsProxyList or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *TargetHttpsProxyList.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 *TargetHttpsProxiesListCall) Do() (*TargetHttpsProxyList, error) {
+	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 := &TargetHttpsProxyList{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves the list of TargetHttpsProxy resources available to the specified project.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.targetHttpsProxies.list",
+	//   "parameterOrder": [
+	//     "project"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "Sets a filter expression for filtering listed resources, in the form filter={expression}. Your {expression} must be in the format: FIELD_NAME COMPARISON_STRING LITERAL_STRING.\n\nThe FIELD_NAME is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The COMPARISON_STRING must be either eq (equals) or ne (not equals). The LITERAL_STRING is the string value to filter to. The literal value must be valid for the type of field (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.\n\nFor example, filter=name ne example-instance.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "default": "500",
+	//       "description": "Maximum count of results to be returned.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "maximum": "500",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Specifies a page token to use. Use this parameter if you want to list the next page of results. Set pageToken to the nextPageToken returned by a previous list request.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "project": {
+	//       "description": "Name of the project scoping this request.",
+	//       "location": "path",
+	//       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/global/targetHttpsProxies",
+	//   "response": {
+	//     "$ref": "TargetHttpsProxyList"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.targetHttpsProxies.setSslCertificates":
+
+type TargetHttpsProxiesSetSslCertificatesCall struct {
+	s                                           *Service
+	project                                     string
+	targetHttpsProxy                            string
+	targethttpsproxiessetsslcertificatesrequest *TargetHttpsProxiesSetSslCertificatesRequest
+	opt_                                        map[string]interface{}
+	ctx_                                        context.Context
+}
+
+// SetSslCertificates: Replaces SslCertificates for TargetHttpsProxy.
+func (r *TargetHttpsProxiesService) SetSslCertificates(project string, targetHttpsProxy string, targethttpsproxiessetsslcertificatesrequest *TargetHttpsProxiesSetSslCertificatesRequest) *TargetHttpsProxiesSetSslCertificatesCall {
+	c := &TargetHttpsProxiesSetSslCertificatesCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.targetHttpsProxy = targetHttpsProxy
+	c.targethttpsproxiessetsslcertificatesrequest = targethttpsproxiessetsslcertificatesrequest
+	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 *TargetHttpsProxiesSetSslCertificatesCall) Fields(s ...googleapi.Field) *TargetHttpsProxiesSetSslCertificatesCall {
+	c.opt_["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 *TargetHttpsProxiesSetSslCertificatesCall) Context(ctx context.Context) *TargetHttpsProxiesSetSslCertificatesCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *TargetHttpsProxiesSetSslCertificatesCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targethttpsproxiessetsslcertificatesrequest)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/targetHttpsProxies/{targetHttpsProxy}/setSslCertificates")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"project":          c.project,
+		"targetHttpsProxy": c.targetHttpsProxy,
+	})
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "compute.targetHttpsProxies.setSslCertificates" 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 *TargetHttpsProxiesSetSslCertificatesCall) Do() (*Operation, error) {
+	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,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Replaces SslCertificates for TargetHttpsProxy.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.targetHttpsProxies.setSslCertificates",
+	//   "parameterOrder": [
+	//     "project",
+	//     "targetHttpsProxy"
+	//   ],
+	//   "parameters": {
+	//     "project": {
+	//       "description": "Name of the project scoping this request.",
+	//       "location": "path",
+	//       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "targetHttpsProxy": {
+	//       "description": "Name of the TargetHttpsProxy resource whose URL map is to be set.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/targetHttpsProxies/{targetHttpsProxy}/setSslCertificates",
+	//   "request": {
+	//     "$ref": "TargetHttpsProxiesSetSslCertificatesRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.targetHttpsProxies.setUrlMap":
+
+type TargetHttpsProxiesSetUrlMapCall struct {
+	s                *Service
+	project          string
+	targetHttpsProxy string
+	urlmapreference  *UrlMapReference
+	opt_             map[string]interface{}
+	ctx_             context.Context
+}
+
+// SetUrlMap: Changes the URL map for TargetHttpsProxy.
+func (r *TargetHttpsProxiesService) SetUrlMap(project string, targetHttpsProxy string, urlmapreference *UrlMapReference) *TargetHttpsProxiesSetUrlMapCall {
+	c := &TargetHttpsProxiesSetUrlMapCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.targetHttpsProxy = targetHttpsProxy
+	c.urlmapreference = urlmapreference
+	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 *TargetHttpsProxiesSetUrlMapCall) Fields(s ...googleapi.Field) *TargetHttpsProxiesSetUrlMapCall {
+	c.opt_["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 *TargetHttpsProxiesSetUrlMapCall) Context(ctx context.Context) *TargetHttpsProxiesSetUrlMapCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *TargetHttpsProxiesSetUrlMapCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.urlmapreference)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/targetHttpsProxies/{targetHttpsProxy}/setUrlMap")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"project":          c.project,
+		"targetHttpsProxy": c.targetHttpsProxy,
+	})
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "compute.targetHttpsProxies.setUrlMap" 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 *TargetHttpsProxiesSetUrlMapCall) Do() (*Operation, error) {
+	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,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Changes the URL map for TargetHttpsProxy.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.targetHttpsProxies.setUrlMap",
+	//   "parameterOrder": [
+	//     "project",
+	//     "targetHttpsProxy"
+	//   ],
+	//   "parameters": {
+	//     "project": {
+	//       "description": "Name of the project scoping this request.",
+	//       "location": "path",
+	//       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "targetHttpsProxy": {
+	//       "description": "Name of the TargetHttpsProxy resource whose URL map is to be set.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/targetHttpsProxies/{targetHttpsProxy}/setUrlMap",
+	//   "request": {
+	//     "$ref": "UrlMapReference"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
 // method id "compute.targetInstances.aggregatedList":
 
 type TargetInstancesAggregatedListCall struct {
diff --git a/container/v1/container-gen.go b/container/v1/container-gen.go
index 71d2749..bb98f63 100644
--- a/container/v1/container-gen.go
+++ b/container/v1/container-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "container:v1"
 const apiName = "container"
diff --git a/content/v2/content-gen.go b/content/v2/content-gen.go
index 0d4c436..3fba810 100644
--- a/content/v2/content-gen.go
+++ b/content/v2/content-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "content:v2"
 const apiName = "content"
diff --git a/content/v2sandbox/content-gen.go b/content/v2sandbox/content-gen.go
index b40c200..82fda32 100644
--- a/content/v2sandbox/content-gen.go
+++ b/content/v2sandbox/content-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "content:v2sandbox"
 const apiName = "content"
diff --git a/coordinate/v1/coordinate-gen.go b/coordinate/v1/coordinate-gen.go
index 2c84b86..f86c833 100644
--- a/coordinate/v1/coordinate-gen.go
+++ b/coordinate/v1/coordinate-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "coordinate:v1"
 const apiName = "coordinate"
diff --git a/customsearch/v1/customsearch-gen.go b/customsearch/v1/customsearch-gen.go
index f57ac7f..be52fda 100644
--- a/customsearch/v1/customsearch-gen.go
+++ b/customsearch/v1/customsearch-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "customsearch:v1"
 const apiName = "customsearch"
diff --git a/dataflow/v1b3/dataflow-gen.go b/dataflow/v1b3/dataflow-gen.go
index 566a205..8743d19 100644
--- a/dataflow/v1b3/dataflow-gen.go
+++ b/dataflow/v1b3/dataflow-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "dataflow:v1b3"
 const apiName = "dataflow"
diff --git a/datastore/v1beta1/datastore-gen.go b/datastore/v1beta1/datastore-gen.go
index cbcb2e1..38956b6 100644
--- a/datastore/v1beta1/datastore-gen.go
+++ b/datastore/v1beta1/datastore-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "datastore:v1beta1"
 const apiName = "datastore"
diff --git a/datastore/v1beta2/datastore-gen.go b/datastore/v1beta2/datastore-gen.go
index 9c482c2..af4ce19 100644
--- a/datastore/v1beta2/datastore-gen.go
+++ b/datastore/v1beta2/datastore-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "datastore:v1beta2"
 const apiName = "datastore"
diff --git a/deploymentmanager/v2/deploymentmanager-gen.go b/deploymentmanager/v2/deploymentmanager-gen.go
index ce89fc3..5e90558 100644
--- a/deploymentmanager/v2/deploymentmanager-gen.go
+++ b/deploymentmanager/v2/deploymentmanager-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "deploymentmanager:v2"
 const apiName = "deploymentmanager"
diff --git a/deploymentmanager/v2beta1/deploymentmanager-gen.go b/deploymentmanager/v2beta1/deploymentmanager-gen.go
index 67fa602..6437a7c 100644
--- a/deploymentmanager/v2beta1/deploymentmanager-gen.go
+++ b/deploymentmanager/v2beta1/deploymentmanager-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "deploymentmanager:v2beta1"
 const apiName = "deploymentmanager"
diff --git a/deploymentmanager/v2beta2/deploymentmanager-gen.go b/deploymentmanager/v2beta2/deploymentmanager-gen.go
index dd5f186..5f50fcf 100644
--- a/deploymentmanager/v2beta2/deploymentmanager-gen.go
+++ b/deploymentmanager/v2beta2/deploymentmanager-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "deploymentmanager:v2beta2"
 const apiName = "deploymentmanager"
diff --git a/dfareporting/v1.1/dfareporting-gen.go b/dfareporting/v1.1/dfareporting-gen.go
index 0239c1a..11a7d5c 100644
--- a/dfareporting/v1.1/dfareporting-gen.go
+++ b/dfareporting/v1.1/dfareporting-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "dfareporting:v1.1"
 const apiName = "dfareporting"
diff --git a/dfareporting/v1.2/dfareporting-gen.go b/dfareporting/v1.2/dfareporting-gen.go
index 51eeffc..a73ad0d 100644
--- a/dfareporting/v1.2/dfareporting-gen.go
+++ b/dfareporting/v1.2/dfareporting-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "dfareporting:v1.2"
 const apiName = "dfareporting"
diff --git a/dfareporting/v1.3/dfareporting-gen.go b/dfareporting/v1.3/dfareporting-gen.go
index 3bfbb58..3910be9 100644
--- a/dfareporting/v1.3/dfareporting-gen.go
+++ b/dfareporting/v1.3/dfareporting-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "dfareporting:v1.3"
 const apiName = "dfareporting"
diff --git a/dfareporting/v1/dfareporting-gen.go b/dfareporting/v1/dfareporting-gen.go
index c5f4afb..54884a6 100644
--- a/dfareporting/v1/dfareporting-gen.go
+++ b/dfareporting/v1/dfareporting-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "dfareporting:v1"
 const apiName = "dfareporting"
diff --git a/dfareporting/v2.0/dfareporting-gen.go b/dfareporting/v2.0/dfareporting-gen.go
index e4d9104..f1bdda5 100644
--- a/dfareporting/v2.0/dfareporting-gen.go
+++ b/dfareporting/v2.0/dfareporting-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "dfareporting:v2.0"
 const apiName = "dfareporting"
diff --git a/dfareporting/v2.1/dfareporting-gen.go b/dfareporting/v2.1/dfareporting-gen.go
index ff7279f..1325ee1 100644
--- a/dfareporting/v2.1/dfareporting-gen.go
+++ b/dfareporting/v2.1/dfareporting-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "dfareporting:v2.1"
 const apiName = "dfareporting"
diff --git a/dfareporting/v2.2/dfareporting-gen.go b/dfareporting/v2.2/dfareporting-gen.go
index 5344d7f..314b0a7 100644
--- a/dfareporting/v2.2/dfareporting-gen.go
+++ b/dfareporting/v2.2/dfareporting-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "dfareporting:v2.2"
 const apiName = "dfareporting"
diff --git a/discovery/v1/discovery-gen.go b/discovery/v1/discovery-gen.go
index 21f153a..32a0a06 100644
--- a/discovery/v1/discovery-gen.go
+++ b/discovery/v1/discovery-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "discovery:v1"
 const apiName = "discovery"
diff --git a/dns/v1/dns-gen.go b/dns/v1/dns-gen.go
index cbfc4e5..bc91099 100644
--- a/dns/v1/dns-gen.go
+++ b/dns/v1/dns-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "dns:v1"
 const apiName = "dns"
diff --git a/dns/v1beta1/dns-gen.go b/dns/v1beta1/dns-gen.go
index ca41c03..dd4915b 100644
--- a/dns/v1beta1/dns-gen.go
+++ b/dns/v1beta1/dns-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "dns:v1beta1"
 const apiName = "dns"
diff --git a/doubleclickbidmanager/v1/doubleclickbidmanager-api.json b/doubleclickbidmanager/v1/doubleclickbidmanager-api.json
index a15597e..ed98ffb 100644
--- a/doubleclickbidmanager/v1/doubleclickbidmanager-api.json
+++ b/doubleclickbidmanager/v1/doubleclickbidmanager-api.json
@@ -1,12 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/NbuQQoeeWObMBMsRr-eLonWmHd8\"",
+ "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/mAPHdimW0pvTGXzTTcUsJfk40xQ\"",
  "discoveryVersion": "v1",
  "id": "doubleclickbidmanager:v1",
  "name": "doubleclickbidmanager",
  "canonicalName": "DoubleClick Bid Manager",
  "version": "v1",
- "revision": "20150326",
+ "revision": "20150925",
  "title": "DoubleClick Bid Manager API",
  "description": "API for viewing and managing your reports in DoubleClick Bid Manager.",
  "ownerDomain": "google.com",
@@ -76,6 +76,18 @@
    "type": "object",
    "description": "Request to fetch stored line items.",
    "properties": {
+    "fileSpec": {
+     "type": "string",
+     "description": "File specification (column names, types, order) in which the line items will be returned. Default to EWF.",
+     "enum": [
+      "EWF",
+      "SDF"
+     ],
+     "enumDescriptions": [
+      "",
+      ""
+     ]
+    },
     "filterIds": {
      "type": "array",
      "description": "Ids of the specified filter type used to filter line items to fetch. If omitted, all the line items will be returned.",
@@ -117,7 +129,7 @@
    "properties": {
     "lineItems": {
      "type": "string",
-     "description": "Retrieved line items in CSV format. Refer to  Entity Write File Format for more information on file format."
+     "description": "Retrieved line items in CSV format. Refer to  Entity Write File Format or  Structured Data File Format for more information on file formats."
     }
    }
   },
@@ -145,9 +157,11 @@
       "FILTER_CITY",
       "FILTER_CONVERSION_DELAY",
       "FILTER_COUNTRY",
+      "FILTER_CREATIVE_HEIGHT",
       "FILTER_CREATIVE_ID",
       "FILTER_CREATIVE_SIZE",
       "FILTER_CREATIVE_TYPE",
+      "FILTER_CREATIVE_WIDTH",
       "FILTER_DATA_PROVIDER",
       "FILTER_DATE",
       "FILTER_DAY_OF_WEEK",
@@ -289,6 +303,8 @@
       "",
       "",
       "",
+      "",
+      "",
       ""
      ]
     },
@@ -369,9 +385,11 @@
        "FILTER_CITY",
        "FILTER_CONVERSION_DELAY",
        "FILTER_COUNTRY",
+       "FILTER_CREATIVE_HEIGHT",
        "FILTER_CREATIVE_ID",
        "FILTER_CREATIVE_SIZE",
        "FILTER_CREATIVE_TYPE",
+       "FILTER_CREATIVE_WIDTH",
        "FILTER_DATA_PROVIDER",
        "FILTER_DATE",
        "FILTER_DAY_OF_WEEK",
@@ -513,6 +531,8 @@
        "",
        "",
        "",
+       "",
+       "",
        ""
       ]
      }
@@ -594,6 +614,12 @@
        "METRIC_FEE20_ADVERTISER",
        "METRIC_FEE20_PARTNER",
        "METRIC_FEE20_USD",
+       "METRIC_FEE21_ADVERTISER",
+       "METRIC_FEE21_PARTNER",
+       "METRIC_FEE21_USD",
+       "METRIC_FEE22_ADVERTISER",
+       "METRIC_FEE22_PARTNER",
+       "METRIC_FEE22_USD",
        "METRIC_FEE2_ADVERTISER",
        "METRIC_FEE2_PARTNER",
        "METRIC_FEE2_USD",
@@ -643,6 +669,9 @@
        "METRIC_MEDIA_COST_ECPM_USD",
        "METRIC_MEDIA_COST_PARTNER",
        "METRIC_MEDIA_COST_USD",
+       "METRIC_MEDIA_COST_VIEWABLE_ECPM_ADVERTISER",
+       "METRIC_MEDIA_COST_VIEWABLE_ECPM_PARTNER",
+       "METRIC_MEDIA_COST_VIEWABLE_ECPM_USD",
        "METRIC_MEDIA_FEE1_ADVERTISER",
        "METRIC_MEDIA_FEE1_PARTNER",
        "METRIC_MEDIA_FEE1_USD",
@@ -683,6 +712,9 @@
        "METRIC_PROFIT_MARGIN",
        "METRIC_PROFIT_PARTNER",
        "METRIC_PROFIT_USD",
+       "METRIC_PROFIT_VIEWABLE_ECPM_ADVERTISER",
+       "METRIC_PROFIT_VIEWABLE_ECPM_PARTNER",
+       "METRIC_PROFIT_VIEWABLE_ECPM_USD",
        "METRIC_REVENUE_ADVERTISER",
        "METRIC_REVENUE_ECPAPC_ADVERTISER",
        "METRIC_REVENUE_ECPAPC_PARTNER",
@@ -704,6 +736,9 @@
        "METRIC_REVENUE_ECPM_USD",
        "METRIC_REVENUE_PARTNER",
        "METRIC_REVENUE_USD",
+       "METRIC_REVENUE_VIEWABLE_ECPM_ADVERTISER",
+       "METRIC_REVENUE_VIEWABLE_ECPM_PARTNER",
+       "METRIC_REVENUE_VIEWABLE_ECPM_USD",
        "METRIC_RICH_MEDIA_VIDEO_COMPLETIONS",
        "METRIC_RICH_MEDIA_VIDEO_FIRST_QUARTILE_COMPLETES",
        "METRIC_RICH_MEDIA_VIDEO_FULL_SCREENS",
@@ -738,9 +773,24 @@
        "METRIC_TOTAL_MEDIA_COST_ECPM_USD",
        "METRIC_TOTAL_MEDIA_COST_PARTNER",
        "METRIC_TOTAL_MEDIA_COST_USD",
+       "METRIC_TOTAL_MEDIA_COST_VIEWABLE_ECPM_ADVERTISER",
+       "METRIC_TOTAL_MEDIA_COST_VIEWABLE_ECPM_PARTNER",
+       "METRIC_TOTAL_MEDIA_COST_VIEWABLE_ECPM_USD",
+       "METRIC_TRUEVIEW_CONVERSION_COST_MANY_PER_VIEW_ADVERTISER",
+       "METRIC_TRUEVIEW_CONVERSION_COST_MANY_PER_VIEW_PARTNER",
+       "METRIC_TRUEVIEW_CONVERSION_COST_MANY_PER_VIEW_USD",
+       "METRIC_TRUEVIEW_CONVERSION_COST_ONE_PER_VIEW_ADVERTISER",
+       "METRIC_TRUEVIEW_CONVERSION_COST_ONE_PER_VIEW_PARTNER",
+       "METRIC_TRUEVIEW_CONVERSION_COST_ONE_PER_VIEW_USD",
        "METRIC_TRUEVIEW_CONVERSION_MANY_PER_VIEW",
        "METRIC_TRUEVIEW_CONVERSION_ONE_PER_VIEW",
        "METRIC_TRUEVIEW_CONVERSION_RATE_ONE_PER_VIEW",
+       "METRIC_TRUEVIEW_CONVERSION_VALUE_MANY_PER_VIEW_ADVERTISER",
+       "METRIC_TRUEVIEW_CONVERSION_VALUE_MANY_PER_VIEW_PARTNER",
+       "METRIC_TRUEVIEW_CONVERSION_VALUE_MANY_PER_VIEW_USD",
+       "METRIC_TRUEVIEW_CONVERSION_VALUE_ONE_PER_VIEW_ADVERTISER",
+       "METRIC_TRUEVIEW_CONVERSION_VALUE_ONE_PER_VIEW_PARTNER",
+       "METRIC_TRUEVIEW_CONVERSION_VALUE_ONE_PER_VIEW_USD",
        "METRIC_TRUEVIEW_COST_CONVERSION_MANY_PER_VIEW_RATIO",
        "METRIC_TRUEVIEW_COST_CONVERSION_ONE_PER_VIEW_RATIO",
        "METRIC_TRUEVIEW_CPV_ADVERTISER",
@@ -755,6 +805,9 @@
        "METRIC_TRUEVIEW_LOST_IS_BUDGET",
        "METRIC_TRUEVIEW_LOST_IS_RANK",
        "METRIC_TRUEVIEW_TOTAL_CONVERSION_VALUE",
+       "METRIC_TRUEVIEW_TOTAL_CONVERSION_VALUES_ADVERTISER",
+       "METRIC_TRUEVIEW_TOTAL_CONVERSION_VALUES_PARTNER",
+       "METRIC_TRUEVIEW_TOTAL_CONVERSION_VALUES_USD",
        "METRIC_TRUEVIEW_UNIQUE_VIEWERS",
        "METRIC_TRUEVIEW_VALUE_CONVERSION_MANY_PER_VIEW_RATIO",
        "METRIC_TRUEVIEW_VALUE_CONVERSION_ONE_PER_VIEW_RATIO",
@@ -1006,6 +1059,39 @@
        "",
        "",
        "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
+       "",
        ""
       ]
      }
@@ -1029,6 +1115,7 @@
       "TYPE_KEYWORD",
       "TYPE_NIELSEN_AUDIENCE_PROFILE",
       "TYPE_NIELSEN_DAILY_REACH_BUILD",
+      "TYPE_NIELSEN_ONLINE_GLOBAL_MARKET",
       "TYPE_NIELSEN_SITE",
       "TYPE_ORDER_ID",
       "TYPE_PAGE_CATEGORY",
@@ -1065,6 +1152,7 @@
       "",
       "",
       "",
+      "",
       ""
      ]
     }
diff --git a/doubleclickbidmanager/v1/doubleclickbidmanager-gen.go b/doubleclickbidmanager/v1/doubleclickbidmanager-gen.go
index 900b432..9419d09 100644
--- a/doubleclickbidmanager/v1/doubleclickbidmanager-gen.go
+++ b/doubleclickbidmanager/v1/doubleclickbidmanager-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "doubleclickbidmanager:v1"
 const apiName = "doubleclickbidmanager"
@@ -102,6 +104,14 @@
 
 // DownloadLineItemsRequest: Request to fetch stored line items.
 type DownloadLineItemsRequest struct {
+	// FileSpec: File specification (column names, types, order) in which
+	// the line items will be returned. Default to EWF.
+	//
+	// Possible values:
+	//   "EWF"
+	//   "SDF"
+	FileSpec string `json:"fileSpec,omitempty"`
+
 	// FilterIds: Ids of the specified filter type used to filter line items
 	// to fetch. If omitted, all the line items will be returned.
 	FilterIds googleapi.Int64s `json:"filterIds,omitempty"`
@@ -121,7 +131,7 @@
 	//   "CSV"
 	Format string `json:"format,omitempty"`
 
-	// ForceSendFields is a list of field names (e.g. "FilterIds") to
+	// ForceSendFields is a list of field names (e.g. "FileSpec") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
 	// non-interface field appearing in ForceSendFields will be sent to the
@@ -139,7 +149,8 @@
 // DownloadLineItemsResponse: Download line items response.
 type DownloadLineItemsResponse struct {
 	// LineItems: Retrieved line items in CSV format. Refer to  Entity Write
-	// File Format for more information on file format.
+	// File Format or  Structured Data File Format for more information on
+	// file formats.
 	LineItems string `json:"lineItems,omitempty"`
 
 	// ServerResponse contains the HTTP response code and headers from the
@@ -181,9 +192,11 @@
 	//   "FILTER_CITY"
 	//   "FILTER_CONVERSION_DELAY"
 	//   "FILTER_COUNTRY"
+	//   "FILTER_CREATIVE_HEIGHT"
 	//   "FILTER_CREATIVE_ID"
 	//   "FILTER_CREATIVE_SIZE"
 	//   "FILTER_CREATIVE_TYPE"
+	//   "FILTER_CREATIVE_WIDTH"
 	//   "FILTER_DATA_PROVIDER"
 	//   "FILTER_DATE"
 	//   "FILTER_DAY_OF_WEEK"
@@ -344,9 +357,11 @@
 	//   "FILTER_CITY"
 	//   "FILTER_CONVERSION_DELAY"
 	//   "FILTER_COUNTRY"
+	//   "FILTER_CREATIVE_HEIGHT"
 	//   "FILTER_CREATIVE_ID"
 	//   "FILTER_CREATIVE_SIZE"
 	//   "FILTER_CREATIVE_TYPE"
+	//   "FILTER_CREATIVE_WIDTH"
 	//   "FILTER_DATA_PROVIDER"
 	//   "FILTER_DATE"
 	//   "FILTER_DAY_OF_WEEK"
@@ -483,6 +498,12 @@
 	//   "METRIC_FEE20_ADVERTISER"
 	//   "METRIC_FEE20_PARTNER"
 	//   "METRIC_FEE20_USD"
+	//   "METRIC_FEE21_ADVERTISER"
+	//   "METRIC_FEE21_PARTNER"
+	//   "METRIC_FEE21_USD"
+	//   "METRIC_FEE22_ADVERTISER"
+	//   "METRIC_FEE22_PARTNER"
+	//   "METRIC_FEE22_USD"
 	//   "METRIC_FEE2_ADVERTISER"
 	//   "METRIC_FEE2_PARTNER"
 	//   "METRIC_FEE2_USD"
@@ -532,6 +553,9 @@
 	//   "METRIC_MEDIA_COST_ECPM_USD"
 	//   "METRIC_MEDIA_COST_PARTNER"
 	//   "METRIC_MEDIA_COST_USD"
+	//   "METRIC_MEDIA_COST_VIEWABLE_ECPM_ADVERTISER"
+	//   "METRIC_MEDIA_COST_VIEWABLE_ECPM_PARTNER"
+	//   "METRIC_MEDIA_COST_VIEWABLE_ECPM_USD"
 	//   "METRIC_MEDIA_FEE1_ADVERTISER"
 	//   "METRIC_MEDIA_FEE1_PARTNER"
 	//   "METRIC_MEDIA_FEE1_USD"
@@ -572,6 +596,9 @@
 	//   "METRIC_PROFIT_MARGIN"
 	//   "METRIC_PROFIT_PARTNER"
 	//   "METRIC_PROFIT_USD"
+	//   "METRIC_PROFIT_VIEWABLE_ECPM_ADVERTISER"
+	//   "METRIC_PROFIT_VIEWABLE_ECPM_PARTNER"
+	//   "METRIC_PROFIT_VIEWABLE_ECPM_USD"
 	//   "METRIC_REVENUE_ADVERTISER"
 	//   "METRIC_REVENUE_ECPAPC_ADVERTISER"
 	//   "METRIC_REVENUE_ECPAPC_PARTNER"
@@ -593,6 +620,9 @@
 	//   "METRIC_REVENUE_ECPM_USD"
 	//   "METRIC_REVENUE_PARTNER"
 	//   "METRIC_REVENUE_USD"
+	//   "METRIC_REVENUE_VIEWABLE_ECPM_ADVERTISER"
+	//   "METRIC_REVENUE_VIEWABLE_ECPM_PARTNER"
+	//   "METRIC_REVENUE_VIEWABLE_ECPM_USD"
 	//   "METRIC_RICH_MEDIA_VIDEO_COMPLETIONS"
 	//   "METRIC_RICH_MEDIA_VIDEO_FIRST_QUARTILE_COMPLETES"
 	//   "METRIC_RICH_MEDIA_VIDEO_FULL_SCREENS"
@@ -627,9 +657,24 @@
 	//   "METRIC_TOTAL_MEDIA_COST_ECPM_USD"
 	//   "METRIC_TOTAL_MEDIA_COST_PARTNER"
 	//   "METRIC_TOTAL_MEDIA_COST_USD"
+	//   "METRIC_TOTAL_MEDIA_COST_VIEWABLE_ECPM_ADVERTISER"
+	//   "METRIC_TOTAL_MEDIA_COST_VIEWABLE_ECPM_PARTNER"
+	//   "METRIC_TOTAL_MEDIA_COST_VIEWABLE_ECPM_USD"
+	//   "METRIC_TRUEVIEW_CONVERSION_COST_MANY_PER_VIEW_ADVERTISER"
+	//   "METRIC_TRUEVIEW_CONVERSION_COST_MANY_PER_VIEW_PARTNER"
+	//   "METRIC_TRUEVIEW_CONVERSION_COST_MANY_PER_VIEW_USD"
+	//   "METRIC_TRUEVIEW_CONVERSION_COST_ONE_PER_VIEW_ADVERTISER"
+	//   "METRIC_TRUEVIEW_CONVERSION_COST_ONE_PER_VIEW_PARTNER"
+	//   "METRIC_TRUEVIEW_CONVERSION_COST_ONE_PER_VIEW_USD"
 	//   "METRIC_TRUEVIEW_CONVERSION_MANY_PER_VIEW"
 	//   "METRIC_TRUEVIEW_CONVERSION_ONE_PER_VIEW"
 	//   "METRIC_TRUEVIEW_CONVERSION_RATE_ONE_PER_VIEW"
+	//   "METRIC_TRUEVIEW_CONVERSION_VALUE_MANY_PER_VIEW_ADVERTISER"
+	//   "METRIC_TRUEVIEW_CONVERSION_VALUE_MANY_PER_VIEW_PARTNER"
+	//   "METRIC_TRUEVIEW_CONVERSION_VALUE_MANY_PER_VIEW_USD"
+	//   "METRIC_TRUEVIEW_CONVERSION_VALUE_ONE_PER_VIEW_ADVERTISER"
+	//   "METRIC_TRUEVIEW_CONVERSION_VALUE_ONE_PER_VIEW_PARTNER"
+	//   "METRIC_TRUEVIEW_CONVERSION_VALUE_ONE_PER_VIEW_USD"
 	//   "METRIC_TRUEVIEW_COST_CONVERSION_MANY_PER_VIEW_RATIO"
 	//   "METRIC_TRUEVIEW_COST_CONVERSION_ONE_PER_VIEW_RATIO"
 	//   "METRIC_TRUEVIEW_CPV_ADVERTISER"
@@ -644,6 +689,9 @@
 	//   "METRIC_TRUEVIEW_LOST_IS_BUDGET"
 	//   "METRIC_TRUEVIEW_LOST_IS_RANK"
 	//   "METRIC_TRUEVIEW_TOTAL_CONVERSION_VALUE"
+	//   "METRIC_TRUEVIEW_TOTAL_CONVERSION_VALUES_ADVERTISER"
+	//   "METRIC_TRUEVIEW_TOTAL_CONVERSION_VALUES_PARTNER"
+	//   "METRIC_TRUEVIEW_TOTAL_CONVERSION_VALUES_USD"
 	//   "METRIC_TRUEVIEW_UNIQUE_VIEWERS"
 	//   "METRIC_TRUEVIEW_VALUE_CONVERSION_MANY_PER_VIEW_RATIO"
 	//   "METRIC_TRUEVIEW_VALUE_CONVERSION_ONE_PER_VIEW_RATIO"
@@ -675,6 +723,7 @@
 	//   "TYPE_KEYWORD"
 	//   "TYPE_NIELSEN_AUDIENCE_PROFILE"
 	//   "TYPE_NIELSEN_DAILY_REACH_BUILD"
+	//   "TYPE_NIELSEN_ONLINE_GLOBAL_MARKET"
 	//   "TYPE_NIELSEN_SITE"
 	//   "TYPE_ORDER_ID"
 	//   "TYPE_PAGE_CATEGORY"
diff --git a/doubleclicksearch/v2/doubleclicksearch-api.json b/doubleclicksearch/v2/doubleclicksearch-api.json
index 4c30c31..4fdec89 100644
--- a/doubleclicksearch/v2/doubleclicksearch-api.json
+++ b/doubleclicksearch/v2/doubleclicksearch-api.json
@@ -1,11 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/ve8tEpbsG_IxtYaZBLsdJxUCrVI\"",
+ "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/TYEElx_gLlz3G4Z0qoDLbuCjb8k\"",
  "discoveryVersion": "v1",
  "id": "doubleclicksearch:v2",
  "name": "doubleclicksearch",
  "version": "v2",
- "revision": "20150526",
+ "revision": "20151006",
  "title": "DoubleClick Search API",
  "description": "Report and modify your advertising data in DoubleClick Search (for example, campaigns, ad groups, keywords, and conversions).",
  "ownerDomain": "google.com",
@@ -451,7 +451,11 @@
     },
     "platformSource": {
      "type": "string",
-     "description": "The platform that is used to provide data for the custom dimension. Acceptable values are \"Floodlight\"."
+     "description": "The platform that is used to provide data for the custom dimension. Acceptable values are \"floodlight\"."
+    },
+    "productReportPerspective": {
+     "type": "string",
+     "description": "Provide different source for product items. Acceptable values are \"advertised\" and \"sold\"."
     },
     "savedColumnName": {
      "type": "string",
diff --git a/doubleclicksearch/v2/doubleclicksearch-gen.go b/doubleclicksearch/v2/doubleclicksearch-gen.go
index 225d2fb..d18373d 100644
--- a/doubleclicksearch/v2/doubleclicksearch-gen.go
+++ b/doubleclicksearch/v2/doubleclicksearch-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "doubleclicksearch:v2"
 const apiName = "doubleclicksearch"
@@ -486,9 +488,13 @@
 	HeaderText string `json:"headerText,omitempty"`
 
 	// PlatformSource: The platform that is used to provide data for the
-	// custom dimension. Acceptable values are "Floodlight".
+	// custom dimension. Acceptable values are "floodlight".
 	PlatformSource string `json:"platformSource,omitempty"`
 
+	// ProductReportPerspective: Provide different source for product items.
+	// Acceptable values are "advertised" and "sold".
+	ProductReportPerspective string `json:"productReportPerspective,omitempty"`
+
 	// SavedColumnName: Name of a saved column to include in the report. The
 	// report must be scoped at advertiser or lower, and this saved column
 	// must already be created in the DoubleClick Search UI.
diff --git a/drive/v1/drive-gen.go b/drive/v1/drive-gen.go
index 5a0790f..48fedb0 100644
--- a/drive/v1/drive-gen.go
+++ b/drive/v1/drive-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "drive:v1"
 const apiName = "drive"
diff --git a/drive/v2/drive-api.json b/drive/v2/drive-api.json
index c72a30f..a9afe87 100644
--- a/drive/v2/drive-api.json
+++ b/drive/v2/drive-api.json
@@ -1,11 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/vDvRzc2SjVzG9hrGn8HU-kRVxfE\"",
+ "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/j3Wwh3EWBgWZwRehTCtXuS9oPH4\"",
  "discoveryVersion": "v1",
  "id": "drive:v2",
  "name": "drive",
  "version": "v2",
- "revision": "20150910",
+ "revision": "20151008",
  "title": "Drive API",
  "description": "The API to interact with Drive.",
  "ownerDomain": "google.com",
@@ -1144,7 +1144,7 @@
     },
     "markedViewedByMeDate": {
      "type": "string",
-     "description": "Time this file was explicitly marked viewed by the user (formatted RFC 3339 timestamp).",
+     "description": "Deprecated.",
      "format": "date-time"
     },
     "md5Checksum": {
diff --git a/drive/v2/drive-gen.go b/drive/v2/drive-gen.go
index 86fc610..faf3220 100644
--- a/drive/v2/drive-gen.go
+++ b/drive/v2/drive-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "drive:v2"
 const apiName = "drive"
@@ -1246,8 +1248,7 @@
 	// (formatted RFC 3339 timestamp).
 	LastViewedByMeDate string `json:"lastViewedByMeDate,omitempty"`
 
-	// MarkedViewedByMeDate: Time this file was explicitly marked viewed by
-	// the user (formatted RFC 3339 timestamp).
+	// MarkedViewedByMeDate: Deprecated.
 	MarkedViewedByMeDate string `json:"markedViewedByMeDate,omitempty"`
 
 	// Md5Checksum: An MD5 checksum for the content of this file. This field
diff --git a/fitness/v1/fitness-gen.go b/fitness/v1/fitness-gen.go
index f0a4060..aa811e0 100644
--- a/fitness/v1/fitness-gen.go
+++ b/fitness/v1/fitness-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "fitness:v1"
 const apiName = "fitness"
diff --git a/freebase/v1/freebase-gen.go b/freebase/v1/freebase-gen.go
index 0df80f5..cbb7f91 100644
--- a/freebase/v1/freebase-gen.go
+++ b/freebase/v1/freebase-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "freebase:v1"
 const apiName = "freebase"
diff --git a/fusiontables/v1/fusiontables-gen.go b/fusiontables/v1/fusiontables-gen.go
index 242315d..b8f39b4 100644
--- a/fusiontables/v1/fusiontables-gen.go
+++ b/fusiontables/v1/fusiontables-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "fusiontables:v1"
 const apiName = "fusiontables"
diff --git a/fusiontables/v2/fusiontables-gen.go b/fusiontables/v2/fusiontables-gen.go
index e683725..546ea18 100644
--- a/fusiontables/v2/fusiontables-gen.go
+++ b/fusiontables/v2/fusiontables-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "fusiontables:v2"
 const apiName = "fusiontables"
diff --git a/games/v1/games-api.json b/games/v1/games-api.json
index cac3f9b..29ef297 100644
--- a/games/v1/games-api.json
+++ b/games/v1/games-api.json
@@ -1,12 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/zePdcB9UZrt3TRiL6gFnZKOSeZ0\"",
+ "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/P7g-a3C968F6LpsV-dK3V_5H2MQ\"",
  "discoveryVersion": "v1",
  "id": "games:v1",
  "name": "games",
  "canonicalName": "Games",
  "version": "v1",
- "revision": "20150707",
+ "revision": "20151012",
  "title": "Google Play Game Services API",
  "description": "The API for Google Play Game Services.",
  "ownerDomain": "google.com",
@@ -3539,10 +3539,12 @@
        "description": "Collection of players being retrieved",
        "required": true,
        "enum": [
+        "connected",
         "playedWith",
         "played_with"
        ],
        "enumDescriptions": [
+        "Retrieve a list of players that are also playing this game in reverse chronological order.",
         "(DEPRECATED: please use played_with!) Retrieve a list of players you have played a multiplayer game (realtime or turn-based) with recently.",
         "Retrieve a list of players you have played a multiplayer game (realtime or turn-based) with recently."
        ],
diff --git a/games/v1/games-gen.go b/games/v1/games-gen.go
index b5f9fa7..b09640c 100644
--- a/games/v1/games-gen.go
+++ b/games/v1/games-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "games:v1"
 const apiName = "games"
@@ -6720,10 +6722,12 @@
 	//     "collection": {
 	//       "description": "Collection of players being retrieved",
 	//       "enum": [
+	//         "connected",
 	//         "playedWith",
 	//         "played_with"
 	//       ],
 	//       "enumDescriptions": [
+	//         "Retrieve a list of players that are also playing this game in reverse chronological order.",
 	//         "(DEPRECATED: please use played_with!) Retrieve a list of players you have played a multiplayer game (realtime or turn-based) with recently.",
 	//         "Retrieve a list of players you have played a multiplayer game (realtime or turn-based) with recently."
 	//       ],
diff --git a/gamesconfiguration/v1configuration/gamesconfiguration-gen.go b/gamesconfiguration/v1configuration/gamesconfiguration-gen.go
index 4d3431f..62307a3 100644
--- a/gamesconfiguration/v1configuration/gamesconfiguration-gen.go
+++ b/gamesconfiguration/v1configuration/gamesconfiguration-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "gamesConfiguration:v1configuration"
 const apiName = "gamesConfiguration"
diff --git a/gamesmanagement/v1management/gamesmanagement-gen.go b/gamesmanagement/v1management/gamesmanagement-gen.go
index 25c9050..e5f85fd 100644
--- a/gamesmanagement/v1management/gamesmanagement-gen.go
+++ b/gamesmanagement/v1management/gamesmanagement-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "gamesManagement:v1management"
 const apiName = "gamesManagement"
diff --git a/gan/v1beta1/gan-gen.go b/gan/v1beta1/gan-gen.go
index 623c214..2eeb280 100644
--- a/gan/v1beta1/gan-gen.go
+++ b/gan/v1beta1/gan-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "gan:v1beta1"
 const apiName = "gan"
diff --git a/genomics/v1/genomics-gen.go b/genomics/v1/genomics-gen.go
index fe980c8..061a111 100644
--- a/genomics/v1/genomics-gen.go
+++ b/genomics/v1/genomics-gen.go
@@ -35,6 +35,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "genomics:v1"
 const apiName = "genomics"
diff --git a/genomics/v1beta2/genomics-gen.go b/genomics/v1beta2/genomics-gen.go
index f9b64b8..55e7edf 100644
--- a/genomics/v1beta2/genomics-gen.go
+++ b/genomics/v1beta2/genomics-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "genomics:v1beta2"
 const apiName = "genomics"
diff --git a/gmail/v1/gmail-gen.go b/gmail/v1/gmail-gen.go
index cf4a601..4856c6d 100644
--- a/gmail/v1/gmail-gen.go
+++ b/gmail/v1/gmail-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "gmail:v1"
 const apiName = "gmail"
diff --git a/google-api-go-generator/gen.go b/google-api-go-generator/gen.go
index 75478dd..37fed75 100644
--- a/google-api-go-generator/gen.go
+++ b/google-api-go-generator/gen.go
@@ -515,6 +515,8 @@
 	pn("var _ = errors.New")
 	pn("var _ = strings.Replace")
 	pn("var _ = internal.MarshalJSON")
+	pn("var _ = context.Canceled")
+	pn("var _ = ctxhttp.Do")
 	pn("")
 	pn("const apiId = %q", jstr(m, "id"))
 	pn("const apiName = %q", jstr(m, "name"))
diff --git a/google-api-go-generator/testdata/any.want b/google-api-go-generator/testdata/any.want
index f4305a6..7d08519 100644
--- a/google-api-go-generator/testdata/any.want
+++ b/google-api-go-generator/testdata/any.want
@@ -35,6 +35,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "logging:v1beta3"
 const apiName = "logging"
diff --git a/google-api-go-generator/testdata/arrayofarray-1.want b/google-api-go-generator/testdata/arrayofarray-1.want
index 641b04a..c019e7f 100644
--- a/google-api-go-generator/testdata/arrayofarray-1.want
+++ b/google-api-go-generator/testdata/arrayofarray-1.want
@@ -35,6 +35,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "arrayofarray:v1"
 const apiName = "arrayofarray"
diff --git a/google-api-go-generator/testdata/arrayofenum.want b/google-api-go-generator/testdata/arrayofenum.want
index 9ea7463..b85132c 100644
--- a/google-api-go-generator/testdata/arrayofenum.want
+++ b/google-api-go-generator/testdata/arrayofenum.want
@@ -35,6 +35,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "arrayofenum:v1"
 const apiName = "arrayofenum"
diff --git a/google-api-go-generator/testdata/arrayofmapofobjects.want b/google-api-go-generator/testdata/arrayofmapofobjects.want
index 811f499..e5761f6 100644
--- a/google-api-go-generator/testdata/arrayofmapofobjects.want
+++ b/google-api-go-generator/testdata/arrayofmapofobjects.want
@@ -35,6 +35,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "arrayofmapofstrings:v1"
 const apiName = "arrayofmapofstrings"
diff --git a/google-api-go-generator/testdata/arrayofmapofstrings.want b/google-api-go-generator/testdata/arrayofmapofstrings.want
index 491cce8..81675d3 100644
--- a/google-api-go-generator/testdata/arrayofmapofstrings.want
+++ b/google-api-go-generator/testdata/arrayofmapofstrings.want
@@ -35,6 +35,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "arrayofmapofstrings:v1"
 const apiName = "arrayofmapofstrings"
diff --git a/google-api-go-generator/testdata/blogger-3.want b/google-api-go-generator/testdata/blogger-3.want
index a382e26..8886eee 100644
--- a/google-api-go-generator/testdata/blogger-3.want
+++ b/google-api-go-generator/testdata/blogger-3.want
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "blogger:v3"
 const apiName = "blogger"
diff --git a/google-api-go-generator/testdata/getwithoutbody.want b/google-api-go-generator/testdata/getwithoutbody.want
index cf9ce73..2f4d080 100644
--- a/google-api-go-generator/testdata/getwithoutbody.want
+++ b/google-api-go-generator/testdata/getwithoutbody.want
@@ -35,6 +35,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "getwithoutbody:v1"
 const apiName = "getwithoutbody"
diff --git a/google-api-go-generator/testdata/mapofany.want b/google-api-go-generator/testdata/mapofany.want
index 2939dc6..526eb94 100644
--- a/google-api-go-generator/testdata/mapofany.want
+++ b/google-api-go-generator/testdata/mapofany.want
@@ -35,6 +35,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "mapofany:v1"
 const apiName = "mapofany"
diff --git a/google-api-go-generator/testdata/mapofarrayofobjects.want b/google-api-go-generator/testdata/mapofarrayofobjects.want
index e0e71e9..adbe1fe 100644
--- a/google-api-go-generator/testdata/mapofarrayofobjects.want
+++ b/google-api-go-generator/testdata/mapofarrayofobjects.want
@@ -35,6 +35,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "additionalprops:v1"
 const apiName = "additionalprops"
diff --git a/google-api-go-generator/testdata/mapofobjects.want b/google-api-go-generator/testdata/mapofobjects.want
index c60ec84..ba9dad8 100644
--- a/google-api-go-generator/testdata/mapofobjects.want
+++ b/google-api-go-generator/testdata/mapofobjects.want
@@ -35,6 +35,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "additionalpropsobjs:v1"
 const apiName = "additionalpropsobjs"
diff --git a/google-api-go-generator/testdata/mapofstrings-1.want b/google-api-go-generator/testdata/mapofstrings-1.want
index 8ca4a60..e405ff5 100644
--- a/google-api-go-generator/testdata/mapofstrings-1.want
+++ b/google-api-go-generator/testdata/mapofstrings-1.want
@@ -35,6 +35,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "additionalprops:v1"
 const apiName = "additionalprops"
diff --git a/google-api-go-generator/testdata/quotednum.want b/google-api-go-generator/testdata/quotednum.want
index 6311105..6bb89a8 100644
--- a/google-api-go-generator/testdata/quotednum.want
+++ b/google-api-go-generator/testdata/quotednum.want
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "adexchangebuyer:v1.1"
 const apiName = "adexchangebuyer"
diff --git a/google-api-go-generator/testdata/resource-named-service.want b/google-api-go-generator/testdata/resource-named-service.want
index cf470a6..19d3656 100644
--- a/google-api-go-generator/testdata/resource-named-service.want
+++ b/google-api-go-generator/testdata/resource-named-service.want
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "blogger:v3"
 const apiName = "blogger"
diff --git a/google-api-go-generator/testdata/unfortunatedefaults.want b/google-api-go-generator/testdata/unfortunatedefaults.want
index 132421c..2a9da97 100644
--- a/google-api-go-generator/testdata/unfortunatedefaults.want
+++ b/google-api-go-generator/testdata/unfortunatedefaults.want
@@ -35,6 +35,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "wrapnewlines:v1"
 const apiName = "wrapnewlines"
diff --git a/google-api-go-generator/testdata/variants.want b/google-api-go-generator/testdata/variants.want
index d5fc0b0..04048e5 100644
--- a/google-api-go-generator/testdata/variants.want
+++ b/google-api-go-generator/testdata/variants.want
@@ -35,6 +35,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "additionalpropsobjs:v1"
 const apiName = "additionalpropsobjs"
diff --git a/google-api-go-generator/testdata/wrapnewlines.want b/google-api-go-generator/testdata/wrapnewlines.want
index 5fa4c90..55fbcb0 100644
--- a/google-api-go-generator/testdata/wrapnewlines.want
+++ b/google-api-go-generator/testdata/wrapnewlines.want
@@ -35,6 +35,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "wrapnewlines:v1"
 const apiName = "wrapnewlines"
diff --git a/groupsmigration/v1/groupsmigration-gen.go b/groupsmigration/v1/groupsmigration-gen.go
index 24645ba..7fdd6d9 100644
--- a/groupsmigration/v1/groupsmigration-gen.go
+++ b/groupsmigration/v1/groupsmigration-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "groupsmigration:v1"
 const apiName = "groupsmigration"
diff --git a/groupssettings/v1/groupssettings-gen.go b/groupssettings/v1/groupssettings-gen.go
index 6f1d807..7dd71d5 100644
--- a/groupssettings/v1/groupssettings-gen.go
+++ b/groupssettings/v1/groupssettings-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "groupssettings:v1"
 const apiName = "groupssettings"
diff --git a/identitytoolkit/v3/identitytoolkit-api.json b/identitytoolkit/v3/identitytoolkit-api.json
index bf42194..29248b5 100644
--- a/identitytoolkit/v3/identitytoolkit-api.json
+++ b/identitytoolkit/v3/identitytoolkit-api.json
@@ -1,12 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/SNgmHHGH7wj9KiccwNhS4DpDB0M\"",
+ "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/VJrCHXHaMQfXi6fEi9qa_MKwS3Y\"",
  "discoveryVersion": "v1",
  "id": "identitytoolkit:v3",
  "name": "identitytoolkit",
  "canonicalName": "Identity Toolkit",
  "version": "v3",
- "revision": "20150908",
+ "revision": "20151008",
  "title": "Google Identity Toolkit API",
  "description": "Help the third party sites to implement federated login.",
  "ownerDomain": "google.com",
@@ -769,6 +769,10 @@
      "type": "boolean",
      "description": "Whether the assertion is from a non-trusted IDP and need account linking confirmation."
     },
+    "needEmail": {
+     "type": "boolean",
+     "description": "Whether need client to supply email to complete the federated login flow."
+    },
     "nickName": {
      "type": "string",
      "description": "The nick name of the user."
diff --git a/identitytoolkit/v3/identitytoolkit-gen.go b/identitytoolkit/v3/identitytoolkit-gen.go
index 2203f92..4e76940 100644
--- a/identitytoolkit/v3/identitytoolkit-gen.go
+++ b/identitytoolkit/v3/identitytoolkit-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "identitytoolkit:v3"
 const apiName = "identitytoolkit"
@@ -914,6 +916,10 @@
 	// need account linking confirmation.
 	NeedConfirmation bool `json:"needConfirmation,omitempty"`
 
+	// NeedEmail: Whether need client to supply email to complete the
+	// federated login flow.
+	NeedEmail bool `json:"needEmail,omitempty"`
+
 	// NickName: The nick name of the user.
 	NickName string `json:"nickName,omitempty"`
 
diff --git a/licensing/v1/licensing-gen.go b/licensing/v1/licensing-gen.go
index 614b2d5..823dd62 100644
--- a/licensing/v1/licensing-gen.go
+++ b/licensing/v1/licensing-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "licensing:v1"
 const apiName = "licensing"
diff --git a/logging/v1beta3/logging-api.json b/logging/v1beta3/logging-api.json
index 06fee7d..477e51b 100644
--- a/logging/v1beta3/logging-api.json
+++ b/logging/v1beta3/logging-api.json
@@ -1,11 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/Fi_zVio1slK88cI-ko5TXAVA3jo\"",
+ "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/l7KAWGWj5NIeNmaEXus4dk2p56U\"",
  "discoveryVersion": "v1",
  "id": "logging:v1beta3",
  "name": "logging",
  "version": "v1beta3",
- "revision": "20150610",
+ "revision": "20151007",
  "title": "Google Cloud Logging API",
  "description": "Google Cloud Logging API lets you create logs, ingest log entries, and manage log sinks.",
  "ownerDomain": "google.com",
@@ -320,6 +320,14 @@
     "referer": {
      "type": "string",
      "description": "Referer (a.k.a. referrer) URL of request, as defined in http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html."
+    },
+    "cacheHit": {
+     "type": "boolean",
+     "description": "Whether or not an entity was served from cache (with or without validation)."
+    },
+    "validatedWithOriginServer": {
+     "type": "boolean",
+     "description": "Whether or not the response was validated with the origin server before being served from cache. This field is only meaningful if cache_hit is True."
     }
    }
   },
@@ -445,16 +453,16 @@
   "Status": {
    "id": "Status",
    "type": "object",
-   "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). The error model is designed to be: - Simple to use and understand for most users - Flexible enough to meet unexpected needs # Overview The `Status` message contains three pieces of data: error code, error message, and error details. The error code should be an enum value of [google.rpc.Code][], but it may accept additional error codes if needed. The error message should be a developer-facing English message that helps developers *understand* and *resolve* the error. If a localized user-facing error message is needed, put the localized message in the error details or localize it in the client. The optional error details may contain arbitrary information about the error. There is a predefined set of error detail types in the package `google.rpc` which can be used for common error conditions. # Language mapping The `Status` message is the logical representation of the error model, but it is not necessarily the actual wire format. When the `Status` message is exposed in different client libraries and different wire protocols, it can be mapped differently. For example, it will likely be mapped to some exceptions in Java, but more likely mapped to some error codes in C. # Other uses The error model and the `Status` message can be used in a variety of environments, either with or without APIs, to provide a consistent developer experience across different environments. Example uses of this error model include: - Partial errors. If a service needs to return partial errors to the client, it may embed the `Status` in the normal response to indicate the partial errors. - Workflow errors. A typical workflow has multiple steps. Each step may have a `Status` message for error reporting purpose. - Batch operations. If a client uses batch request and batch response, the `Status` message should be used directly inside batch response, one for each error sub-response. - Asynchronous operations. If an API call embeds asynchronous operation results in its response, the status of those operations should be represented directly using the `Status` message. - Logging. If some API errors are stored in logs, the message `Status` could be used directly after any stripping needed for security/privacy reasons.",
+   "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). The error model is designed to be: - Simple to use and understand for most users - Flexible enough to meet unexpected needs # Overview The `Status` message contains three pieces of data: error code, error message, and error details. The error code should be an enum value of google.rpc.Code, but it may accept additional error codes if needed. The error message should be a developer-facing English message that helps developers *understand* and *resolve* the error. If a localized user-facing error message is needed, put the localized message in the error details or localize it in the client. The optional error details may contain arbitrary information about the error. There is a predefined set of error detail types in the package `google.rpc` which can be used for common error conditions. # Language mapping The `Status` message is the logical representation of the error model, but it is not necessarily the actual wire format. When the `Status` message is exposed in different client libraries and different wire protocols, it can be mapped differently. For example, it will likely be mapped to some exceptions in Java, but more likely mapped to some error codes in C. # Other uses The error model and the `Status` message can be used in a variety of environments, either with or without APIs, to provide a consistent developer experience across different environments. Example uses of this error model include: - Partial errors. If a service needs to return partial errors to the client, it may embed the `Status` in the normal response to indicate the partial errors. - Workflow errors. A typical workflow has multiple steps. Each step may have a `Status` message for error reporting purpose. - Batch operations. If a client uses batch request and batch response, the `Status` message should be used directly inside batch response, one for each error sub-response. - Asynchronous operations. If an API call embeds asynchronous operation results in its response, the status of those operations should be represented directly using the `Status` message. - Logging. If some API errors are stored in logs, the message `Status` could be used directly after any stripping needed for security/privacy reasons.",
    "properties": {
     "code": {
      "type": "integer",
-     "description": "The status code, which should be an enum value of [google.rpc.Code][].",
+     "description": "The status code, which should be an enum value of google.rpc.Code.",
      "format": "int32"
     },
     "message": {
      "type": "string",
-     "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client."
+     "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client."
     },
     "details": {
      "type": "array",
@@ -497,6 +505,43 @@
     }
    }
   },
+  "ListLogMetricsResponse": {
+   "id": "ListLogMetricsResponse",
+   "type": "object",
+   "description": "Result returned from ListLogMetrics.",
+   "properties": {
+    "metrics": {
+     "type": "array",
+     "description": "The list of metrics that was requested.",
+     "items": {
+      "$ref": "LogMetric"
+     }
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "If there are more results, then `nextPageToken` is returned in the response. To get the next batch of entries, use the value of `nextPageToken` as `pageToken` in the next call of `ListLogMetrics`. If `nextPageToken` is empty, then there are no more results."
+    }
+   }
+  },
+  "LogMetric": {
+   "id": "LogMetric",
+   "type": "object",
+   "description": "Describes a collected, logs-based metric. The value of the metric is the number of log entries in the project that match the advanced logs filter in the `filter` field.",
+   "properties": {
+    "name": {
+     "type": "string",
+     "description": "The client-assigned name for this metric, such as `\"severe_errors\"`. Metric names are limited to 1000 characters and can include only the following characters: `-A-Za-z0-9_.,+!*',()%/\\`. The slash character `/` implies a hierarchy of name pieces, and cannot be the first character of the name."
+    },
+    "description": {
+     "type": "string",
+     "description": "A description of this metric."
+    },
+    "filter": {
+     "type": "string",
+     "description": "An [advanced logs filter](/logging/docs/view/advanced_filters). Example: `\"log:syslog AND metadata.severity\u003e=ERROR\"`."
+    }
+   }
+  },
   "RequestLog": {
    "id": "RequestLog",
    "type": "object",
@@ -1041,11 +1086,6 @@
          "required": true,
          "location": "path"
         },
-        "log": {
-         "type": "string",
-         "description": "If empty, all log services contributing log entries to the project are listed. Otherwise, this field must be the resource name of a log, such as `\"projects/my-project/appengine.googleapis.com%2Frequest_log\"`, and then the only services listed are those associated with entries in the log. A service is associated with an entry if its name is in the entry's `LogEntryMetadata.serviceName` field.",
-         "location": "query"
-        },
         "pageSize": {
          "type": "integer",
          "description": "The maximum number of `LogService` objects to return in one operation.",
@@ -1095,7 +1135,7 @@
           },
           "indexPrefix": {
            "type": "string",
-           "description": "Restricts the index values returned to be those with a specified prefix for each index key. This field has the form `\"/prefix1/prefix2/...\"`, in order corresponding to the [`LogService indexKeys`][google.logging.v1.LogService.index_keys]. Non-empty prefixes must begin with `/`. For example, App Engine's two keys are the module ID and the version ID. Following is the effect of using various values for `indexPrefix`: + `\"/Mod/\"` retrieves `/Mod/10` and `/Mod/11` but not `/ModA/10`. + `\"/Mod` retrieves `/Mod/10`, `/Mod/11` and `/ModA/10` but not `/XXX/33`. + `\"/Mod/1\"` retrieves `/Mod/10` and `/Mod/11` but not `/ModA/10`. + `\"/Mod/10/\"` retrieves `/Mod/10` only. + An empty prefix or `\"/\"` retrieves all values.",
+           "description": "Restricts the index values returned to be those with a specified prefix for each index key. This field has the form `\"/prefix1/prefix2/...\"`, in order corresponding to the `LogService indexKeys`. Non-empty prefixes must begin with `/`. For example, App Engine's two keys are the module ID and the version ID. Following is the effect of using various values for `indexPrefix`: + `\"/Mod/\"` retrieves `/Mod/10` and `/Mod/11` but not `/ModA/10`. + `\"/Mod` retrieves `/Mod/10`, `/Mod/11` and `/ModA/10` but not `/XXX/33`. + `\"/Mod/1\"` retrieves `/Mod/10` and `/Mod/11` but not `/ModA/10`. + `\"/Mod/10/\"` retrieves `/Mod/10` only. + An empty prefix or `\"/\"` retrieves all values.",
            "location": "query"
           },
           "depth": {
@@ -1104,11 +1144,6 @@
            "format": "int32",
            "location": "query"
           },
-          "log": {
-           "type": "string",
-           "description": "_Optional_. The resource name of a log, such as `\"projects/project_id/logs/log_name\"`. If present, indexes are returned for any service associated with entries in the log.",
-           "location": "query"
-          },
           "pageSize": {
            "type": "integer",
            "description": "The maximum number of log service index resources to return in one operation.",
@@ -1483,6 +1518,172 @@
        ]
       }
      }
+    },
+    "metrics": {
+     "methods": {
+      "list": {
+       "id": "logging.projects.metrics.list",
+       "path": "v1beta3/projects/{projectsId}/metrics",
+       "httpMethod": "GET",
+       "description": "List log metrics associated with the specified project.",
+       "parameters": {
+        "projectsId": {
+         "type": "string",
+         "description": "Part of `projectName`. The resource name for the project whose metrics are wanted.",
+         "required": true,
+         "location": "path"
+        },
+        "pageToken": {
+         "type": "string",
+         "description": "An opaque token, returned as `nextPageToken` by a prior `ListLogMetrics` operation. If `pageToken` is supplied, then the other fields of this request are ignored, and instead the previous `ListLogMetrics` operation is continued.",
+         "location": "query"
+        },
+        "pageSize": {
+         "type": "integer",
+         "description": "The maximum number of `LogMetric` objects to return in one operation.",
+         "format": "int32",
+         "location": "query"
+        }
+       },
+       "parameterOrder": [
+        "projectsId"
+       ],
+       "response": {
+        "$ref": "ListLogMetricsResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/cloud-platform",
+        "https://www.googleapis.com/auth/cloud-platform.read-only",
+        "https://www.googleapis.com/auth/logging.admin",
+        "https://www.googleapis.com/auth/logging.read"
+       ]
+      },
+      "get": {
+       "id": "logging.projects.metrics.get",
+       "path": "v1beta3/projects/{projectsId}/metrics/{metricsId}",
+       "httpMethod": "GET",
+       "description": "Get the specified log metric resource.",
+       "parameters": {
+        "projectsId": {
+         "type": "string",
+         "description": "Part of `metricName`. The resource name of the desired metric.",
+         "required": true,
+         "location": "path"
+        },
+        "metricsId": {
+         "type": "string",
+         "description": "Part of `metricName`. See documentation of `projectsId`.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "projectsId",
+        "metricsId"
+       ],
+       "response": {
+        "$ref": "LogMetric"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/cloud-platform",
+        "https://www.googleapis.com/auth/cloud-platform.read-only",
+        "https://www.googleapis.com/auth/logging.admin",
+        "https://www.googleapis.com/auth/logging.read"
+       ]
+      },
+      "create": {
+       "id": "logging.projects.metrics.create",
+       "path": "v1beta3/projects/{projectsId}/metrics",
+       "httpMethod": "POST",
+       "description": "Create the specified log metric resource.",
+       "parameters": {
+        "projectsId": {
+         "type": "string",
+         "description": "Part of `projectName`. The resource name of the project in which to create the metric.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "projectsId"
+       ],
+       "request": {
+        "$ref": "LogMetric"
+       },
+       "response": {
+        "$ref": "LogMetric"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/cloud-platform",
+        "https://www.googleapis.com/auth/logging.admin"
+       ]
+      },
+      "update": {
+       "id": "logging.projects.metrics.update",
+       "path": "v1beta3/projects/{projectsId}/metrics/{metricsId}",
+       "httpMethod": "PUT",
+       "description": "Create or update the specified log metric resource.",
+       "parameters": {
+        "projectsId": {
+         "type": "string",
+         "description": "Part of `metricName`. The resource name of the metric to update.",
+         "required": true,
+         "location": "path"
+        },
+        "metricsId": {
+         "type": "string",
+         "description": "Part of `metricName`. See documentation of `projectsId`.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "projectsId",
+        "metricsId"
+       ],
+       "request": {
+        "$ref": "LogMetric"
+       },
+       "response": {
+        "$ref": "LogMetric"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/cloud-platform",
+        "https://www.googleapis.com/auth/logging.admin"
+       ]
+      },
+      "delete": {
+       "id": "logging.projects.metrics.delete",
+       "path": "v1beta3/projects/{projectsId}/metrics/{metricsId}",
+       "httpMethod": "DELETE",
+       "description": "Deletes the specified log metric.",
+       "parameters": {
+        "projectsId": {
+         "type": "string",
+         "description": "Part of `metricName`. The resource name of the metric to delete.",
+         "required": true,
+         "location": "path"
+        },
+        "metricsId": {
+         "type": "string",
+         "description": "Part of `metricName`. See documentation of `projectsId`.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "projectsId",
+        "metricsId"
+       ],
+       "response": {
+        "$ref": "Empty"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/cloud-platform",
+        "https://www.googleapis.com/auth/logging.admin"
+       ]
+      }
+     }
     }
    }
   }
diff --git a/logging/v1beta3/logging-gen.go b/logging/v1beta3/logging-gen.go
index 7ccddf8..d352004 100644
--- a/logging/v1beta3/logging-gen.go
+++ b/logging/v1beta3/logging-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "logging:v1beta3"
 const apiName = "logging"
@@ -89,6 +91,7 @@
 	rs := &ProjectsService{s: s}
 	rs.LogServices = NewProjectsLogServicesService(s)
 	rs.Logs = NewProjectsLogsService(s)
+	rs.Metrics = NewProjectsMetricsService(s)
 	rs.Sinks = NewProjectsSinksService(s)
 	return rs
 }
@@ -100,6 +103,8 @@
 
 	Logs *ProjectsLogsService
 
+	Metrics *ProjectsMetricsService
+
 	Sinks *ProjectsSinksService
 }
 
@@ -169,6 +174,15 @@
 	s *Service
 }
 
+func NewProjectsMetricsService(s *Service) *ProjectsMetricsService {
+	rs := &ProjectsMetricsService{s: s}
+	return rs
+}
+
+type ProjectsMetricsService struct {
+	s *Service
+}
+
 func NewProjectsSinksService(s *Service) *ProjectsSinksService {
 	rs := &ProjectsSinksService{s: s}
 	return rs
@@ -192,6 +206,10 @@
 
 // HttpRequest: A common proto for logging HTTP requests.
 type HttpRequest struct {
+	// CacheHit: Whether or not an entity was served from cache (with or
+	// without validation).
+	CacheHit bool `json:"cacheHit,omitempty"`
+
 	// Referer: Referer (a.k.a. referrer) URL of request, as defined in
 	// http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html.
 	Referer string `json:"referer,omitempty"`
@@ -223,7 +241,12 @@
 	// (compatible; MSIE 6.0; Windows 98; Q312461; .NET CLR 1.0.3705)".
 	UserAgent string `json:"userAgent,omitempty"`
 
-	// ForceSendFields is a list of field names (e.g. "Referer") to
+	// ValidatedWithOriginServer: Whether or not the response was validated
+	// with the origin server before being served from cache. This field is
+	// only meaningful if cache_hit is True.
+	ValidatedWithOriginServer bool `json:"validatedWithOriginServer,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "CacheHit") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
 	// non-interface field appearing in ForceSendFields will be sent to the
@@ -238,6 +261,37 @@
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
 
+// ListLogMetricsResponse: Result returned from ListLogMetrics.
+type ListLogMetricsResponse struct {
+	// Metrics: The list of metrics that was requested.
+	Metrics []*LogMetric `json:"metrics,omitempty"`
+
+	// NextPageToken: If there are more results, then `nextPageToken` is
+	// returned in the response. To get the next batch of entries, use the
+	// value of `nextPageToken` as `pageToken` in the next call of
+	// `ListLogMetrics`. If `nextPageToken` is empty, then there are no more
+	// results.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Metrics") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *ListLogMetricsResponse) MarshalJSON() ([]byte, error) {
+	type noMethod ListLogMetricsResponse
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
 // ListLogServiceIndexesResponse: Result returned from
 // ListLogServiceIndexesRequest.
 type ListLogServiceIndexesResponse struct {
@@ -641,6 +695,44 @@
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
 
+// LogMetric: Describes a collected, logs-based metric. The value of the
+// metric is the number of log entries in the project that match the
+// advanced logs filter in the `filter` field.
+type LogMetric struct {
+	// Description: A description of this metric.
+	Description string `json:"description,omitempty"`
+
+	// Filter: An [advanced logs
+	// filter](/logging/docs/view/advanced_filters). Example: "log:syslog
+	// AND metadata.severity>=ERROR".
+	Filter string `json:"filter,omitempty"`
+
+	// Name: The client-assigned name for this metric, such as
+	// "severe_errors". Metric names are limited to 1000 characters and
+	// can include only the following characters: `-A-Za-z0-9_.,+!*',()%/\`.
+	// The slash character `/` implies a hierarchy of name pieces, and
+	// cannot be the first character of the name.
+	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. "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:"-"`
+}
+
+func (s *LogMetric) MarshalJSON() ([]byte, error) {
+	type noMethod LogMetric
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
 // LogService: _Output only._ Describes a service that writes log
 // entries.
 type LogService struct {
@@ -919,39 +1011,38 @@
 // most users - Flexible enough to meet unexpected needs # Overview The
 // `Status` message contains three pieces of data: error code, error
 // message, and error details. The error code should be an enum value of
-// [google.rpc.Code][], but it may accept additional error codes if
-// needed. The error message should be a developer-facing English
-// message that helps developers *understand* and *resolve* the error.
-// If a localized user-facing error message is needed, put the localized
-// message in the error details or localize it in the client. The
-// optional error details may contain arbitrary information about the
-// error. There is a predefined set of error detail types in the package
-// `google.rpc` which can be used for common error conditions. #
-// Language mapping The `Status` message is the logical representation
-// of the error model, but it is not necessarily the actual wire format.
-// When the `Status` message is exposed in different client libraries
-// and different wire protocols, it can be mapped differently. For
-// example, it will likely be mapped to some exceptions in Java, but
-// more likely mapped to some error codes in C. # Other uses The error
-// model and the `Status` message can be used in a variety of
-// environments, either with or without APIs, to provide a consistent
-// developer experience across different environments. Example uses of
-// this error model include: - Partial errors. If a service needs to
-// return partial errors to the client, it may embed the `Status` in the
-// normal response to indicate the partial errors. - Workflow errors. A
-// typical workflow has multiple steps. Each step may have a `Status`
-// message for error reporting purpose. - Batch operations. If a client
-// uses batch request and batch response, the `Status` message should be
-// used directly inside batch response, one for each error sub-response.
-// - Asynchronous operations. If an API call embeds asynchronous
-// operation results in its response, the status of those operations
-// should be represented directly using the `Status` message. - Logging.
-// If some API errors are stored in logs, the message `Status` could be
-// used directly after any stripping needed for security/privacy
-// reasons.
+// google.rpc.Code, but it may accept additional error codes if needed.
+// The error message should be a developer-facing English message that
+// helps developers *understand* and *resolve* the error. If a localized
+// user-facing error message is needed, put the localized message in the
+// error details or localize it in the client. The optional error
+// details may contain arbitrary information about the error. There is a
+// predefined set of error detail types in the package `google.rpc`
+// which can be used for common error conditions. # Language mapping The
+// `Status` message is the logical representation of the error model,
+// but it is not necessarily the actual wire format. When the `Status`
+// message is exposed in different client libraries and different wire
+// protocols, it can be mapped differently. For example, it will likely
+// be mapped to some exceptions in Java, but more likely mapped to some
+// error codes in C. # Other uses The error model and the `Status`
+// message can be used in a variety of environments, either with or
+// without APIs, to provide a consistent developer experience across
+// different environments. Example uses of this error model include: -
+// Partial errors. If a service needs to return partial errors to the
+// client, it may embed the `Status` in the normal response to indicate
+// the partial errors. - Workflow errors. A typical workflow has
+// multiple steps. Each step may have a `Status` message for error
+// reporting purpose. - Batch operations. If a client uses batch request
+// and batch response, the `Status` message should be used directly
+// inside batch response, one for each error sub-response. -
+// Asynchronous operations. If an API call embeds asynchronous operation
+// results in its response, the status of those operations should be
+// represented directly using the `Status` message. - Logging. If some
+// API errors are stored in logs, the message `Status` could be used
+// directly after any stripping needed for security/privacy reasons.
 type Status struct {
 	// Code: The status code, which should be an enum value of
-	// [google.rpc.Code][].
+	// google.rpc.Code.
 	Code int64 `json:"code,omitempty"`
 
 	// Details: A list of messages that carry the error details. There will
@@ -960,8 +1051,7 @@
 
 	// 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][google.rpc.Status.details] field,
-	// or localized by the client.
+	// 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
@@ -1031,18 +1121,6 @@
 	return c
 }
 
-// Log sets the optional parameter "log": If empty, all log services
-// contributing log entries to the project are listed. Otherwise, this
-// field must be the resource name of a log, such as
-// "projects/my-project/appengine.googleapis.com%2Frequest_log", and
-// then the only services listed are those associated with entries in
-// the log. A service is associated with an entry if its name is in the
-// entry's `LogEntryMetadata.serviceName` field.
-func (c *ProjectsLogServicesListCall) Log(log string) *ProjectsLogServicesListCall {
-	c.opt_["log"] = log
-	return c
-}
-
 // PageSize sets the optional parameter "pageSize": The maximum number
 // of `LogService` objects to return in one operation.
 func (c *ProjectsLogServicesListCall) PageSize(pageSize int64) *ProjectsLogServicesListCall {
@@ -1090,9 +1168,6 @@
 	var body io.Reader = nil
 	params := make(url.Values)
 	params.Set("alt", alt)
-	if v, ok := c.opt_["log"]; ok {
-		params.Set("log", fmt.Sprintf("%v", v))
-	}
 	if v, ok := c.opt_["pageSize"]; ok {
 		params.Set("pageSize", fmt.Sprintf("%v", v))
 	}
@@ -1161,11 +1236,6 @@
 	//     "projectsId"
 	//   ],
 	//   "parameters": {
-	//     "log": {
-	//       "description": "If empty, all log services contributing log entries to the project are listed. Otherwise, this field must be the resource name of a log, such as `\"projects/my-project/appengine.googleapis.com%2Frequest_log\"`, and then the only services listed are those associated with entries in the log. A service is associated with an entry if its name is in the entry's `LogEntryMetadata.serviceName` field.",
-	//       "location": "query",
-	//       "type": "string"
-	//     },
 	//     "pageSize": {
 	//       "description": "The maximum number of `LogService` objects to return in one operation.",
 	//       "format": "int32",
@@ -1234,29 +1304,19 @@
 // IndexPrefix sets the optional parameter "indexPrefix": Restricts the
 // index values returned to be those with a specified prefix for each
 // index key. This field has the form "/prefix1/prefix2/...", in order
-// corresponding to the [`LogService
-// indexKeys`][google.logging.v1.LogService.index_keys]. Non-empty
-// prefixes must begin with `/`. For example, App Engine's two keys are
-// the module ID and the version ID. Following is the effect of using
-// various values for `indexPrefix`: + "/Mod/" retrieves `/Mod/10` and
-// `/Mod/11` but not `/ModA/10`. + "/Mod` retrieves `/Mod/10`,
-// `/Mod/11` and `/ModA/10` but not `/XXX/33`. + "/Mod/1" retrieves
-// `/Mod/10` and `/Mod/11` but not `/ModA/10`. + "/Mod/10/" retrieves
-// `/Mod/10` only. + An empty prefix or "/" retrieves all values.
+// corresponding to the `LogService indexKeys`. Non-empty prefixes must
+// begin with `/`. For example, App Engine's two keys are the module ID
+// and the version ID. Following is the effect of using various values
+// for `indexPrefix`: + "/Mod/" retrieves `/Mod/10` and `/Mod/11` but
+// not `/ModA/10`. + "/Mod` retrieves `/Mod/10`, `/Mod/11` and
+// `/ModA/10` but not `/XXX/33`. + "/Mod/1" retrieves `/Mod/10` and
+// `/Mod/11` but not `/ModA/10`. + "/Mod/10/" retrieves `/Mod/10`
+// only. + An empty prefix or "/" retrieves all values.
 func (c *ProjectsLogServicesIndexesListCall) IndexPrefix(indexPrefix string) *ProjectsLogServicesIndexesListCall {
 	c.opt_["indexPrefix"] = indexPrefix
 	return c
 }
 
-// Log sets the optional parameter "log": _Optional_. The resource name
-// of a log, such as "projects/project_id/logs/log_name". If present,
-// indexes are returned for any service associated with entries in the
-// log.
-func (c *ProjectsLogServicesIndexesListCall) Log(log string) *ProjectsLogServicesIndexesListCall {
-	c.opt_["log"] = log
-	return c
-}
-
 // PageSize sets the optional parameter "pageSize": The maximum number
 // of log service index resources to return in one operation.
 func (c *ProjectsLogServicesIndexesListCall) PageSize(pageSize int64) *ProjectsLogServicesIndexesListCall {
@@ -1310,9 +1370,6 @@
 	if v, ok := c.opt_["indexPrefix"]; ok {
 		params.Set("indexPrefix", fmt.Sprintf("%v", v))
 	}
-	if v, ok := c.opt_["log"]; ok {
-		params.Set("log", fmt.Sprintf("%v", v))
-	}
 	if v, ok := c.opt_["pageSize"]; ok {
 		params.Set("pageSize", fmt.Sprintf("%v", v))
 	}
@@ -1390,12 +1447,7 @@
 	//       "type": "integer"
 	//     },
 	//     "indexPrefix": {
-	//       "description": "Restricts the index values returned to be those with a specified prefix for each index key. This field has the form `\"/prefix1/prefix2/...\"`, in order corresponding to the [`LogService indexKeys`][google.logging.v1.LogService.index_keys]. Non-empty prefixes must begin with `/`. For example, App Engine's two keys are the module ID and the version ID. Following is the effect of using various values for `indexPrefix`: + `\"/Mod/\"` retrieves `/Mod/10` and `/Mod/11` but not `/ModA/10`. + `\"/Mod` retrieves `/Mod/10`, `/Mod/11` and `/ModA/10` but not `/XXX/33`. + `\"/Mod/1\"` retrieves `/Mod/10` and `/Mod/11` but not `/ModA/10`. + `\"/Mod/10/\"` retrieves `/Mod/10` only. + An empty prefix or `\"/\"` retrieves all values.",
-	//       "location": "query",
-	//       "type": "string"
-	//     },
-	//     "log": {
-	//       "description": "_Optional_. The resource name of a log, such as `\"projects/project_id/logs/log_name\"`. If present, indexes are returned for any service associated with entries in the log.",
+	//       "description": "Restricts the index values returned to be those with a specified prefix for each index key. This field has the form `\"/prefix1/prefix2/...\"`, in order corresponding to the `LogService indexKeys`. Non-empty prefixes must begin with `/`. For example, App Engine's two keys are the module ID and the version ID. Following is the effect of using various values for `indexPrefix`: + `\"/Mod/\"` retrieves `/Mod/10` and `/Mod/11` but not `/ModA/10`. + `\"/Mod` retrieves `/Mod/10`, `/Mod/11` and `/ModA/10` but not `/XXX/33`. + `\"/Mod/1\"` retrieves `/Mod/10` and `/Mod/11` but not `/ModA/10`. + `\"/Mod/10/\"` retrieves `/Mod/10` only. + An empty prefix or `\"/\"` retrieves all values.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
@@ -3315,6 +3367,692 @@
 
 }
 
+// method id "logging.projects.metrics.create":
+
+type ProjectsMetricsCreateCall struct {
+	s          *Service
+	projectsId string
+	logmetric  *LogMetric
+	opt_       map[string]interface{}
+	ctx_       context.Context
+}
+
+// Create: Create the specified log metric resource.
+func (r *ProjectsMetricsService) Create(projectsId string, logmetric *LogMetric) *ProjectsMetricsCreateCall {
+	c := &ProjectsMetricsCreateCall{s: r.s, opt_: make(map[string]interface{})}
+	c.projectsId = projectsId
+	c.logmetric = logmetric
+	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 *ProjectsMetricsCreateCall) Fields(s ...googleapi.Field) *ProjectsMetricsCreateCall {
+	c.opt_["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 *ProjectsMetricsCreateCall) Context(ctx context.Context) *ProjectsMetricsCreateCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *ProjectsMetricsCreateCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.logmetric)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta3/projects/{projectsId}/metrics")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"projectsId": c.projectsId,
+	})
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "logging.projects.metrics.create" call.
+// Exactly one of *LogMetric or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *LogMetric.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 *ProjectsMetricsCreateCall) Do() (*LogMetric, error) {
+	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 := &LogMetric{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Create the specified log metric resource.",
+	//   "httpMethod": "POST",
+	//   "id": "logging.projects.metrics.create",
+	//   "parameterOrder": [
+	//     "projectsId"
+	//   ],
+	//   "parameters": {
+	//     "projectsId": {
+	//       "description": "Part of `projectName`. The resource name of the project in which to create the metric.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta3/projects/{projectsId}/metrics",
+	//   "request": {
+	//     "$ref": "LogMetric"
+	//   },
+	//   "response": {
+	//     "$ref": "LogMetric"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/logging.admin"
+	//   ]
+	// }
+
+}
+
+// method id "logging.projects.metrics.delete":
+
+type ProjectsMetricsDeleteCall struct {
+	s          *Service
+	projectsId string
+	metricsId  string
+	opt_       map[string]interface{}
+	ctx_       context.Context
+}
+
+// Delete: Deletes the specified log metric.
+func (r *ProjectsMetricsService) Delete(projectsId string, metricsId string) *ProjectsMetricsDeleteCall {
+	c := &ProjectsMetricsDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.projectsId = projectsId
+	c.metricsId = metricsId
+	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 *ProjectsMetricsDeleteCall) Fields(s ...googleapi.Field) *ProjectsMetricsDeleteCall {
+	c.opt_["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 *ProjectsMetricsDeleteCall) Context(ctx context.Context) *ProjectsMetricsDeleteCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *ProjectsMetricsDeleteCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta3/projects/{projectsId}/metrics/{metricsId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"projectsId": c.projectsId,
+		"metricsId":  c.metricsId,
+	})
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "logging.projects.metrics.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 *ProjectsMetricsDeleteCall) Do() (*Empty, error) {
+	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,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Deletes the specified log metric.",
+	//   "httpMethod": "DELETE",
+	//   "id": "logging.projects.metrics.delete",
+	//   "parameterOrder": [
+	//     "projectsId",
+	//     "metricsId"
+	//   ],
+	//   "parameters": {
+	//     "metricsId": {
+	//       "description": "Part of `metricName`. See documentation of `projectsId`.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "projectsId": {
+	//       "description": "Part of `metricName`. The resource name of the metric to delete.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta3/projects/{projectsId}/metrics/{metricsId}",
+	//   "response": {
+	//     "$ref": "Empty"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/logging.admin"
+	//   ]
+	// }
+
+}
+
+// method id "logging.projects.metrics.get":
+
+type ProjectsMetricsGetCall struct {
+	s          *Service
+	projectsId string
+	metricsId  string
+	opt_       map[string]interface{}
+	ctx_       context.Context
+}
+
+// Get: Get the specified log metric resource.
+func (r *ProjectsMetricsService) Get(projectsId string, metricsId string) *ProjectsMetricsGetCall {
+	c := &ProjectsMetricsGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.projectsId = projectsId
+	c.metricsId = metricsId
+	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 *ProjectsMetricsGetCall) Fields(s ...googleapi.Field) *ProjectsMetricsGetCall {
+	c.opt_["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 *ProjectsMetricsGetCall) IfNoneMatch(entityTag string) *ProjectsMetricsGetCall {
+	c.opt_["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 *ProjectsMetricsGetCall) Context(ctx context.Context) *ProjectsMetricsGetCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *ProjectsMetricsGetCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta3/projects/{projectsId}/metrics/{metricsId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"projectsId": c.projectsId,
+		"metricsId":  c.metricsId,
+	})
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if v, ok := c.opt_["ifNoneMatch"]; ok {
+		req.Header.Set("If-None-Match", fmt.Sprintf("%v", v))
+	}
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "logging.projects.metrics.get" call.
+// Exactly one of *LogMetric or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *LogMetric.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 *ProjectsMetricsGetCall) Do() (*LogMetric, error) {
+	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 := &LogMetric{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Get the specified log metric resource.",
+	//   "httpMethod": "GET",
+	//   "id": "logging.projects.metrics.get",
+	//   "parameterOrder": [
+	//     "projectsId",
+	//     "metricsId"
+	//   ],
+	//   "parameters": {
+	//     "metricsId": {
+	//       "description": "Part of `metricName`. See documentation of `projectsId`.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "projectsId": {
+	//       "description": "Part of `metricName`. The resource name of the desired metric.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta3/projects/{projectsId}/metrics/{metricsId}",
+	//   "response": {
+	//     "$ref": "LogMetric"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-platform.read-only",
+	//     "https://www.googleapis.com/auth/logging.admin",
+	//     "https://www.googleapis.com/auth/logging.read"
+	//   ]
+	// }
+
+}
+
+// method id "logging.projects.metrics.list":
+
+type ProjectsMetricsListCall struct {
+	s          *Service
+	projectsId string
+	opt_       map[string]interface{}
+	ctx_       context.Context
+}
+
+// List: List log metrics associated with the specified project.
+func (r *ProjectsMetricsService) List(projectsId string) *ProjectsMetricsListCall {
+	c := &ProjectsMetricsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.projectsId = projectsId
+	return c
+}
+
+// PageSize sets the optional parameter "pageSize": The maximum number
+// of `LogMetric` objects to return in one operation.
+func (c *ProjectsMetricsListCall) PageSize(pageSize int64) *ProjectsMetricsListCall {
+	c.opt_["pageSize"] = pageSize
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": An opaque token,
+// returned as `nextPageToken` by a prior `ListLogMetrics` operation. If
+// `pageToken` is supplied, then the other fields of this request are
+// ignored, and instead the previous `ListLogMetrics` operation is
+// continued.
+func (c *ProjectsMetricsListCall) PageToken(pageToken string) *ProjectsMetricsListCall {
+	c.opt_["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 *ProjectsMetricsListCall) Fields(s ...googleapi.Field) *ProjectsMetricsListCall {
+	c.opt_["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 *ProjectsMetricsListCall) IfNoneMatch(entityTag string) *ProjectsMetricsListCall {
+	c.opt_["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 *ProjectsMetricsListCall) Context(ctx context.Context) *ProjectsMetricsListCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *ProjectsMetricsListCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["pageSize"]; ok {
+		params.Set("pageSize", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["pageToken"]; ok {
+		params.Set("pageToken", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta3/projects/{projectsId}/metrics")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"projectsId": c.projectsId,
+	})
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if v, ok := c.opt_["ifNoneMatch"]; ok {
+		req.Header.Set("If-None-Match", fmt.Sprintf("%v", v))
+	}
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "logging.projects.metrics.list" call.
+// Exactly one of *ListLogMetricsResponse or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *ListLogMetricsResponse.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 *ProjectsMetricsListCall) Do() (*ListLogMetricsResponse, error) {
+	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 := &ListLogMetricsResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "List log metrics associated with the specified project.",
+	//   "httpMethod": "GET",
+	//   "id": "logging.projects.metrics.list",
+	//   "parameterOrder": [
+	//     "projectsId"
+	//   ],
+	//   "parameters": {
+	//     "pageSize": {
+	//       "description": "The maximum number of `LogMetric` objects to return in one operation.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "An opaque token, returned as `nextPageToken` by a prior `ListLogMetrics` operation. If `pageToken` is supplied, then the other fields of this request are ignored, and instead the previous `ListLogMetrics` operation is continued.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "projectsId": {
+	//       "description": "Part of `projectName`. The resource name for the project whose metrics are wanted.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta3/projects/{projectsId}/metrics",
+	//   "response": {
+	//     "$ref": "ListLogMetricsResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-platform.read-only",
+	//     "https://www.googleapis.com/auth/logging.admin",
+	//     "https://www.googleapis.com/auth/logging.read"
+	//   ]
+	// }
+
+}
+
+// method id "logging.projects.metrics.update":
+
+type ProjectsMetricsUpdateCall struct {
+	s          *Service
+	projectsId string
+	metricsId  string
+	logmetric  *LogMetric
+	opt_       map[string]interface{}
+	ctx_       context.Context
+}
+
+// Update: Create or update the specified log metric resource.
+func (r *ProjectsMetricsService) Update(projectsId string, metricsId string, logmetric *LogMetric) *ProjectsMetricsUpdateCall {
+	c := &ProjectsMetricsUpdateCall{s: r.s, opt_: make(map[string]interface{})}
+	c.projectsId = projectsId
+	c.metricsId = metricsId
+	c.logmetric = logmetric
+	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 *ProjectsMetricsUpdateCall) Fields(s ...googleapi.Field) *ProjectsMetricsUpdateCall {
+	c.opt_["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 *ProjectsMetricsUpdateCall) Context(ctx context.Context) *ProjectsMetricsUpdateCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *ProjectsMetricsUpdateCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.logmetric)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta3/projects/{projectsId}/metrics/{metricsId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("PUT", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"projectsId": c.projectsId,
+		"metricsId":  c.metricsId,
+	})
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "logging.projects.metrics.update" call.
+// Exactly one of *LogMetric or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *LogMetric.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 *ProjectsMetricsUpdateCall) Do() (*LogMetric, error) {
+	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 := &LogMetric{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Create or update the specified log metric resource.",
+	//   "httpMethod": "PUT",
+	//   "id": "logging.projects.metrics.update",
+	//   "parameterOrder": [
+	//     "projectsId",
+	//     "metricsId"
+	//   ],
+	//   "parameters": {
+	//     "metricsId": {
+	//       "description": "Part of `metricName`. See documentation of `projectsId`.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "projectsId": {
+	//       "description": "Part of `metricName`. The resource name of the metric to update.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta3/projects/{projectsId}/metrics/{metricsId}",
+	//   "request": {
+	//     "$ref": "LogMetric"
+	//   },
+	//   "response": {
+	//     "$ref": "LogMetric"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/logging.admin"
+	//   ]
+	// }
+
+}
+
 // method id "logging.projects.sinks.create":
 
 type ProjectsSinksCreateCall struct {
diff --git a/logging/v2beta1/logging-api.json b/logging/v2beta1/logging-api.json
new file mode 100644
index 0000000..405d244
--- /dev/null
+++ b/logging/v2beta1/logging-api.json
@@ -0,0 +1,318 @@
+{
+ "kind": "discovery#restDescription",
+ "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/Dl8jzEbCLfW8aU_OmsbXBqEUy5Y\"",
+ "discoveryVersion": "v1",
+ "id": "logging:v2beta1",
+ "name": "logging",
+ "version": "v2beta1",
+ "revision": "20151007",
+ "title": "Google Cloud Logging API",
+ "description": "Google Cloud Logging API lets you create logs, ingest log entries, and manage log sinks.",
+ "ownerDomain": "google.com",
+ "ownerName": "Google",
+ "icons": {
+  "x16": "http://www.google.com/images/icons/product/search-16.gif",
+  "x32": "http://www.google.com/images/icons/product/search-32.gif"
+ },
+ "documentationLink": "https://cloud.google.com/logging/docs/",
+ "protocol": "rest",
+ "baseUrl": "https://logging.googleapis.com/",
+ "basePath": "/",
+ "rootUrl": "https://logging.googleapis.com/",
+ "servicePath": "",
+ "batchPath": "batch",
+ "parameters": {
+  "access_token": {
+   "type": "string",
+   "description": "OAuth access token.",
+   "location": "query"
+  },
+  "alt": {
+   "type": "string",
+   "description": "Data format for response.",
+   "default": "json",
+   "enumDescriptions": [
+    "Responses with Content-Type of application/json",
+    "Media download with context-dependent Content-Type",
+    "Responses with Content-Type of application/x-protobuf"
+   ],
+   "location": "query"
+  },
+  "bearer_token": {
+   "type": "string",
+   "description": "OAuth bearer token.",
+   "location": "query"
+  },
+  "callback": {
+   "type": "string",
+   "description": "JSONP",
+   "location": "query"
+  },
+  "fields": {
+   "type": "string",
+   "description": "Selector specifying which fields to include in a partial response.",
+   "location": "query"
+  },
+  "key": {
+   "type": "string",
+   "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+   "location": "query"
+  },
+  "oauth_token": {
+   "type": "string",
+   "description": "OAuth 2.0 token for the current user.",
+   "location": "query"
+  },
+  "pp": {
+   "type": "boolean",
+   "description": "Pretty-print response.",
+   "default": "true",
+   "location": "query"
+  },
+  "prettyPrint": {
+   "type": "boolean",
+   "description": "Returns response with indentations and line breaks.",
+   "default": "true",
+   "location": "query"
+  },
+  "quotaUser": {
+   "type": "string",
+   "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+   "location": "query"
+  },
+  "upload_protocol": {
+   "type": "string",
+   "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+   "location": "query"
+  },
+  "uploadType": {
+   "type": "string",
+   "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+   "location": "query"
+  },
+  "$.xgafv": {
+   "type": "string",
+   "description": "V1 error format.",
+   "enumDescriptions": [
+    "v1 error format",
+    "v2 error format"
+   ],
+   "location": "query"
+  }
+ },
+ "schemas": {
+  "RequestLog": {
+   "id": "RequestLog",
+   "type": "object",
+   "description": "Complete log information about a single request to an application.",
+   "properties": {
+    "appId": {
+     "type": "string",
+     "description": "Identifies the application that handled this request."
+    },
+    "moduleId": {
+     "type": "string",
+     "description": "Identifies the module of the application that handled this request."
+    },
+    "versionId": {
+     "type": "string",
+     "description": "Version of the application that handled this request."
+    },
+    "requestId": {
+     "type": "string",
+     "description": "Globally unique identifier for a request, based on request start time. Request IDs for requests which started later will compare greater as binary strings than those for requests which started earlier.",
+     "format": "byte"
+    },
+    "ip": {
+     "type": "string",
+     "description": "Origin IP address."
+    },
+    "startTime": {
+     "type": "string",
+     "description": "Time at which request was known to have begun processing."
+    },
+    "endTime": {
+     "type": "string",
+     "description": "Time at which request was known to end processing."
+    },
+    "latency": {
+     "type": "string",
+     "description": "Latency of the request."
+    },
+    "megaCycles": {
+     "type": "string",
+     "description": "Number of CPU megacycles used to process request.",
+     "format": "int64"
+    },
+    "method": {
+     "type": "string",
+     "description": "Request method, such as `GET`, `HEAD`, `PUT`, `POST`, or `DELETE`."
+    },
+    "resource": {
+     "type": "string",
+     "description": "Contains the path and query portion of the URL that was requested. For example, if the URL was \"http://example.com/app?name=val\", the resource would be \"/app?name=val\". Any trailing fragment (separated by a '#' character) will not be included."
+    },
+    "httpVersion": {
+     "type": "string",
+     "description": "HTTP version of request."
+    },
+    "status": {
+     "type": "integer",
+     "description": "Response status of request.",
+     "format": "int32"
+    },
+    "responseSize": {
+     "type": "string",
+     "description": "Size in bytes sent back to client by request.",
+     "format": "int64"
+    },
+    "referrer": {
+     "type": "string",
+     "description": "Referrer URL of request."
+    },
+    "userAgent": {
+     "type": "string",
+     "description": "User agent used for making request."
+    },
+    "nickname": {
+     "type": "string",
+     "description": "A string that identifies a logged-in user who made this request, or empty if the user is not logged in. Most likely, this is the part of the user's email before the '@' sign. The field value is the same for different requests from the same user, but different users may have a similar name. This information is also available to the application via Users API. This field will be populated starting with App Engine 1.9.21."
+    },
+    "urlMapEntry": {
+     "type": "string",
+     "description": "File or class within URL mapping used for request. Useful for tracking down the source code which was responsible for managing request. Especially for multiply mapped handlers."
+    },
+    "host": {
+     "type": "string",
+     "description": "The Internet host and port number of the resource being requested."
+    },
+    "cost": {
+     "type": "number",
+     "description": "An indication of the relative cost of serving this request.",
+     "format": "double"
+    },
+    "taskQueueName": {
+     "type": "string",
+     "description": "Queue name of the request (for an offline request)."
+    },
+    "taskName": {
+     "type": "string",
+     "description": "Task name of the request (for an offline request)."
+    },
+    "wasLoadingRequest": {
+     "type": "boolean",
+     "description": "Was this request a loading request for this instance?"
+    },
+    "pendingTime": {
+     "type": "string",
+     "description": "Time this request spent in the pending request queue, if it was pending at all."
+    },
+    "instanceIndex": {
+     "type": "integer",
+     "description": "If the instance that processed this request was individually addressable (i.e. belongs to a manually scaled module), this is the index of the instance.",
+     "format": "int32"
+    },
+    "finished": {
+     "type": "boolean",
+     "description": "If true, represents a finished request. Otherwise, the request is active."
+    },
+    "instanceId": {
+     "type": "string",
+     "description": "An opaque identifier for the instance that handled the request.",
+     "format": "byte"
+    },
+    "line": {
+     "type": "array",
+     "description": "List of log lines emitted by the application while serving this request, if requested.",
+     "items": {
+      "$ref": "LogLine"
+     }
+    },
+    "appEngineRelease": {
+     "type": "string",
+     "description": "App Engine release version string."
+    },
+    "traceId": {
+     "type": "string",
+     "description": "Cloud Trace identifier of the trace for this request."
+    },
+    "sourceReference": {
+     "type": "array",
+     "description": "Source code for the application that handled this request. There can be more than one source reference per deployed application if source code is distributed among multiple repositories.",
+     "items": {
+      "$ref": "SourceReference"
+     }
+    }
+   }
+  },
+  "LogLine": {
+   "id": "LogLine",
+   "type": "object",
+   "description": "Application log line emitted while processing a request.",
+   "properties": {
+    "time": {
+     "type": "string",
+     "description": "Time when log entry was made. May be inaccurate."
+    },
+    "severity": {
+     "type": "string",
+     "description": "Severity of log.",
+     "enum": [
+      "DEFAULT",
+      "DEBUG",
+      "INFO",
+      "NOTICE",
+      "WARNING",
+      "ERROR",
+      "CRITICAL",
+      "ALERT",
+      "EMERGENCY"
+     ]
+    },
+    "logMessage": {
+     "type": "string",
+     "description": "App provided log message."
+    },
+    "sourceLocation": {
+     "$ref": "SourceLocation",
+     "description": "Line of code that generated this log message."
+    }
+   }
+  },
+  "SourceLocation": {
+   "id": "SourceLocation",
+   "type": "object",
+   "description": "Specifies a location in a source file.",
+   "properties": {
+    "file": {
+     "type": "string",
+     "description": "Source file name. May or may not be a fully qualified name, depending on the runtime environment."
+    },
+    "line": {
+     "type": "string",
+     "description": "Line within the source file.",
+     "format": "int64"
+    },
+    "functionName": {
+     "type": "string",
+     "description": "Human-readable name of the function or method being invoked, with optional context such as the class or package name, for use in contexts such as the logs viewer where file:line number is less meaningful. This may vary by language, for example: in Java: qual.if.ied.Class.method in Go: dir/package.func in Python: function ..."
+    }
+   }
+  },
+  "SourceReference": {
+   "id": "SourceReference",
+   "type": "object",
+   "description": "A reference to a particular snapshot of the source tree used to build and deploy an application.",
+   "properties": {
+    "repository": {
+     "type": "string",
+     "description": "Optional. A URI string identifying the repository. Example: \"https://github.com/GoogleCloudPlatform/kubernetes.git\""
+    },
+    "revisionId": {
+     "type": "string",
+     "description": "The canonical (and persistent) identifier of the deployed revision. Example (git): \"0035781c50ec7aa23385dc841529ce8a4b70db1b\""
+    }
+   }
+  }
+ }
+}
diff --git a/logging/v2beta1/logging-gen.go b/logging/v2beta1/logging-gen.go
new file mode 100644
index 0000000..2bd0c04
--- /dev/null
+++ b/logging/v2beta1/logging-gen.go
@@ -0,0 +1,304 @@
+// Package logging provides access to the Google Cloud Logging API.
+//
+// See https://cloud.google.com/logging/docs/
+//
+// Usage example:
+//
+//   import "google.golang.org/api/logging/v2beta1"
+//   ...
+//   loggingService, err := logging.New(oauthHttpClient)
+package logging // import "google.golang.org/api/logging/v2beta1"
+
+import (
+	"bytes"
+	"encoding/json"
+	"errors"
+	"fmt"
+	"golang.org/x/net/context"
+	"golang.org/x/net/context/ctxhttp"
+	"google.golang.org/api/googleapi"
+	"google.golang.org/api/internal"
+	"io"
+	"net/http"
+	"net/url"
+	"strconv"
+	"strings"
+)
+
+// Always reference these packages, just in case the auto-generated code
+// below doesn't.
+var _ = bytes.NewBuffer
+var _ = strconv.Itoa
+var _ = fmt.Sprintf
+var _ = json.NewDecoder
+var _ = io.Copy
+var _ = url.Parse
+var _ = googleapi.Version
+var _ = errors.New
+var _ = strings.Replace
+var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
+
+const apiId = "logging:v2beta1"
+const apiName = "logging"
+const apiVersion = "v2beta1"
+const basePath = "https://logging.googleapis.com/"
+
+func New(client *http.Client) (*Service, error) {
+	if client == nil {
+		return nil, errors.New("client is nil")
+	}
+	s := &Service{client: client, BasePath: basePath}
+	return s, nil
+}
+
+type Service struct {
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
+}
+
+func (s *Service) userAgent() string {
+	if s.UserAgent == "" {
+		return googleapi.UserAgent
+	}
+	return googleapi.UserAgent + " " + s.UserAgent
+}
+
+// LogLine: Application log line emitted while processing a request.
+type LogLine struct {
+	// LogMessage: App provided log message.
+	LogMessage string `json:"logMessage,omitempty"`
+
+	// Severity: Severity of log.
+	//
+	// Possible values:
+	//   "DEFAULT"
+	//   "DEBUG"
+	//   "INFO"
+	//   "NOTICE"
+	//   "WARNING"
+	//   "ERROR"
+	//   "CRITICAL"
+	//   "ALERT"
+	//   "EMERGENCY"
+	Severity string `json:"severity,omitempty"`
+
+	// SourceLocation: Line of code that generated this log message.
+	SourceLocation *SourceLocation `json:"sourceLocation,omitempty"`
+
+	// Time: Time when log entry was made. May be inaccurate.
+	Time string `json:"time,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "LogMessage") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *LogLine) MarshalJSON() ([]byte, error) {
+	type noMethod LogLine
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// RequestLog: Complete log information about a single request to an
+// application.
+type RequestLog struct {
+	// AppEngineRelease: App Engine release version string.
+	AppEngineRelease string `json:"appEngineRelease,omitempty"`
+
+	// AppId: Identifies the application that handled this request.
+	AppId string `json:"appId,omitempty"`
+
+	// Cost: An indication of the relative cost of serving this request.
+	Cost float64 `json:"cost,omitempty"`
+
+	// EndTime: Time at which request was known to end processing.
+	EndTime string `json:"endTime,omitempty"`
+
+	// Finished: If true, represents a finished request. Otherwise, the
+	// request is active.
+	Finished bool `json:"finished,omitempty"`
+
+	// Host: The Internet host and port number of the resource being
+	// requested.
+	Host string `json:"host,omitempty"`
+
+	// HttpVersion: HTTP version of request.
+	HttpVersion string `json:"httpVersion,omitempty"`
+
+	// InstanceId: An opaque identifier for the instance that handled the
+	// request.
+	InstanceId string `json:"instanceId,omitempty"`
+
+	// InstanceIndex: If the instance that processed this request was
+	// individually addressable (i.e. belongs to a manually scaled module),
+	// this is the index of the instance.
+	InstanceIndex int64 `json:"instanceIndex,omitempty"`
+
+	// Ip: Origin IP address.
+	Ip string `json:"ip,omitempty"`
+
+	// Latency: Latency of the request.
+	Latency string `json:"latency,omitempty"`
+
+	// Line: List of log lines emitted by the application while serving this
+	// request, if requested.
+	Line []*LogLine `json:"line,omitempty"`
+
+	// MegaCycles: Number of CPU megacycles used to process request.
+	MegaCycles int64 `json:"megaCycles,omitempty,string"`
+
+	// Method: Request method, such as `GET`, `HEAD`, `PUT`, `POST`, or
+	// `DELETE`.
+	Method string `json:"method,omitempty"`
+
+	// ModuleId: Identifies the module of the application that handled this
+	// request.
+	ModuleId string `json:"moduleId,omitempty"`
+
+	// Nickname: A string that identifies a logged-in user who made this
+	// request, or empty if the user is not logged in. Most likely, this is
+	// the part of the user's email before the '@' sign. The field value is
+	// the same for different requests from the same user, but different
+	// users may have a similar name. This information is also available to
+	// the application via Users API. This field will be populated starting
+	// with App Engine 1.9.21.
+	Nickname string `json:"nickname,omitempty"`
+
+	// PendingTime: Time this request spent in the pending request queue, if
+	// it was pending at all.
+	PendingTime string `json:"pendingTime,omitempty"`
+
+	// Referrer: Referrer URL of request.
+	Referrer string `json:"referrer,omitempty"`
+
+	// RequestId: Globally unique identifier for a request, based on request
+	// start time. Request IDs for requests which started later will compare
+	// greater as binary strings than those for requests which started
+	// earlier.
+	RequestId string `json:"requestId,omitempty"`
+
+	// Resource: Contains the path and query portion of the URL that was
+	// requested. For example, if the URL was
+	// "http://example.com/app?name=val", the resource would be
+	// "/app?name=val". Any trailing fragment (separated by a '#' character)
+	// will not be included.
+	Resource string `json:"resource,omitempty"`
+
+	// ResponseSize: Size in bytes sent back to client by request.
+	ResponseSize int64 `json:"responseSize,omitempty,string"`
+
+	// SourceReference: Source code for the application that handled this
+	// request. There can be more than one source reference per deployed
+	// application if source code is distributed among multiple
+	// repositories.
+	SourceReference []*SourceReference `json:"sourceReference,omitempty"`
+
+	// StartTime: Time at which request was known to have begun processing.
+	StartTime string `json:"startTime,omitempty"`
+
+	// Status: Response status of request.
+	Status int64 `json:"status,omitempty"`
+
+	// TaskName: Task name of the request (for an offline request).
+	TaskName string `json:"taskName,omitempty"`
+
+	// TaskQueueName: Queue name of the request (for an offline request).
+	TaskQueueName string `json:"taskQueueName,omitempty"`
+
+	// TraceId: Cloud Trace identifier of the trace for this request.
+	TraceId string `json:"traceId,omitempty"`
+
+	// UrlMapEntry: File or class within URL mapping used for request.
+	// Useful for tracking down the source code which was responsible for
+	// managing request. Especially for multiply mapped handlers.
+	UrlMapEntry string `json:"urlMapEntry,omitempty"`
+
+	// UserAgent: User agent used for making request.
+	UserAgent string `json:"userAgent,omitempty"`
+
+	// VersionId: Version of the application that handled this request.
+	VersionId string `json:"versionId,omitempty"`
+
+	// WasLoadingRequest: Was this request a loading request for this
+	// instance?
+	WasLoadingRequest bool `json:"wasLoadingRequest,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "AppEngineRelease") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *RequestLog) MarshalJSON() ([]byte, error) {
+	type noMethod RequestLog
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// SourceLocation: Specifies a location in a source file.
+type SourceLocation struct {
+	// File: Source file name. May or may not be a fully qualified name,
+	// depending on the runtime environment.
+	File string `json:"file,omitempty"`
+
+	// FunctionName: Human-readable name of the function or method being
+	// invoked, with optional context such as the class or package name, for
+	// use in contexts such as the logs viewer where file:line number is
+	// less meaningful. This may vary by language, for example: in Java:
+	// qual.if.ied.Class.method in Go: dir/package.func in Python: function
+	// ...
+	FunctionName string `json:"functionName,omitempty"`
+
+	// Line: Line within the source file.
+	Line int64 `json:"line,omitempty,string"`
+
+	// 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:"-"`
+}
+
+func (s *SourceLocation) MarshalJSON() ([]byte, error) {
+	type noMethod SourceLocation
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// SourceReference: A reference to a particular snapshot of the source
+// tree used to build and deploy an application.
+type SourceReference struct {
+	// Repository: Optional. A URI string identifying the repository.
+	// Example: "https://github.com/GoogleCloudPlatform/kubernetes.git"
+	Repository string `json:"repository,omitempty"`
+
+	// RevisionId: The canonical (and persistent) identifier of the deployed
+	// revision. Example (git): "0035781c50ec7aa23385dc841529ce8a4b70db1b"
+	RevisionId string `json:"revisionId,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Repository") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *SourceReference) MarshalJSON() ([]byte, error) {
+	type noMethod SourceReference
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
diff --git a/manager/v1beta2/manager-gen.go b/manager/v1beta2/manager-gen.go
index 3ff2c49..a85931f 100644
--- a/manager/v1beta2/manager-gen.go
+++ b/manager/v1beta2/manager-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "manager:v1beta2"
 const apiName = "manager"
diff --git a/mapsengine/exp2/mapsengine-gen.go b/mapsengine/exp2/mapsengine-gen.go
index a732e69..f3c1e23 100644
--- a/mapsengine/exp2/mapsengine-gen.go
+++ b/mapsengine/exp2/mapsengine-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "mapsengine:exp2"
 const apiName = "mapsengine"
diff --git a/mapsengine/v1/mapsengine-gen.go b/mapsengine/v1/mapsengine-gen.go
index 861d053..c5599aa 100644
--- a/mapsengine/v1/mapsengine-gen.go
+++ b/mapsengine/v1/mapsengine-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "mapsengine:v1"
 const apiName = "mapsengine"
diff --git a/mirror/v1/mirror-gen.go b/mirror/v1/mirror-gen.go
index f62dc94..57b074d 100644
--- a/mirror/v1/mirror-gen.go
+++ b/mirror/v1/mirror-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "mirror:v1"
 const apiName = "mirror"
diff --git a/oauth2/v1/oauth2-gen.go b/oauth2/v1/oauth2-gen.go
index 43beb4b..e0c0831 100644
--- a/oauth2/v1/oauth2-gen.go
+++ b/oauth2/v1/oauth2-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "oauth2:v1"
 const apiName = "oauth2"
diff --git a/oauth2/v2/oauth2-gen.go b/oauth2/v2/oauth2-gen.go
index 075ec0c..e9e83da 100644
--- a/oauth2/v2/oauth2-gen.go
+++ b/oauth2/v2/oauth2-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "oauth2:v2"
 const apiName = "oauth2"
diff --git a/pagespeedonline/v1/pagespeedonline-gen.go b/pagespeedonline/v1/pagespeedonline-gen.go
index d6fe81d..b5181d0 100644
--- a/pagespeedonline/v1/pagespeedonline-gen.go
+++ b/pagespeedonline/v1/pagespeedonline-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "pagespeedonline:v1"
 const apiName = "pagespeedonline"
diff --git a/pagespeedonline/v2/pagespeedonline-gen.go b/pagespeedonline/v2/pagespeedonline-gen.go
index 60ef197..f498f72 100644
--- a/pagespeedonline/v2/pagespeedonline-gen.go
+++ b/pagespeedonline/v2/pagespeedonline-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "pagespeedonline:v2"
 const apiName = "pagespeedonline"
diff --git a/partners/v2/partners-gen.go b/partners/v2/partners-gen.go
index d2319ea..14f1530 100644
--- a/partners/v2/partners-gen.go
+++ b/partners/v2/partners-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "partners:v2"
 const apiName = "partners"
diff --git a/playmoviespartner/v1/playmoviespartner-gen.go b/playmoviespartner/v1/playmoviespartner-gen.go
index 4d91a6c..82945dc 100644
--- a/playmoviespartner/v1/playmoviespartner-gen.go
+++ b/playmoviespartner/v1/playmoviespartner-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "playmoviespartner:v1"
 const apiName = "playmoviespartner"
diff --git a/plus/v1/plus-api.json b/plus/v1/plus-api.json
index 3b6f726..b7fe391 100644
--- a/plus/v1/plus-api.json
+++ b/plus/v1/plus-api.json
@@ -1,11 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/EYDzxeZQC81bAZfRVFhODjUBwZ8\"",
+ "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/lgRkloFO1UVq7VPz42VZJlIBWaI\"",
  "discoveryVersion": "v1",
  "id": "plus:v1",
  "name": "plus",
  "version": "v1",
- "revision": "20150805",
+ "revision": "20151014",
  "title": "Google+ API",
  "description": "The Google+ API enables developers to build on top of the Google+ platform.",
  "ownerDomain": "google.com",
@@ -119,6 +119,22 @@
      "type": "object",
      "description": "The person who performed this activity.",
      "properties": {
+      "clientSpecificActorInfo": {
+       "type": "object",
+       "description": "Actor info specific to particular clients.",
+       "properties": {
+        "youtubeActorInfo": {
+         "type": "object",
+         "description": "Actor info specific to YouTube clients.",
+         "properties": {
+          "channelId": {
+           "type": "string",
+           "description": "ID of the YouTube channel owned by the Actor."
+          }
+         }
+        }
+       }
+      },
       "displayName": {
        "type": "string",
        "description": "The name of the actor, suitable for display."
@@ -208,6 +224,22 @@
        "type": "object",
        "description": "If this activity's object is itself another activity, such as when a person reshares an activity, this property specifies the original activity's actor.",
        "properties": {
+        "clientSpecificActorInfo": {
+         "type": "object",
+         "description": "Actor info specific to particular clients.",
+         "properties": {
+          "youtubeActorInfo": {
+           "type": "object",
+           "description": "Actor info specific to YouTube clients.",
+           "properties": {
+            "channelId": {
+             "type": "string",
+             "description": "ID of the YouTube channel owned by the Actor."
+            }
+           }
+          }
+         }
+        },
         "displayName": {
          "type": "string",
          "description": "The original actor's name, which is suitable for display."
@@ -542,6 +574,22 @@
      "type": "object",
      "description": "The person who posted this comment.",
      "properties": {
+      "clientSpecificActorInfo": {
+       "type": "object",
+       "description": "Actor info specific to particular clients.",
+       "properties": {
+        "youtubeActorInfo": {
+         "type": "object",
+         "description": "Actor info specific to YouTube clients.",
+         "properties": {
+          "channelId": {
+           "type": "string",
+           "description": "ID of the YouTube channel owned by the Actor."
+          }
+         }
+        }
+       }
+      },
       "displayName": {
        "type": "string",
        "description": "The name of this actor, suitable for display."
diff --git a/plus/v1/plus-gen.go b/plus/v1/plus-gen.go
index 5c190b4..ae03c40 100644
--- a/plus/v1/plus-gen.go
+++ b/plus/v1/plus-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "plus:v1"
 const apiName = "plus"
@@ -248,6 +250,9 @@
 
 // ActivityActor: The person who performed this activity.
 type ActivityActor struct {
+	// ClientSpecificActorInfo: Actor info specific to particular clients.
+	ClientSpecificActorInfo *ActivityActorClientSpecificActorInfo `json:"clientSpecificActorInfo,omitempty"`
+
 	// DisplayName: The name of the actor, suitable for display.
 	DisplayName string `json:"displayName,omitempty"`
 
@@ -266,7 +271,29 @@
 	// Verification: Verification status of actor.
 	Verification *ActivityActorVerification `json:"verification,omitempty"`
 
-	// ForceSendFields is a list of field names (e.g. "DisplayName") to
+	// ForceSendFields is a list of field names (e.g.
+	// "ClientSpecificActorInfo") to unconditionally include in API
+	// requests. By default, fields with empty values are omitted from API
+	// requests. However, any non-pointer, non-interface field appearing in
+	// ForceSendFields will be sent to the server regardless of whether the
+	// field is empty or not. This may be used to include empty fields in
+	// Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *ActivityActor) MarshalJSON() ([]byte, error) {
+	type noMethod ActivityActor
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// ActivityActorClientSpecificActorInfo: Actor info specific to
+// particular clients.
+type ActivityActorClientSpecificActorInfo struct {
+	// YoutubeActorInfo: Actor info specific to YouTube clients.
+	YoutubeActorInfo *ActivityActorClientSpecificActorInfoYoutubeActorInfo `json:"youtubeActorInfo,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "YoutubeActorInfo") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
 	// non-interface field appearing in ForceSendFields will be sent to the
@@ -275,8 +302,29 @@
 	ForceSendFields []string `json:"-"`
 }
 
-func (s *ActivityActor) MarshalJSON() ([]byte, error) {
-	type noMethod ActivityActor
+func (s *ActivityActorClientSpecificActorInfo) MarshalJSON() ([]byte, error) {
+	type noMethod ActivityActorClientSpecificActorInfo
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// ActivityActorClientSpecificActorInfoYoutubeActorInfo: Actor info
+// specific to YouTube clients.
+type ActivityActorClientSpecificActorInfoYoutubeActorInfo struct {
+	// ChannelId: ID of the YouTube channel owned by the Actor.
+	ChannelId string `json:"channelId,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ChannelId") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *ActivityActorClientSpecificActorInfoYoutubeActorInfo) MarshalJSON() ([]byte, error) {
+	type noMethod ActivityActorClientSpecificActorInfoYoutubeActorInfo
 	raw := noMethod(*s)
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
@@ -406,6 +454,9 @@
 // activity, such as when a person reshares an activity, this property
 // specifies the original activity's actor.
 type ActivityObjectActor struct {
+	// ClientSpecificActorInfo: Actor info specific to particular clients.
+	ClientSpecificActorInfo *ActivityObjectActorClientSpecificActorInfo `json:"clientSpecificActorInfo,omitempty"`
+
 	// DisplayName: The original actor's name, which is suitable for
 	// display.
 	DisplayName string `json:"displayName,omitempty"`
@@ -422,7 +473,29 @@
 	// Verification: Verification status of actor.
 	Verification *ActivityObjectActorVerification `json:"verification,omitempty"`
 
-	// ForceSendFields is a list of field names (e.g. "DisplayName") to
+	// ForceSendFields is a list of field names (e.g.
+	// "ClientSpecificActorInfo") to unconditionally include in API
+	// requests. By default, fields with empty values are omitted from API
+	// requests. However, any non-pointer, non-interface field appearing in
+	// ForceSendFields will be sent to the server regardless of whether the
+	// field is empty or not. This may be used to include empty fields in
+	// Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *ActivityObjectActor) MarshalJSON() ([]byte, error) {
+	type noMethod ActivityObjectActor
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// ActivityObjectActorClientSpecificActorInfo: Actor info specific to
+// particular clients.
+type ActivityObjectActorClientSpecificActorInfo struct {
+	// YoutubeActorInfo: Actor info specific to YouTube clients.
+	YoutubeActorInfo *ActivityObjectActorClientSpecificActorInfoYoutubeActorInfo `json:"youtubeActorInfo,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "YoutubeActorInfo") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
 	// non-interface field appearing in ForceSendFields will be sent to the
@@ -431,8 +504,29 @@
 	ForceSendFields []string `json:"-"`
 }
 
-func (s *ActivityObjectActor) MarshalJSON() ([]byte, error) {
-	type noMethod ActivityObjectActor
+func (s *ActivityObjectActorClientSpecificActorInfo) MarshalJSON() ([]byte, error) {
+	type noMethod ActivityObjectActorClientSpecificActorInfo
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// ActivityObjectActorClientSpecificActorInfoYoutubeActorInfo: Actor
+// info specific to YouTube clients.
+type ActivityObjectActorClientSpecificActorInfoYoutubeActorInfo struct {
+	// ChannelId: ID of the YouTube channel owned by the Actor.
+	ChannelId string `json:"channelId,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ChannelId") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *ActivityObjectActorClientSpecificActorInfoYoutubeActorInfo) MarshalJSON() ([]byte, error) {
+	type noMethod ActivityObjectActorClientSpecificActorInfoYoutubeActorInfo
 	raw := noMethod(*s)
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
@@ -871,6 +965,9 @@
 
 // CommentActor: The person who posted this comment.
 type CommentActor struct {
+	// ClientSpecificActorInfo: Actor info specific to particular clients.
+	ClientSpecificActorInfo *CommentActorClientSpecificActorInfo `json:"clientSpecificActorInfo,omitempty"`
+
 	// DisplayName: The name of this actor, suitable for display.
 	DisplayName string `json:"displayName,omitempty"`
 
@@ -886,7 +983,29 @@
 	// Verification: Verification status of actor.
 	Verification *CommentActorVerification `json:"verification,omitempty"`
 
-	// ForceSendFields is a list of field names (e.g. "DisplayName") to
+	// ForceSendFields is a list of field names (e.g.
+	// "ClientSpecificActorInfo") to unconditionally include in API
+	// requests. By default, fields with empty values are omitted from API
+	// requests. However, any non-pointer, non-interface field appearing in
+	// ForceSendFields will be sent to the server regardless of whether the
+	// field is empty or not. This may be used to include empty fields in
+	// Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *CommentActor) MarshalJSON() ([]byte, error) {
+	type noMethod CommentActor
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// CommentActorClientSpecificActorInfo: Actor info specific to
+// particular clients.
+type CommentActorClientSpecificActorInfo struct {
+	// YoutubeActorInfo: Actor info specific to YouTube clients.
+	YoutubeActorInfo *CommentActorClientSpecificActorInfoYoutubeActorInfo `json:"youtubeActorInfo,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "YoutubeActorInfo") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
 	// non-interface field appearing in ForceSendFields will be sent to the
@@ -895,8 +1014,29 @@
 	ForceSendFields []string `json:"-"`
 }
 
-func (s *CommentActor) MarshalJSON() ([]byte, error) {
-	type noMethod CommentActor
+func (s *CommentActorClientSpecificActorInfo) MarshalJSON() ([]byte, error) {
+	type noMethod CommentActorClientSpecificActorInfo
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// CommentActorClientSpecificActorInfoYoutubeActorInfo: Actor info
+// specific to YouTube clients.
+type CommentActorClientSpecificActorInfoYoutubeActorInfo struct {
+	// ChannelId: ID of the YouTube channel owned by the Actor.
+	ChannelId string `json:"channelId,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ChannelId") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *CommentActorClientSpecificActorInfoYoutubeActorInfo) MarshalJSON() ([]byte, error) {
+	type noMethod CommentActorClientSpecificActorInfoYoutubeActorInfo
 	raw := noMethod(*s)
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
diff --git a/plusdomains/v1/plusdomains-api.json b/plusdomains/v1/plusdomains-api.json
index c859ded..61e134c 100644
--- a/plusdomains/v1/plusdomains-api.json
+++ b/plusdomains/v1/plusdomains-api.json
@@ -1,11 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/fYkZdznRstWgwJ0BIA_7B934-2Y\"",
+ "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/JiNeLDZwZ4CDisO5kxxp-UNdJ28\"",
  "discoveryVersion": "v1",
  "id": "plusDomains:v1",
  "name": "plusDomains",
  "version": "v1",
- "revision": "20150805",
+ "revision": "20151014",
  "title": "Google+ Domains API",
  "description": "The Google+ API enables developers to build on top of the Google+ platform.",
  "ownerDomain": "google.com",
@@ -141,6 +141,22 @@
      "type": "object",
      "description": "The person who performed this activity.",
      "properties": {
+      "clientSpecificActorInfo": {
+       "type": "object",
+       "description": "Actor info specific to particular clients.",
+       "properties": {
+        "youtubeActorInfo": {
+         "type": "object",
+         "description": "Actor info specific to YouTube clients.",
+         "properties": {
+          "channelId": {
+           "type": "string",
+           "description": "ID of the YouTube channel owned by the Actor."
+          }
+         }
+        }
+       }
+      },
       "displayName": {
        "type": "string",
        "description": "The name of the actor, suitable for display."
@@ -230,6 +246,22 @@
        "type": "object",
        "description": "If this activity's object is itself another activity, such as when a person reshares an activity, this property specifies the original activity's actor.",
        "properties": {
+        "clientSpecificActorInfo": {
+         "type": "object",
+         "description": "Actor info specific to particular clients.",
+         "properties": {
+          "youtubeActorInfo": {
+           "type": "object",
+           "description": "Actor info specific to YouTube clients.",
+           "properties": {
+            "channelId": {
+             "type": "string",
+             "description": "ID of the YouTube channel owned by the Actor."
+            }
+           }
+          }
+         }
+        },
         "displayName": {
          "type": "string",
          "description": "The original actor's name, which is suitable for display."
@@ -747,6 +779,22 @@
      "type": "object",
      "description": "The person who posted this comment.",
      "properties": {
+      "clientSpecificActorInfo": {
+       "type": "object",
+       "description": "Actor info specific to particular clients.",
+       "properties": {
+        "youtubeActorInfo": {
+         "type": "object",
+         "description": "Actor info specific to YouTube clients.",
+         "properties": {
+          "channelId": {
+           "type": "string",
+           "description": "ID of the YouTube channel owned by the Actor."
+          }
+         }
+        }
+       }
+      },
       "displayName": {
        "type": "string",
        "description": "The name of this actor, suitable for display."
diff --git a/plusdomains/v1/plusdomains-gen.go b/plusdomains/v1/plusdomains-gen.go
index 4f29473..e19859c 100644
--- a/plusdomains/v1/plusdomains-gen.go
+++ b/plusdomains/v1/plusdomains-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "plusDomains:v1"
 const apiName = "plusDomains"
@@ -295,6 +297,9 @@
 
 // ActivityActor: The person who performed this activity.
 type ActivityActor struct {
+	// ClientSpecificActorInfo: Actor info specific to particular clients.
+	ClientSpecificActorInfo *ActivityActorClientSpecificActorInfo `json:"clientSpecificActorInfo,omitempty"`
+
 	// DisplayName: The name of the actor, suitable for display.
 	DisplayName string `json:"displayName,omitempty"`
 
@@ -313,7 +318,29 @@
 	// Verification: Verification status of actor.
 	Verification *ActivityActorVerification `json:"verification,omitempty"`
 
-	// ForceSendFields is a list of field names (e.g. "DisplayName") to
+	// ForceSendFields is a list of field names (e.g.
+	// "ClientSpecificActorInfo") to unconditionally include in API
+	// requests. By default, fields with empty values are omitted from API
+	// requests. However, any non-pointer, non-interface field appearing in
+	// ForceSendFields will be sent to the server regardless of whether the
+	// field is empty or not. This may be used to include empty fields in
+	// Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *ActivityActor) MarshalJSON() ([]byte, error) {
+	type noMethod ActivityActor
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// ActivityActorClientSpecificActorInfo: Actor info specific to
+// particular clients.
+type ActivityActorClientSpecificActorInfo struct {
+	// YoutubeActorInfo: Actor info specific to YouTube clients.
+	YoutubeActorInfo *ActivityActorClientSpecificActorInfoYoutubeActorInfo `json:"youtubeActorInfo,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "YoutubeActorInfo") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
 	// non-interface field appearing in ForceSendFields will be sent to the
@@ -322,8 +349,29 @@
 	ForceSendFields []string `json:"-"`
 }
 
-func (s *ActivityActor) MarshalJSON() ([]byte, error) {
-	type noMethod ActivityActor
+func (s *ActivityActorClientSpecificActorInfo) MarshalJSON() ([]byte, error) {
+	type noMethod ActivityActorClientSpecificActorInfo
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// ActivityActorClientSpecificActorInfoYoutubeActorInfo: Actor info
+// specific to YouTube clients.
+type ActivityActorClientSpecificActorInfoYoutubeActorInfo struct {
+	// ChannelId: ID of the YouTube channel owned by the Actor.
+	ChannelId string `json:"channelId,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ChannelId") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *ActivityActorClientSpecificActorInfoYoutubeActorInfo) MarshalJSON() ([]byte, error) {
+	type noMethod ActivityActorClientSpecificActorInfoYoutubeActorInfo
 	raw := noMethod(*s)
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
@@ -456,6 +504,9 @@
 // activity, such as when a person reshares an activity, this property
 // specifies the original activity's actor.
 type ActivityObjectActor struct {
+	// ClientSpecificActorInfo: Actor info specific to particular clients.
+	ClientSpecificActorInfo *ActivityObjectActorClientSpecificActorInfo `json:"clientSpecificActorInfo,omitempty"`
+
 	// DisplayName: The original actor's name, which is suitable for
 	// display.
 	DisplayName string `json:"displayName,omitempty"`
@@ -472,7 +523,29 @@
 	// Verification: Verification status of actor.
 	Verification *ActivityObjectActorVerification `json:"verification,omitempty"`
 
-	// ForceSendFields is a list of field names (e.g. "DisplayName") to
+	// ForceSendFields is a list of field names (e.g.
+	// "ClientSpecificActorInfo") to unconditionally include in API
+	// requests. By default, fields with empty values are omitted from API
+	// requests. However, any non-pointer, non-interface field appearing in
+	// ForceSendFields will be sent to the server regardless of whether the
+	// field is empty or not. This may be used to include empty fields in
+	// Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *ActivityObjectActor) MarshalJSON() ([]byte, error) {
+	type noMethod ActivityObjectActor
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// ActivityObjectActorClientSpecificActorInfo: Actor info specific to
+// particular clients.
+type ActivityObjectActorClientSpecificActorInfo struct {
+	// YoutubeActorInfo: Actor info specific to YouTube clients.
+	YoutubeActorInfo *ActivityObjectActorClientSpecificActorInfoYoutubeActorInfo `json:"youtubeActorInfo,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "YoutubeActorInfo") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
 	// non-interface field appearing in ForceSendFields will be sent to the
@@ -481,8 +554,29 @@
 	ForceSendFields []string `json:"-"`
 }
 
-func (s *ActivityObjectActor) MarshalJSON() ([]byte, error) {
-	type noMethod ActivityObjectActor
+func (s *ActivityObjectActorClientSpecificActorInfo) MarshalJSON() ([]byte, error) {
+	type noMethod ActivityObjectActorClientSpecificActorInfo
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// ActivityObjectActorClientSpecificActorInfoYoutubeActorInfo: Actor
+// info specific to YouTube clients.
+type ActivityObjectActorClientSpecificActorInfoYoutubeActorInfo struct {
+	// ChannelId: ID of the YouTube channel owned by the Actor.
+	ChannelId string `json:"channelId,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ChannelId") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *ActivityObjectActorClientSpecificActorInfoYoutubeActorInfo) MarshalJSON() ([]byte, error) {
+	type noMethod ActivityObjectActorClientSpecificActorInfoYoutubeActorInfo
 	raw := noMethod(*s)
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
@@ -1165,6 +1259,9 @@
 
 // CommentActor: The person who posted this comment.
 type CommentActor struct {
+	// ClientSpecificActorInfo: Actor info specific to particular clients.
+	ClientSpecificActorInfo *CommentActorClientSpecificActorInfo `json:"clientSpecificActorInfo,omitempty"`
+
 	// DisplayName: The name of this actor, suitable for display.
 	DisplayName string `json:"displayName,omitempty"`
 
@@ -1180,7 +1277,29 @@
 	// Verification: Verification status of actor.
 	Verification *CommentActorVerification `json:"verification,omitempty"`
 
-	// ForceSendFields is a list of field names (e.g. "DisplayName") to
+	// ForceSendFields is a list of field names (e.g.
+	// "ClientSpecificActorInfo") to unconditionally include in API
+	// requests. By default, fields with empty values are omitted from API
+	// requests. However, any non-pointer, non-interface field appearing in
+	// ForceSendFields will be sent to the server regardless of whether the
+	// field is empty or not. This may be used to include empty fields in
+	// Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *CommentActor) MarshalJSON() ([]byte, error) {
+	type noMethod CommentActor
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// CommentActorClientSpecificActorInfo: Actor info specific to
+// particular clients.
+type CommentActorClientSpecificActorInfo struct {
+	// YoutubeActorInfo: Actor info specific to YouTube clients.
+	YoutubeActorInfo *CommentActorClientSpecificActorInfoYoutubeActorInfo `json:"youtubeActorInfo,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "YoutubeActorInfo") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
 	// non-interface field appearing in ForceSendFields will be sent to the
@@ -1189,8 +1308,29 @@
 	ForceSendFields []string `json:"-"`
 }
 
-func (s *CommentActor) MarshalJSON() ([]byte, error) {
-	type noMethod CommentActor
+func (s *CommentActorClientSpecificActorInfo) MarshalJSON() ([]byte, error) {
+	type noMethod CommentActorClientSpecificActorInfo
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// CommentActorClientSpecificActorInfoYoutubeActorInfo: Actor info
+// specific to YouTube clients.
+type CommentActorClientSpecificActorInfoYoutubeActorInfo struct {
+	// ChannelId: ID of the YouTube channel owned by the Actor.
+	ChannelId string `json:"channelId,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ChannelId") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *CommentActorClientSpecificActorInfoYoutubeActorInfo) MarshalJSON() ([]byte, error) {
+	type noMethod CommentActorClientSpecificActorInfoYoutubeActorInfo
 	raw := noMethod(*s)
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
diff --git a/prediction/v1.2/prediction-gen.go b/prediction/v1.2/prediction-gen.go
index 59df1d9..13c1bae 100644
--- a/prediction/v1.2/prediction-gen.go
+++ b/prediction/v1.2/prediction-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "prediction:v1.2"
 const apiName = "prediction"
diff --git a/prediction/v1.3/prediction-gen.go b/prediction/v1.3/prediction-gen.go
index c4c17c1..8e3353e 100644
--- a/prediction/v1.3/prediction-gen.go
+++ b/prediction/v1.3/prediction-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "prediction:v1.3"
 const apiName = "prediction"
diff --git a/prediction/v1.4/prediction-gen.go b/prediction/v1.4/prediction-gen.go
index 5a36b99..fefad87 100644
--- a/prediction/v1.4/prediction-gen.go
+++ b/prediction/v1.4/prediction-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "prediction:v1.4"
 const apiName = "prediction"
diff --git a/prediction/v1.5/prediction-gen.go b/prediction/v1.5/prediction-gen.go
index fb3bad2..24148d9 100644
--- a/prediction/v1.5/prediction-gen.go
+++ b/prediction/v1.5/prediction-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "prediction:v1.5"
 const apiName = "prediction"
diff --git a/prediction/v1.6/prediction-gen.go b/prediction/v1.6/prediction-gen.go
index cd7667f..7bbf67f 100644
--- a/prediction/v1.6/prediction-gen.go
+++ b/prediction/v1.6/prediction-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "prediction:v1.6"
 const apiName = "prediction"
diff --git a/proximitybeacon/v1beta1/proximitybeacon-gen.go b/proximitybeacon/v1beta1/proximitybeacon-gen.go
index 3d0250f..331b1eb 100644
--- a/proximitybeacon/v1beta1/proximitybeacon-gen.go
+++ b/proximitybeacon/v1beta1/proximitybeacon-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "proximitybeacon:v1beta1"
 const apiName = "proximitybeacon"
diff --git a/pubsub/v1/pubsub-api.json b/pubsub/v1/pubsub-api.json
index 25782de..9ad14a7 100644
--- a/pubsub/v1/pubsub-api.json
+++ b/pubsub/v1/pubsub-api.json
@@ -1,11 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/ybL1OQpi_Jh0iWLTLn48fEeuPSU\"",
+ "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/5PwJv4HxhbjrzfsQfToP7wx4-Xk\"",
  "discoveryVersion": "v1",
  "id": "pubsub:v1",
  "name": "pubsub",
  "version": "v1",
- "revision": "20150427",
+ "revision": "20150526",
  "title": "Google Cloud Pub/Sub API",
  "description": "Provides reliable, many-to-many, asynchronous messaging between applications.",
  "ownerDomain": "google.com",
@@ -120,23 +120,23 @@
    "properties": {
     "policy": {
      "$ref": "Policy",
-     "description": "REQUIRED: The complete policy to be applied to the 'resource'. The size of the policy is limited to a few 10s of KB. An empty policy is in general a valid policy but certain services (like Projects) might reject them."
+     "description": "REQUIRED: The complete policy to be applied to the `resource`. The size of the policy is limited to a few 10s of KB. An empty policy is a valid policy but certain Cloud Platform services (such as Projects) might reject them."
     }
    }
   },
   "Policy": {
    "id": "Policy",
    "type": "object",
-   "description": "# Overview The `Policy` defines an access control policy language. It is used to define policies that are attached to resources like files, folders, VMs, etc. # Policy structure A `Policy` consists of a list of bindings. A `Binding` binds a set of members to a role, where the members include user accounts, user groups, user domains, and service accounts. A 'role' is a named set of permissions, defined by IAM. The definition of a role is outside the policy. A permission check first determines the roles that include the specified permission, and then determines if the principal specified is a member of a binding to at least one of these roles. The membership check is recursive when a group is bound to a role. Policy examples: ``` { \"bindings\": [ { \"role\": \"roles/owner\", \"members\": [ \"user:mike@example.com\", \"group:admins@example.com\", \"domain:google.com\", \"serviceAccount:frontend@example.iam.gserviceaccounts.com\"] }, { \"role\": \"roles/viewer\", \"members\": [\"user:sean@example.com\"] } ] } ```",
+   "description": "Defines an Identity and Access Management (IAM) policy. It is used to specify access control policies for Cloud Platform resources. A `Policy` consists of a list of `bindings`. A `Binding` binds a list of `members` to a `role`, where the members can be user accounts, Google groups, Google domains, and service accounts. A `role` is a named list of permissions defined by IAM. **Example** { \"bindings\": [ { \"role\": \"roles/owner\", \"members\": [ \"user:mike@example.com\", \"group:admins@example.com\", \"domain:google.com\", \"serviceAccount:my-other-app@appspot.gserviceaccount.com\"] }, { \"role\": \"roles/viewer\", \"members\": [\"user:sean@example.com\"] } ] } For a description of IAM and its features, see the [IAM developer's guide](https://cloud.google.com/iam).",
    "properties": {
     "version": {
      "type": "integer",
-     "description": "The policy language version. The version of the policy is represented by the etag. The default version is 0.",
+     "description": "Version of the `Policy`. The default version is 0.",
      "format": "int32"
     },
     "bindings": {
      "type": "array",
-     "description": "It is an error to specify multiple bindings for the same role. It is an error to specify a binding with no members.",
+     "description": "Associates a list of `members` to a `role`. Multiple `bindings` must not be specified for the same `role`. `bindings` with no members will result in an error.",
      "items": {
       "$ref": "Binding"
      }
@@ -151,15 +151,15 @@
   "Binding": {
    "id": "Binding",
    "type": "object",
-   "description": "Associates members with roles. See below for allowed formats of members.",
+   "description": "Associates `members` with a `role`.",
    "properties": {
     "role": {
      "type": "string",
-     "description": "The name of the role to which the members should be bound. Examples: \"roles/viewer\", \"roles/editor\", \"roles/owner\". Required"
+     "description": "Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`. Required"
     },
     "members": {
      "type": "array",
-     "description": "Format of member entries: 1. allUsers Matches any requesting principal (users, service accounts or anonymous). 2. allAuthenticatedUsers Matches any requesting authenticated principal (users or service accounts). 3. user:{emailid} A google user account using an email address. For example alice@gmail.com, joe@example.com 4. serviceAccount:{emailid} An service account email. 5. group:{emailid} A google group with an email address. For example auth-ti-cloud@google.com 6. domain:{domain} A Google Apps domain name. For example google.com, example.com",
+     "description": "Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following formats: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@gmail.com` or `joe@example.com`. * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `domain:{domain}`: A Google Apps domain name that represents all the users of that domain. For example, `google.com` or `example.com`.",
      "items": {
       "type": "string"
      }
@@ -173,7 +173,7 @@
    "properties": {
     "permissions": {
      "type": "array",
-     "description": "The set of permissions to check for the 'resource'. Permissions with wildcards (such as '*' or 'storage.*') are not allowed.",
+     "description": "The set of permissions to check for the `resource`. Permissions with wildcards (such as '*' or 'storage.*') are not allowed.",
      "items": {
       "type": "string"
      }
@@ -238,14 +238,14 @@
     },
     "messageId": {
      "type": "string",
-     "description": "ID of this message assigned by the server at publication time. 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 a publisher in a Publish call."
+     "description": "ID of this message assigned by the server at publication time. 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 a publisher in a `Publish` call."
     }
    }
   },
   "PublishResponse": {
    "id": "PublishResponse",
    "type": "object",
-   "description": "Response for the Publish method.",
+   "description": "Response for the `Publish` method.",
    "properties": {
     "messageIds": {
      "type": "array",
@@ -259,7 +259,7 @@
   "ListTopicsResponse": {
    "id": "ListTopicsResponse",
    "type": "object",
-   "description": "Response for the ListTopics method.",
+   "description": "Response for the `ListTopics` method.",
    "properties": {
     "topics": {
      "type": "array",
@@ -270,14 +270,14 @@
     },
     "nextPageToken": {
      "type": "string",
-     "description": "If not empty, indicates that there may be more topics that match the request; this value should be passed in a new ListTopicsRequest."
+     "description": "If not empty, indicates that there may be more topics that match the request; this value should be passed in a new `ListTopicsRequest`."
     }
    }
   },
   "ListTopicSubscriptionsResponse": {
    "id": "ListTopicSubscriptionsResponse",
    "type": "object",
-   "description": "Response for the ListTopicSubscriptions method.",
+   "description": "Response for the `ListTopicSubscriptions` method.",
    "properties": {
     "subscriptions": {
      "type": "array",
@@ -288,7 +288,7 @@
     },
     "nextPageToken": {
      "type": "string",
-     "description": "If not empty, indicates that there may be more subscriptions that match the request; this value should be passed in a new ListTopicSubscriptionsRequest to get more subscriptions."
+     "description": "If not empty, indicates that there may be more subscriptions that match the request; this value should be passed in a new `ListTopicSubscriptionsRequest` to get more subscriptions."
     }
    }
   },
@@ -312,11 +312,11 @@
     },
     "pushConfig": {
      "$ref": "PushConfig",
-     "description": "If push delivery is used with this subscription, this field is used to configure it. An empty pushConfig signifies that the subscriber will pull and ack messages using API methods."
+     "description": "If push delivery is used with this subscription, this field is used to configure it. An empty `pushConfig` signifies that the subscriber will pull and ack messages using API methods."
     },
     "ackDeadlineSeconds": {
      "type": "integer",
-     "description": "This value is the maximum time after a subscriber receives a message before the subscriber should acknowledge the message. After message delivery but before the ack deadline expires and before the message is acknowledged, it is an outstanding message and will not be delivered again during that time (on a best-effort basis). For pull delivery this value is used as the initial value for the ack deadline. To override this value for a given message, call ModifyAckDeadline with the corresponding ack_id. For push delivery, this value is also used to set the request timeout for the call to the push endpoint. If the subscriber never acknowledges the message, the Pub/Sub system will eventually redeliver the message. If this parameter is not set, the default value of 10 seconds is used.",
+     "description": "This value is the maximum time after a subscriber receives a message before the subscriber should acknowledge the message. After message delivery but before the ack deadline expires and before the message is acknowledged, it is an outstanding message and will not be delivered again during that time (on a best-effort basis). For pull delivery this value is used as the initial value for the ack deadline. To override this value for a given message, call `ModifyAckDeadline` with the corresponding `ack_id`. For push delivery, this value is also used to set the request timeout for the call to the push endpoint. If the subscriber never acknowledges the message, the Pub/Sub system will eventually redeliver the message. If this parameter is not set, the default value of 10 seconds is used.",
      "format": "int32"
     }
    }
@@ -332,7 +332,7 @@
     },
     "attributes": {
      "type": "object",
-     "description": "Endpoint configuration attributes. Every endpoint has a set of API supported attributes that can be used to control different aspects of the message delivery. The currently supported attribute is `x-goog-version`, which you can use to change the format of the push message. This attribute indicates the version of the data expected by the endpoint. This controls the shape of the envelope (i.e. its fields and metadata). The endpoint version is based on the version of the Pub/Sub API. If not present during the CreateSubscription call, it will default to the version of the API used to make such call. If not present during a ModifyPushConfig call, its value will not be changed. GetSubscription calls will always return a valid version, even if the subscription was created without this attribute. The possible values for this attribute are: * `v1beta1`: uses the push format defined in the v1beta1 Pub/Sub API. * `v1` or `v1beta2`: uses the push format defined in the v1 Pub/Sub API.",
+     "description": "Endpoint configuration attributes. Every endpoint has a set of API supported attributes that can be used to control different aspects of the message delivery. The currently supported attribute is `x-goog-version`, which you can use to change the format of the push message. This attribute indicates the version of the data expected by the endpoint. This controls the shape of the envelope (i.e. its fields and metadata). The endpoint version is based on the version of the Pub/Sub API. If not present during the `CreateSubscription` call, it will default to the version of the API used to make such call. If not present during a `ModifyPushConfig` call, its value will not be changed. `GetSubscription` calls will always return a valid version, even if the subscription was created without this attribute. The possible values for this attribute are: * `v1beta1`: uses the push format defined in the v1beta1 Pub/Sub API. * `v1` or `v1beta2`: uses the push format defined in the v1 Pub/Sub API.",
      "additionalProperties": {
       "type": "string"
      }
@@ -342,7 +342,7 @@
   "ListSubscriptionsResponse": {
    "id": "ListSubscriptionsResponse",
    "type": "object",
-   "description": "Response for the ListSubscriptions method.",
+   "description": "Response for the `ListSubscriptions` method.",
    "properties": {
     "subscriptions": {
      "type": "array",
@@ -353,7 +353,7 @@
     },
     "nextPageToken": {
      "type": "string",
-     "description": "If not empty, indicates that there may be more subscriptions that match the request; this value should be passed in a new ListSubscriptionsRequest to get more subscriptions."
+     "description": "If not empty, indicates that there may be more subscriptions that match the request; this value should be passed in a new `ListSubscriptionsRequest` to get more subscriptions."
     }
    }
   },
@@ -371,7 +371,7 @@
     },
     "ackDeadlineSeconds": {
      "type": "integer",
-     "description": "The new ack deadline with respect to the time this request was sent to the Pub/Sub system. Must be \u003e= 0. For example, if the value is 10, the new ack deadline will expire 10 seconds after the ModifyAckDeadline call was made. Specifying zero may immediately make the message available for another pull request.",
+     "description": "The new ack deadline with respect to the time this request was sent to the Pub/Sub system. Must be \u003e= 0. For example, if the value is 10, the new ack deadline will expire 10 seconds after the `ModifyAckDeadline` call was made. Specifying zero may immediately make the message available for another pull request.",
      "format": "int32"
     }
    }
@@ -383,7 +383,7 @@
    "properties": {
     "ackIds": {
      "type": "array",
-     "description": "The acknowledgment ID for the messages being acknowledged that was returned by the Pub/Sub system in the Pull response. Must not be empty.",
+     "description": "The acknowledgment ID for the messages being acknowledged that was returned by the Pub/Sub system in the `Pull` response. Must not be empty.",
      "items": {
       "type": "string"
      }
@@ -393,11 +393,11 @@
   "PullRequest": {
    "id": "PullRequest",
    "type": "object",
-   "description": "Request for the Pull method.",
+   "description": "Request for the `Pull` method.",
    "properties": {
     "returnImmediately": {
      "type": "boolean",
-     "description": "If this is specified as true the system will respond immediately even if it is not able to return a message in the Pull response. Otherwise the system is allowed to wait until at least one message is available rather than returning no messages. The client may cancel the request if it does not wish to wait any longer for the response."
+     "description": "If this is specified as true the system will respond immediately even if it is not able to return a message in the `Pull` response. Otherwise the system is allowed to wait until at least one message is available rather than returning no messages. The client may cancel the request if it does not wish to wait any longer for the response."
     },
     "maxMessages": {
      "type": "integer",
@@ -409,11 +409,11 @@
   "PullResponse": {
    "id": "PullResponse",
    "type": "object",
-   "description": "Response for the Pull method.",
+   "description": "Response for the `Pull` method.",
    "properties": {
     "receivedMessages": {
      "type": "array",
-     "description": "Received Pub/Sub messages. The Pub/Sub system will return zero messages if there are no more available in the backlog. The Pub/Sub system may return fewer than the maxMessages requested even if there are more messages available in the backlog.",
+     "description": "Received Pub/Sub messages. The Pub/Sub system will return zero messages if there are no more available in the backlog. The Pub/Sub system may return fewer than the `maxMessages` requested even if there are more messages available in the backlog.",
      "items": {
       "$ref": "ReceivedMessage"
      }
@@ -442,7 +442,7 @@
    "properties": {
     "pushConfig": {
      "$ref": "PushConfig",
-     "description": "The push configuration for future deliveries. An empty pushConfig indicates that the Pub/Sub system should stop pushing messages from the given subscription and allow messages to be pulled and acknowledged - effectively pausing the subscription if Pull is not called."
+     "description": "The push configuration for future deliveries. An empty `pushConfig` indicates that the Pub/Sub system should stop pushing messages from the given subscription and allow messages to be pulled and acknowledged - effectively pausing the subscription if `Pull` is not called."
     }
    }
   }
@@ -460,7 +460,7 @@
        "parameters": {
         "resource": {
          "type": "string",
-         "description": "REQUIRED: The resource for which policy is being specified. Resource is usually specified as a path, such as, projects/{project}/zones/{zone}/disks/{disk}.",
+         "description": "REQUIRED: The resource for which policy is being specified. `resource` is usually specified as a path, such as, `projects/{project}/zones/{zone}/disks/{disk}`.",
          "required": true,
          "pattern": "^projects/[^/]*/topics/[^/]*$",
          "location": "path"
@@ -484,11 +484,11 @@
        "id": "pubsub.projects.topics.getIamPolicy",
        "path": "v1/{+resource}:getIamPolicy",
        "httpMethod": "GET",
-       "description": "Gets the access control policy for a resource. Is empty if the policy or the resource does not exist.",
+       "description": "Gets the access control policy for a `resource`. Is empty if the policy or the resource does not exist.",
        "parameters": {
         "resource": {
          "type": "string",
-         "description": "REQUIRED: The resource for which policy is being requested. Resource is usually specified as a path, such as, projects/{project}.",
+         "description": "REQUIRED: The resource for which policy is being requested. Resource is usually specified as a path, such as, `projects/{project}`.",
          "required": true,
          "pattern": "^projects/[^/]*/topics/[^/]*$",
          "location": "path"
@@ -513,7 +513,7 @@
        "parameters": {
         "resource": {
          "type": "string",
-         "description": "REQUIRED: The resource for which policy detail is being requested. Resource is usually specified as a path, such as, projects/{project}.",
+         "description": "REQUIRED: The resource for which policy detail is being requested. `resource` is usually specified as a path, such as, `projects/{project}`.",
          "required": true,
          "pattern": "^projects/[^/]*/topics/[^/]*$",
          "location": "path"
@@ -565,7 +565,7 @@
        "id": "pubsub.projects.topics.publish",
        "path": "v1/{+topic}:publish",
        "httpMethod": "POST",
-       "description": "Adds one or more messages to the topic. Returns NOT_FOUND if the topic does not exist. The message payload must not be empty; it must contain either a non-empty data field, or at least one attribute.",
+       "description": "Adds one or more messages to the topic. Returns `NOT_FOUND` if the topic does not exist. The message payload must not be empty; it must contain either a non-empty data field, or at least one attribute.",
        "parameters": {
         "topic": {
          "type": "string",
@@ -635,7 +635,7 @@
         },
         "pageToken": {
          "type": "string",
-         "description": "The value returned by the last ListTopicsResponse; indicates that this is a continuation of a prior ListTopics call, and that the system should return the next page of data.",
+         "description": "The value returned by the last `ListTopicsResponse`; indicates that this is a continuation of a prior `ListTopics` call, and that the system should return the next page of data.",
          "location": "query"
         }
        },
@@ -654,7 +654,7 @@
        "id": "pubsub.projects.topics.delete",
        "path": "v1/{+topic}",
        "httpMethod": "DELETE",
-       "description": "Deletes the topic with the given name. Returns NOT_FOUND if the topic does not exist. After a topic is deleted, a new topic may be created with the same name; this is an entirely new topic with none of the old configuration or subscriptions. Existing subscriptions to this topic are not deleted, but their `topic` field is set to `_deleted-topic_`.",
+       "description": "Deletes the topic with the given name. Returns `NOT_FOUND` if the topic does not exist. After a topic is deleted, a new topic may be created with the same name; this is an entirely new topic with none of the old configuration or subscriptions. Existing subscriptions to this topic are not deleted, but their `topic` field is set to `_deleted-topic_`.",
        "parameters": {
         "topic": {
          "type": "string",
@@ -700,7 +700,7 @@
           },
           "pageToken": {
            "type": "string",
-           "description": "The value returned by the last ListTopicSubscriptionsResponse; indicates that this is a continuation of a prior ListTopicSubscriptions call, and that the system should return the next page of data.",
+           "description": "The value returned by the last `ListTopicSubscriptionsResponse`; indicates that this is a continuation of a prior `ListTopicSubscriptions` call, and that the system should return the next page of data.",
            "location": "query"
           }
          },
@@ -729,7 +729,7 @@
        "parameters": {
         "resource": {
          "type": "string",
-         "description": "REQUIRED: The resource for which policy is being specified. Resource is usually specified as a path, such as, projects/{project}/zones/{zone}/disks/{disk}.",
+         "description": "REQUIRED: The resource for which policy is being specified. `resource` is usually specified as a path, such as, `projects/{project}/zones/{zone}/disks/{disk}`.",
          "required": true,
          "pattern": "^projects/[^/]*/subscriptions/[^/]*$",
          "location": "path"
@@ -753,11 +753,11 @@
        "id": "pubsub.projects.subscriptions.getIamPolicy",
        "path": "v1/{+resource}:getIamPolicy",
        "httpMethod": "GET",
-       "description": "Gets the access control policy for a resource. Is empty if the policy or the resource does not exist.",
+       "description": "Gets the access control policy for a `resource`. Is empty if the policy or the resource does not exist.",
        "parameters": {
         "resource": {
          "type": "string",
-         "description": "REQUIRED: The resource for which policy is being requested. Resource is usually specified as a path, such as, projects/{project}.",
+         "description": "REQUIRED: The resource for which policy is being requested. Resource is usually specified as a path, such as, `projects/{project}`.",
          "required": true,
          "pattern": "^projects/[^/]*/subscriptions/[^/]*$",
          "location": "path"
@@ -782,7 +782,7 @@
        "parameters": {
         "resource": {
          "type": "string",
-         "description": "REQUIRED: The resource for which policy detail is being requested. Resource is usually specified as a path, such as, projects/{project}.",
+         "description": "REQUIRED: The resource for which policy detail is being requested. `resource` is usually specified as a path, such as, `projects/{project}`.",
          "required": true,
          "pattern": "^projects/[^/]*/subscriptions/[^/]*$",
          "location": "path"
@@ -806,7 +806,7 @@
        "id": "pubsub.projects.subscriptions.create",
        "path": "v1/{+name}",
        "httpMethod": "PUT",
-       "description": "Creates a subscription to a given topic for a given subscriber. If the subscription already exists, returns ALREADY_EXISTS. If the corresponding topic doesn't exist, returns NOT_FOUND. If the name is not provided in the request, the server will assign a random name for this subscription on the same project as the topic.",
+       "description": "Creates a subscription to a given topic for a given subscriber. If the subscription already exists, returns `ALREADY_EXISTS`. If the corresponding topic doesn't exist, returns `NOT_FOUND`. If the name is not provided in the request, the server will assign a random name for this subscription on the same project as the topic.",
        "parameters": {
         "name": {
          "type": "string",
@@ -876,7 +876,7 @@
         },
         "pageToken": {
          "type": "string",
-         "description": "The value returned by the last ListSubscriptionsResponse; indicates that this is a continuation of a prior ListSubscriptions call, and that the system should return the next page of data.",
+         "description": "The value returned by the last `ListSubscriptionsResponse`; indicates that this is a continuation of a prior `ListSubscriptions` call, and that the system should return the next page of data.",
          "location": "query"
         }
        },
@@ -895,7 +895,7 @@
        "id": "pubsub.projects.subscriptions.delete",
        "path": "v1/{+subscription}",
        "httpMethod": "DELETE",
-       "description": "Deletes an existing subscription. All pending messages in the subscription are immediately dropped. Calls to Pull after deletion will return NOT_FOUND. After a subscription is deleted, a new one may be created with the same name, but the new one has no association with the old subscription, or its topic unless the same topic is specified.",
+       "description": "Deletes an existing subscription. All pending messages in the subscription are immediately dropped. Calls to `Pull` after deletion will return `NOT_FOUND`. After a subscription is deleted, a new one may be created with the same name, but the new one has no association with the old subscription, or its topic unless the same topic is specified.",
        "parameters": {
         "subscription": {
          "type": "string",
@@ -948,7 +948,7 @@
        "id": "pubsub.projects.subscriptions.acknowledge",
        "path": "v1/{+subscription}:acknowledge",
        "httpMethod": "POST",
-       "description": "Acknowledges the messages associated with the ack tokens in the AcknowledgeRequest. The Pub/Sub system can remove the relevant messages from the subscription. Acknowledging a message whose ack deadline has expired may succeed, but such a message may be redelivered later. Acknowledging a message more than once will not result in an error.",
+       "description": "Acknowledges the messages associated with the `ack_ids` in the `AcknowledgeRequest`. The Pub/Sub system can remove the relevant messages from the subscription. Acknowledging a message whose ack deadline has expired may succeed, but such a message may be redelivered later. Acknowledging a message more than once will not result in an error.",
        "parameters": {
         "subscription": {
          "type": "string",
@@ -976,7 +976,7 @@
        "id": "pubsub.projects.subscriptions.pull",
        "path": "v1/{+subscription}:pull",
        "httpMethod": "POST",
-       "description": "Pulls messages from the server. Returns an empty list if there are no messages available in the backlog. The server may return UNAVAILABLE if there are too many concurrent pull requests pending for the given subscription.",
+       "description": "Pulls messages from the server. Returns an empty list if there are no messages available in the backlog. The server may return `UNAVAILABLE` if there are too many concurrent pull requests pending for the given subscription.",
        "parameters": {
         "subscription": {
          "type": "string",
@@ -1004,7 +1004,7 @@
        "id": "pubsub.projects.subscriptions.modifyPushConfig",
        "path": "v1/{+subscription}:modifyPushConfig",
        "httpMethod": "POST",
-       "description": "Modifies the PushConfig for a specified subscription. This may be used to change a push subscription to a pull one (signified by an empty PushConfig) or vice versa, or change the endpoint URL and other attributes of a push subscription. Messages will accumulate for delivery continuously through the call regardless of changes to the PushConfig.",
+       "description": "Modifies the `PushConfig` for a specified subscription. This may be used to change a push subscription to a pull one (signified by an empty `PushConfig`) or vice versa, or change the endpoint URL and other attributes of a push subscription. Messages will accumulate for delivery continuously through the call regardless of changes to the `PushConfig`.",
        "parameters": {
         "subscription": {
          "type": "string",
diff --git a/pubsub/v1/pubsub-gen.go b/pubsub/v1/pubsub-gen.go
index c9fb3f6..a452d8b 100644
--- a/pubsub/v1/pubsub-gen.go
+++ b/pubsub/v1/pubsub-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "pubsub:v1"
 const apiName = "pubsub"
@@ -124,7 +126,7 @@
 // AcknowledgeRequest: Request for the Acknowledge method.
 type AcknowledgeRequest struct {
 	// AckIds: The acknowledgment ID for the messages being acknowledged
-	// that was returned by the Pub/Sub system in the Pull response. Must
+	// that was returned by the Pub/Sub system in the `Pull` response. Must
 	// not be empty.
 	AckIds []string `json:"ackIds,omitempty"`
 
@@ -143,22 +145,27 @@
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
 
-// Binding: Associates members with roles. See below for allowed formats
-// of members.
+// Binding: Associates `members` with a `role`.
 type Binding struct {
-	// Members: Format of member entries: 1. allUsers Matches any requesting
-	// principal (users, service accounts or anonymous). 2.
-	// allAuthenticatedUsers Matches any requesting authenticated principal
-	// (users or service accounts). 3. user:{emailid} A google user account
-	// using an email address. For example alice@gmail.com, joe@example.com
-	// 4. serviceAccount:{emailid} An service account email. 5.
-	// group:{emailid} A google group with an email address. For example
-	// auth-ti-cloud@google.com 6. domain:{domain} A Google Apps domain
-	// name. For example google.com, example.com
+	// Members: Specifies the identities requesting access for a Cloud
+	// Platform resource. `members` can have the following formats: *
+	// `allUsers`: A special identifier that represents anyone who is on the
+	// internet; with or without a Google account. *
+	// `allAuthenticatedUsers`: A special identifier that represents anyone
+	// who is authenticated with a Google account or a service account. *
+	// `user:{emailid}`: An email address that represents a specific Google
+	// account. For example, `alice@gmail.com` or `joe@example.com`. *
+	// `serviceAccount:{emailid}`: An email address that represents a
+	// service account. For example,
+	// `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An
+	// email address that represents a Google group. For example,
+	// `admins@example.com`. * `domain:{domain}`: A Google Apps domain name
+	// that represents all the users of that domain. For example,
+	// `google.com` or `example.com`.
 	Members []string `json:"members,omitempty"`
 
-	// Role: The name of the role to which the members should be bound.
-	// Examples: "roles/viewer", "roles/editor", "roles/owner". Required
+	// Role: Role that is assigned to `members`. For example,
+	// `roles/viewer`, `roles/editor`, or `roles/owner`. Required
 	Role string `json:"role,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Members") to
@@ -188,11 +195,12 @@
 	googleapi.ServerResponse `json:"-"`
 }
 
-// ListSubscriptionsResponse: Response for the ListSubscriptions method.
+// ListSubscriptionsResponse: Response for the `ListSubscriptions`
+// method.
 type ListSubscriptionsResponse struct {
 	// NextPageToken: If not empty, indicates that there may be more
 	// subscriptions that match the request; this value should be passed in
-	// a new ListSubscriptionsRequest to get more subscriptions.
+	// a new `ListSubscriptionsRequest` to get more subscriptions.
 	NextPageToken string `json:"nextPageToken,omitempty"`
 
 	// Subscriptions: The subscriptions that match the request.
@@ -218,11 +226,11 @@
 }
 
 // ListTopicSubscriptionsResponse: Response for the
-// ListTopicSubscriptions method.
+// `ListTopicSubscriptions` method.
 type ListTopicSubscriptionsResponse struct {
 	// NextPageToken: If not empty, indicates that there may be more
 	// subscriptions that match the request; this value should be passed in
-	// a new ListTopicSubscriptionsRequest to get more subscriptions.
+	// a new `ListTopicSubscriptionsRequest` to get more subscriptions.
 	NextPageToken string `json:"nextPageToken,omitempty"`
 
 	// Subscriptions: The names of the subscriptions that match the request.
@@ -247,11 +255,11 @@
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
 
-// ListTopicsResponse: Response for the ListTopics method.
+// ListTopicsResponse: Response for the `ListTopics` method.
 type ListTopicsResponse struct {
 	// NextPageToken: If not empty, indicates that there may be more topics
 	// that match the request; this value should be passed in a new
-	// ListTopicsRequest.
+	// `ListTopicsRequest`.
 	NextPageToken string `json:"nextPageToken,omitempty"`
 
 	// Topics: The resulting topics.
@@ -281,7 +289,7 @@
 	// AckDeadlineSeconds: The new ack deadline with respect to the time
 	// this request was sent to the Pub/Sub system. Must be >= 0. For
 	// example, if the value is 10, the new ack deadline will expire 10
-	// seconds after the ModifyAckDeadline call was made. Specifying zero
+	// seconds after the `ModifyAckDeadline` call was made. Specifying zero
 	// may immediately make the message available for another pull request.
 	AckDeadlineSeconds int64 `json:"ackDeadlineSeconds,omitempty"`
 
@@ -306,9 +314,9 @@
 // ModifyPushConfigRequest: Request for the ModifyPushConfig method.
 type ModifyPushConfigRequest struct {
 	// PushConfig: The push configuration for future deliveries. An empty
-	// pushConfig indicates that the Pub/Sub system should stop pushing
+	// `pushConfig` indicates that the Pub/Sub system should stop pushing
 	// messages from the given subscription and allow messages to be pulled
-	// and acknowledged - effectively pausing the subscription if Pull is
+	// and acknowledged - effectively pausing the subscription if `Pull` is
 	// not called.
 	PushConfig *PushConfig `json:"pushConfig,omitempty"`
 
@@ -327,33 +335,28 @@
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
 
-// Policy: # Overview The `Policy` defines an access control policy
-// language. It is used to define policies that are attached to
-// resources like files, folders, VMs, etc. # Policy structure A
-// `Policy` consists of a list of bindings. A `Binding` binds a set of
-// members to a role, where the members include user accounts, user
-// groups, user domains, and service accounts. A 'role' is a named set
-// of permissions, defined by IAM. The definition of a role is outside
-// the policy. A permission check first determines the roles that
-// include the specified permission, and then determines if the
-// principal specified is a member of a binding to at least one of these
-// roles. The membership check is recursive when a group is bound to a
-// role. Policy examples: ``` { "bindings": [ { "role": "roles/owner",
-// "members": [ "user:mike@example.com", "group:admins@example.com",
-// "domain:google.com",
-// "serviceAccount:frontend@example.iam.gserviceaccounts.com"] }, {
+// Policy: Defines an Identity and Access Management (IAM) policy. It is
+// used to specify access control policies for Cloud Platform resources.
+// A `Policy` consists of a list of `bindings`. A `Binding` binds a list
+// of `members` to a `role`, where the members can be user accounts,
+// Google groups, Google domains, and service accounts. A `role` is a
+// named list of permissions defined by IAM. **Example** { "bindings": [
+// { "role": "roles/owner", "members": [ "user:mike@example.com",
+// "group:admins@example.com", "domain:google.com",
+// "serviceAccount:my-other-app@appspot.gserviceaccount.com"] }, {
 // "role": "roles/viewer", "members": ["user:sean@example.com"] } ] }
-// ```
+// For a description of IAM and its features, see the [IAM developer's
+// guide](https://cloud.google.com/iam).
 type Policy struct {
-	// Bindings: It is an error to specify multiple bindings for the same
-	// role. It is an error to specify a binding with no members.
+	// Bindings: Associates a list of `members` to a `role`. Multiple
+	// `bindings` must not be specified for the same `role`. `bindings` with
+	// no members will result in an error.
 	Bindings []*Binding `json:"bindings,omitempty"`
 
 	// Etag: Can be used to perform a read-modify-write.
 	Etag string `json:"etag,omitempty"`
 
-	// Version: The policy language version. The version of the policy is
-	// represented by the etag. The default version is 0.
+	// Version: Version of the `Policy`. The default version is 0.
 	Version int64 `json:"version,omitempty"`
 
 	// ServerResponse contains the HTTP response code and headers from the
@@ -395,7 +398,7 @@
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
 
-// PublishResponse: Response for the Publish method.
+// PublishResponse: Response for the `Publish` method.
 type PublishResponse struct {
 	// MessageIds: The server-assigned ID of each published message, in the
 	// same order as the messages in the request. IDs are guaranteed to be
@@ -434,9 +437,9 @@
 
 	// MessageId: ID of this message assigned by the server at publication
 	// time. 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 a publisher in a Publish
-	// call.
+	// read by a subscriber that receives a `PubsubMessage` via a `Pull`
+	// call or a push delivery. It must not be populated by a publisher in a
+	// `Publish` call.
 	MessageId string `json:"messageId,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Attributes") to
@@ -454,7 +457,7 @@
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
 
-// PullRequest: Request for the Pull method.
+// PullRequest: Request for the `Pull` method.
 type PullRequest struct {
 	// MaxMessages: The maximum number of messages returned for this
 	// request. The Pub/Sub system may return fewer than the number
@@ -463,8 +466,8 @@
 
 	// ReturnImmediately: If this is specified as true the system will
 	// respond immediately even if it is not able to return a message in the
-	// Pull response. Otherwise the system is allowed to wait until at least
-	// one message is available rather than returning no messages. The
+	// `Pull` response. Otherwise the system is allowed to wait until at
+	// least one message is available rather than returning no messages. The
 	// client may cancel the request if it does not wish to wait any longer
 	// for the response.
 	ReturnImmediately bool `json:"returnImmediately,omitempty"`
@@ -484,11 +487,11 @@
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
 
-// PullResponse: Response for the Pull method.
+// PullResponse: Response for the `Pull` method.
 type PullResponse struct {
 	// ReceivedMessages: Received Pub/Sub messages. The Pub/Sub system will
 	// return zero messages if there are no more available in the backlog.
-	// The Pub/Sub system may return fewer than the maxMessages requested
+	// The Pub/Sub system may return fewer than the `maxMessages` requested
 	// even if there are more messages available in the backlog.
 	ReceivedMessages []*ReceivedMessage `json:"receivedMessages,omitempty"`
 
@@ -520,10 +523,10 @@
 	// message. This attribute indicates the version of the data expected by
 	// the endpoint. This controls the shape of the envelope (i.e. its
 	// fields and metadata). The endpoint version is based on the version of
-	// the Pub/Sub API. If not present during the CreateSubscription call,
+	// the Pub/Sub API. If not present during the `CreateSubscription` call,
 	// it will default to the version of the API used to make such call. If
-	// not present during a ModifyPushConfig call, its value will not be
-	// changed. GetSubscription calls will always return a valid version,
+	// not present during a `ModifyPushConfig` call, its value will not be
+	// changed. `GetSubscription` calls will always return a valid version,
 	// even if the subscription was created without this attribute. The
 	// possible values for this attribute are: * `v1beta1`: uses the push
 	// format defined in the v1beta1 Pub/Sub API. * `v1` or `v1beta2`: uses
@@ -576,9 +579,9 @@
 // SetIamPolicyRequest: Request message for `SetIamPolicy` method.
 type SetIamPolicyRequest struct {
 	// Policy: REQUIRED: The complete policy to be applied to the
-	// 'resource'. The size of the policy is limited to a few 10s of KB. An
-	// empty policy is in general a valid policy but certain services (like
-	// Projects) might reject them.
+	// `resource`. The size of the policy is limited to a few 10s of KB. An
+	// empty policy is a valid policy but certain Cloud Platform services
+	// (such as Projects) might reject them.
 	Policy *Policy `json:"policy,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Policy") to
@@ -605,11 +608,11 @@
 	// and will not be delivered again during that time (on a best-effort
 	// basis). For pull delivery this value is used as the initial value for
 	// the ack deadline. To override this value for a given message, call
-	// ModifyAckDeadline with the corresponding ack_id. For push delivery,
-	// this value is also used to set the request timeout for the call to
-	// the push endpoint. If the subscriber never acknowledges the message,
-	// the Pub/Sub system will eventually redeliver the message. If this
-	// parameter is not set, the default value of 10 seconds is used.
+	// `ModifyAckDeadline` with the corresponding `ack_id`. For push
+	// delivery, this value is also used to set the request timeout for the
+	// call to the push endpoint. If the subscriber never acknowledges the
+	// message, the Pub/Sub system will eventually redeliver the message. If
+	// this parameter is not set, the default value of 10 seconds is used.
 	AckDeadlineSeconds int64 `json:"ackDeadlineSeconds,omitempty"`
 
 	// Name: The name of the subscription. It must have the format
@@ -621,8 +624,8 @@
 	Name string `json:"name,omitempty"`
 
 	// PushConfig: If push delivery is used with this subscription, this
-	// field is used to configure it. An empty pushConfig signifies that the
-	// subscriber will pull and ack messages using API methods.
+	// field is used to configure it. An empty `pushConfig` signifies that
+	// the subscriber will pull and ack messages using API methods.
 	PushConfig *PushConfig `json:"pushConfig,omitempty"`
 
 	// Topic: The name of the topic from which this subscription is
@@ -652,7 +655,7 @@
 // TestIamPermissionsRequest: Request message for `TestIamPermissions`
 // method.
 type TestIamPermissionsRequest struct {
-	// Permissions: The set of permissions to check for the 'resource'.
+	// Permissions: The set of permissions to check for the `resource`.
 	// Permissions with wildcards (such as '*' or 'storage.*') are not
 	// allowed.
 	Permissions []string `json:"permissions,omitempty"`
@@ -737,10 +740,10 @@
 	ctx_               context.Context
 }
 
-// Acknowledge: Acknowledges the messages associated with the ack tokens
-// in the AcknowledgeRequest. The Pub/Sub system can remove the relevant
-// messages from the subscription. Acknowledging a message whose ack
-// deadline has expired may succeed, but such a message may be
+// Acknowledge: Acknowledges the messages associated with the `ack_ids`
+// in the `AcknowledgeRequest`. The Pub/Sub system can remove the
+// relevant messages from the subscription. Acknowledging a message
+// whose ack deadline has expired may succeed, but such a message may be
 // redelivered later. Acknowledging a message more than once will not
 // result in an error.
 func (r *ProjectsSubscriptionsService) Acknowledge(subscription string, acknowledgerequest *AcknowledgeRequest) *ProjectsSubscriptionsAcknowledgeCall {
@@ -828,7 +831,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Acknowledges the messages associated with the ack tokens in the AcknowledgeRequest. The Pub/Sub system can remove the relevant messages from the subscription. Acknowledging a message whose ack deadline has expired may succeed, but such a message may be redelivered later. Acknowledging a message more than once will not result in an error.",
+	//   "description": "Acknowledges the messages associated with the `ack_ids` in the `AcknowledgeRequest`. The Pub/Sub system can remove the relevant messages from the subscription. Acknowledging a message whose ack deadline has expired may succeed, but such a message may be redelivered later. Acknowledging a message more than once will not result in an error.",
 	//   "httpMethod": "POST",
 	//   "id": "pubsub.projects.subscriptions.acknowledge",
 	//   "parameterOrder": [
@@ -870,8 +873,8 @@
 
 // Create: Creates a subscription to a given topic for a given
 // subscriber. If the subscription already exists, returns
-// ALREADY_EXISTS. If the corresponding topic doesn't exist, returns
-// NOT_FOUND. If the name is not provided in the request, the server
+// `ALREADY_EXISTS`. If the corresponding topic doesn't exist, returns
+// `NOT_FOUND`. If the name is not provided in the request, the server
 // will assign a random name for this subscription on the same project
 // as the topic.
 func (r *ProjectsSubscriptionsService) Create(name string, subscription *Subscription) *ProjectsSubscriptionsCreateCall {
@@ -959,7 +962,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Creates a subscription to a given topic for a given subscriber. If the subscription already exists, returns ALREADY_EXISTS. If the corresponding topic doesn't exist, returns NOT_FOUND. If the name is not provided in the request, the server will assign a random name for this subscription on the same project as the topic.",
+	//   "description": "Creates a subscription to a given topic for a given subscriber. If the subscription already exists, returns `ALREADY_EXISTS`. If the corresponding topic doesn't exist, returns `NOT_FOUND`. If the name is not provided in the request, the server will assign a random name for this subscription on the same project as the topic.",
 	//   "httpMethod": "PUT",
 	//   "id": "pubsub.projects.subscriptions.create",
 	//   "parameterOrder": [
@@ -999,9 +1002,9 @@
 }
 
 // Delete: Deletes an existing subscription. All pending messages in the
-// subscription are immediately dropped. Calls to Pull after deletion
-// will return NOT_FOUND. After a subscription is deleted, a new one may
-// be created with the same name, but the new one has no association
+// subscription are immediately dropped. Calls to `Pull` after deletion
+// will return `NOT_FOUND`. After a subscription is deleted, a new one
+// may be created with the same name, but the new one has no association
 // with the old subscription, or its topic unless the same topic is
 // specified.
 func (r *ProjectsSubscriptionsService) Delete(subscription string) *ProjectsSubscriptionsDeleteCall {
@@ -1082,7 +1085,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Deletes an existing subscription. All pending messages in the subscription are immediately dropped. Calls to Pull after deletion will return NOT_FOUND. After a subscription is deleted, a new one may be created with the same name, but the new one has no association with the old subscription, or its topic unless the same topic is specified.",
+	//   "description": "Deletes an existing subscription. All pending messages in the subscription are immediately dropped. Calls to `Pull` after deletion will return `NOT_FOUND`. After a subscription is deleted, a new one may be created with the same name, but the new one has no association with the old subscription, or its topic unless the same topic is specified.",
 	//   "httpMethod": "DELETE",
 	//   "id": "pubsub.projects.subscriptions.delete",
 	//   "parameterOrder": [
@@ -1246,8 +1249,8 @@
 	ctx_     context.Context
 }
 
-// GetIamPolicy: Gets the access control policy for a resource. Is empty
-// if the policy or the resource does not exist.
+// GetIamPolicy: Gets the access control policy for a `resource`. Is
+// empty if the policy or the resource does not exist.
 func (r *ProjectsSubscriptionsService) GetIamPolicy(resource string) *ProjectsSubscriptionsGetIamPolicyCall {
 	c := &ProjectsSubscriptionsGetIamPolicyCall{s: r.s, opt_: make(map[string]interface{})}
 	c.resource = resource
@@ -1339,7 +1342,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Gets the access control policy for a resource. Is empty if the policy or the resource does not exist.",
+	//   "description": "Gets the access control policy for a `resource`. Is empty if the policy or the resource does not exist.",
 	//   "httpMethod": "GET",
 	//   "id": "pubsub.projects.subscriptions.getIamPolicy",
 	//   "parameterOrder": [
@@ -1347,7 +1350,7 @@
 	//   ],
 	//   "parameters": {
 	//     "resource": {
-	//       "description": "REQUIRED: The resource for which policy is being requested. Resource is usually specified as a path, such as, projects/{project}.",
+	//       "description": "REQUIRED: The resource for which policy is being requested. Resource is usually specified as a path, such as, `projects/{project}`.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]*/subscriptions/[^/]*$",
 	//       "required": true,
@@ -1390,8 +1393,8 @@
 }
 
 // PageToken sets the optional parameter "pageToken": The value returned
-// by the last ListSubscriptionsResponse; indicates that this is a
-// continuation of a prior ListSubscriptions call, and that the system
+// by the last `ListSubscriptionsResponse`; indicates that this is a
+// continuation of a prior `ListSubscriptions` call, and that the system
 // should return the next page of data.
 func (c *ProjectsSubscriptionsListCall) PageToken(pageToken string) *ProjectsSubscriptionsListCall {
 	c.opt_["pageToken"] = pageToken
@@ -1503,7 +1506,7 @@
 	//       "type": "integer"
 	//     },
 	//     "pageToken": {
-	//       "description": "The value returned by the last ListSubscriptionsResponse; indicates that this is a continuation of a prior ListSubscriptions call, and that the system should return the next page of data.",
+	//       "description": "The value returned by the last `ListSubscriptionsResponse`; indicates that this is a continuation of a prior `ListSubscriptions` call, and that the system should return the next page of data.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
@@ -1666,12 +1669,12 @@
 	ctx_                    context.Context
 }
 
-// ModifyPushConfig: Modifies the PushConfig for a specified
+// ModifyPushConfig: Modifies the `PushConfig` for a specified
 // subscription. This may be used to change a push subscription to a
-// pull one (signified by an empty PushConfig) or vice versa, or change
-// the endpoint URL and other attributes of a push subscription.
+// pull one (signified by an empty `PushConfig`) or vice versa, or
+// change the endpoint URL and other attributes of a push subscription.
 // Messages will accumulate for delivery continuously through the call
-// regardless of changes to the PushConfig.
+// regardless of changes to the `PushConfig`.
 func (r *ProjectsSubscriptionsService) ModifyPushConfig(subscription string, modifypushconfigrequest *ModifyPushConfigRequest) *ProjectsSubscriptionsModifyPushConfigCall {
 	c := &ProjectsSubscriptionsModifyPushConfigCall{s: r.s, opt_: make(map[string]interface{})}
 	c.subscription = subscription
@@ -1757,7 +1760,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Modifies the PushConfig for a specified subscription. This may be used to change a push subscription to a pull one (signified by an empty PushConfig) or vice versa, or change the endpoint URL and other attributes of a push subscription. Messages will accumulate for delivery continuously through the call regardless of changes to the PushConfig.",
+	//   "description": "Modifies the `PushConfig` for a specified subscription. This may be used to change a push subscription to a pull one (signified by an empty `PushConfig`) or vice versa, or change the endpoint URL and other attributes of a push subscription. Messages will accumulate for delivery continuously through the call regardless of changes to the `PushConfig`.",
 	//   "httpMethod": "POST",
 	//   "id": "pubsub.projects.subscriptions.modifyPushConfig",
 	//   "parameterOrder": [
@@ -1799,7 +1802,7 @@
 
 // Pull: Pulls messages from the server. Returns an empty list if there
 // are no messages available in the backlog. The server may return
-// UNAVAILABLE if there are too many concurrent pull requests pending
+// `UNAVAILABLE` if there are too many concurrent pull requests pending
 // for the given subscription.
 func (r *ProjectsSubscriptionsService) Pull(subscription string, pullrequest *PullRequest) *ProjectsSubscriptionsPullCall {
 	c := &ProjectsSubscriptionsPullCall{s: r.s, opt_: make(map[string]interface{})}
@@ -1886,7 +1889,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Pulls messages from the server. Returns an empty list if there are no messages available in the backlog. The server may return UNAVAILABLE if there are too many concurrent pull requests pending for the given subscription.",
+	//   "description": "Pulls messages from the server. Returns an empty list if there are no messages available in the backlog. The server may return `UNAVAILABLE` if there are too many concurrent pull requests pending for the given subscription.",
 	//   "httpMethod": "POST",
 	//   "id": "pubsub.projects.subscriptions.pull",
 	//   "parameterOrder": [
@@ -2021,7 +2024,7 @@
 	//   ],
 	//   "parameters": {
 	//     "resource": {
-	//       "description": "REQUIRED: The resource for which policy is being specified. Resource is usually specified as a path, such as, projects/{project}/zones/{zone}/disks/{disk}.",
+	//       "description": "REQUIRED: The resource for which policy is being specified. `resource` is usually specified as a path, such as, `projects/{project}/zones/{zone}/disks/{disk}`.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]*/subscriptions/[^/]*$",
 	//       "required": true,
@@ -2148,7 +2151,7 @@
 	//   ],
 	//   "parameters": {
 	//     "resource": {
-	//       "description": "REQUIRED: The resource for which policy detail is being requested. Resource is usually specified as a path, such as, projects/{project}.",
+	//       "description": "REQUIRED: The resource for which policy detail is being requested. `resource` is usually specified as a path, such as, `projects/{project}`.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]*/subscriptions/[^/]*$",
 	//       "required": true,
@@ -2305,7 +2308,7 @@
 	ctx_  context.Context
 }
 
-// Delete: Deletes the topic with the given name. Returns NOT_FOUND if
+// Delete: Deletes the topic with the given name. Returns `NOT_FOUND` if
 // the topic does not exist. After a topic is deleted, a new topic may
 // be created with the same name; this is an entirely new topic with
 // none of the old configuration or subscriptions. Existing
@@ -2389,7 +2392,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Deletes the topic with the given name. Returns NOT_FOUND if the topic does not exist. After a topic is deleted, a new topic may be created with the same name; this is an entirely new topic with none of the old configuration or subscriptions. Existing subscriptions to this topic are not deleted, but their `topic` field is set to `_deleted-topic_`.",
+	//   "description": "Deletes the topic with the given name. Returns `NOT_FOUND` if the topic does not exist. After a topic is deleted, a new topic may be created with the same name; this is an entirely new topic with none of the old configuration or subscriptions. Existing subscriptions to this topic are not deleted, but their `topic` field is set to `_deleted-topic_`.",
 	//   "httpMethod": "DELETE",
 	//   "id": "pubsub.projects.topics.delete",
 	//   "parameterOrder": [
@@ -2553,8 +2556,8 @@
 	ctx_     context.Context
 }
 
-// GetIamPolicy: Gets the access control policy for a resource. Is empty
-// if the policy or the resource does not exist.
+// GetIamPolicy: Gets the access control policy for a `resource`. Is
+// empty if the policy or the resource does not exist.
 func (r *ProjectsTopicsService) GetIamPolicy(resource string) *ProjectsTopicsGetIamPolicyCall {
 	c := &ProjectsTopicsGetIamPolicyCall{s: r.s, opt_: make(map[string]interface{})}
 	c.resource = resource
@@ -2646,7 +2649,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Gets the access control policy for a resource. Is empty if the policy or the resource does not exist.",
+	//   "description": "Gets the access control policy for a `resource`. Is empty if the policy or the resource does not exist.",
 	//   "httpMethod": "GET",
 	//   "id": "pubsub.projects.topics.getIamPolicy",
 	//   "parameterOrder": [
@@ -2654,7 +2657,7 @@
 	//   ],
 	//   "parameters": {
 	//     "resource": {
-	//       "description": "REQUIRED: The resource for which policy is being requested. Resource is usually specified as a path, such as, projects/{project}.",
+	//       "description": "REQUIRED: The resource for which policy is being requested. Resource is usually specified as a path, such as, `projects/{project}`.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]*/topics/[^/]*$",
 	//       "required": true,
@@ -2697,9 +2700,9 @@
 }
 
 // PageToken sets the optional parameter "pageToken": The value returned
-// by the last ListTopicsResponse; indicates that this is a continuation
-// of a prior ListTopics call, and that the system should return the
-// next page of data.
+// by the last `ListTopicsResponse`; indicates that this is a
+// continuation of a prior `ListTopics` call, and that the system should
+// return the next page of data.
 func (c *ProjectsTopicsListCall) PageToken(pageToken string) *ProjectsTopicsListCall {
 	c.opt_["pageToken"] = pageToken
 	return c
@@ -2810,7 +2813,7 @@
 	//       "type": "integer"
 	//     },
 	//     "pageToken": {
-	//       "description": "The value returned by the last ListTopicsResponse; indicates that this is a continuation of a prior ListTopics call, and that the system should return the next page of data.",
+	//       "description": "The value returned by the last `ListTopicsResponse`; indicates that this is a continuation of a prior `ListTopics` call, and that the system should return the next page of data.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
@@ -2844,9 +2847,9 @@
 	ctx_           context.Context
 }
 
-// Publish: Adds one or more messages to the topic. Returns NOT_FOUND if
-// the topic does not exist. The message payload must not be empty; it
-// must contain either a non-empty data field, or at least one
+// Publish: Adds one or more messages to the topic. Returns `NOT_FOUND`
+// if the topic does not exist. The message payload must not be empty;
+// it must contain either a non-empty data field, or at least one
 // attribute.
 func (r *ProjectsTopicsService) Publish(topic string, publishrequest *PublishRequest) *ProjectsTopicsPublishCall {
 	c := &ProjectsTopicsPublishCall{s: r.s, opt_: make(map[string]interface{})}
@@ -2933,7 +2936,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Adds one or more messages to the topic. Returns NOT_FOUND if the topic does not exist. The message payload must not be empty; it must contain either a non-empty data field, or at least one attribute.",
+	//   "description": "Adds one or more messages to the topic. Returns `NOT_FOUND` if the topic does not exist. The message payload must not be empty; it must contain either a non-empty data field, or at least one attribute.",
 	//   "httpMethod": "POST",
 	//   "id": "pubsub.projects.topics.publish",
 	//   "parameterOrder": [
@@ -3068,7 +3071,7 @@
 	//   ],
 	//   "parameters": {
 	//     "resource": {
-	//       "description": "REQUIRED: The resource for which policy is being specified. Resource is usually specified as a path, such as, projects/{project}/zones/{zone}/disks/{disk}.",
+	//       "description": "REQUIRED: The resource for which policy is being specified. `resource` is usually specified as a path, such as, `projects/{project}/zones/{zone}/disks/{disk}`.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]*/topics/[^/]*$",
 	//       "required": true,
@@ -3195,7 +3198,7 @@
 	//   ],
 	//   "parameters": {
 	//     "resource": {
-	//       "description": "REQUIRED: The resource for which policy detail is being requested. Resource is usually specified as a path, such as, projects/{project}.",
+	//       "description": "REQUIRED: The resource for which policy detail is being requested. `resource` is usually specified as a path, such as, `projects/{project}`.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]*/topics/[^/]*$",
 	//       "required": true,
@@ -3241,8 +3244,8 @@
 }
 
 // PageToken sets the optional parameter "pageToken": The value returned
-// by the last ListTopicSubscriptionsResponse; indicates that this is a
-// continuation of a prior ListTopicSubscriptions call, and that the
+// by the last `ListTopicSubscriptionsResponse`; indicates that this is
+// a continuation of a prior `ListTopicSubscriptions` call, and that the
 // system should return the next page of data.
 func (c *ProjectsTopicsSubscriptionsListCall) PageToken(pageToken string) *ProjectsTopicsSubscriptionsListCall {
 	c.opt_["pageToken"] = pageToken
@@ -3354,7 +3357,7 @@
 	//       "type": "integer"
 	//     },
 	//     "pageToken": {
-	//       "description": "The value returned by the last ListTopicSubscriptionsResponse; indicates that this is a continuation of a prior ListTopicSubscriptions call, and that the system should return the next page of data.",
+	//       "description": "The value returned by the last `ListTopicSubscriptionsResponse`; indicates that this is a continuation of a prior `ListTopicSubscriptions` call, and that the system should return the next page of data.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
diff --git a/pubsub/v1beta1/pubsub-gen.go b/pubsub/v1beta1/pubsub-gen.go
index fea77d4..a7cf31a 100644
--- a/pubsub/v1beta1/pubsub-gen.go
+++ b/pubsub/v1beta1/pubsub-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "pubsub:v1beta1"
 const apiName = "pubsub"
diff --git a/pubsub/v1beta1a/pubsub-gen.go b/pubsub/v1beta1a/pubsub-gen.go
index 36e8086..598daab 100644
--- a/pubsub/v1beta1a/pubsub-gen.go
+++ b/pubsub/v1beta1a/pubsub-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "pubsub:v1beta1a"
 const apiName = "pubsub"
diff --git a/pubsub/v1beta2/pubsub-api.json b/pubsub/v1beta2/pubsub-api.json
index 95efd25..077da57 100644
--- a/pubsub/v1beta2/pubsub-api.json
+++ b/pubsub/v1beta2/pubsub-api.json
@@ -1,11 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/s-u3NPfHPprAPtZF56gCDlMWM1U\"",
+ "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/bZNz6VUa9sqtr0UjT-GTq4xvg0E\"",
  "discoveryVersion": "v1",
  "id": "pubsub:v1beta2",
  "name": "pubsub",
  "version": "v1beta2",
- "revision": "20150427",
+ "revision": "20150526",
  "title": "Google Cloud Pub/Sub API",
  "description": "Provides reliable, many-to-many, asynchronous messaging between applications.",
  "ownerDomain": "google.com",
@@ -120,23 +120,23 @@
    "properties": {
     "policy": {
      "$ref": "Policy",
-     "description": "REQUIRED: The complete policy to be applied to the 'resource'. The size of the policy is limited to a few 10s of KB. An empty policy is in general a valid policy but certain services (like Projects) might reject them."
+     "description": "REQUIRED: The complete policy to be applied to the `resource`. The size of the policy is limited to a few 10s of KB. An empty policy is a valid policy but certain Cloud Platform services (such as Projects) might reject them."
     }
    }
   },
   "Policy": {
    "id": "Policy",
    "type": "object",
-   "description": "# Overview The `Policy` defines an access control policy language. It is used to define policies that are attached to resources like files, folders, VMs, etc. # Policy structure A `Policy` consists of a list of bindings. A `Binding` binds a set of members to a role, where the members include user accounts, user groups, user domains, and service accounts. A 'role' is a named set of permissions, defined by IAM. The definition of a role is outside the policy. A permission check first determines the roles that include the specified permission, and then determines if the principal specified is a member of a binding to at least one of these roles. The membership check is recursive when a group is bound to a role. Policy examples: ``` { \"bindings\": [ { \"role\": \"roles/owner\", \"members\": [ \"user:mike@example.com\", \"group:admins@example.com\", \"domain:google.com\", \"serviceAccount:frontend@example.iam.gserviceaccounts.com\"] }, { \"role\": \"roles/viewer\", \"members\": [\"user:sean@example.com\"] } ] } ```",
+   "description": "Defines an Identity and Access Management (IAM) policy. It is used to specify access control policies for Cloud Platform resources. A `Policy` consists of a list of `bindings`. A `Binding` binds a list of `members` to a `role`, where the members can be user accounts, Google groups, Google domains, and service accounts. A `role` is a named list of permissions defined by IAM. **Example** { \"bindings\": [ { \"role\": \"roles/owner\", \"members\": [ \"user:mike@example.com\", \"group:admins@example.com\", \"domain:google.com\", \"serviceAccount:my-other-app@appspot.gserviceaccount.com\"] }, { \"role\": \"roles/viewer\", \"members\": [\"user:sean@example.com\"] } ] } For a description of IAM and its features, see the [IAM developer's guide](https://cloud.google.com/iam).",
    "properties": {
     "version": {
      "type": "integer",
-     "description": "The policy language version. The version of the policy is represented by the etag. The default version is 0.",
+     "description": "Version of the `Policy`. The default version is 0.",
      "format": "int32"
     },
     "bindings": {
      "type": "array",
-     "description": "It is an error to specify multiple bindings for the same role. It is an error to specify a binding with no members.",
+     "description": "Associates a list of `members` to a `role`. Multiple `bindings` must not be specified for the same `role`. `bindings` with no members will result in an error.",
      "items": {
       "$ref": "Binding"
      }
@@ -151,15 +151,15 @@
   "Binding": {
    "id": "Binding",
    "type": "object",
-   "description": "Associates members with roles. See below for allowed formats of members.",
+   "description": "Associates `members` with a `role`.",
    "properties": {
     "role": {
      "type": "string",
-     "description": "The name of the role to which the members should be bound. Examples: \"roles/viewer\", \"roles/editor\", \"roles/owner\". Required"
+     "description": "Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`. Required"
     },
     "members": {
      "type": "array",
-     "description": "Format of member entries: 1. allUsers Matches any requesting principal (users, service accounts or anonymous). 2. allAuthenticatedUsers Matches any requesting authenticated principal (users or service accounts). 3. user:{emailid} A google user account using an email address. For example alice@gmail.com, joe@example.com 4. serviceAccount:{emailid} An service account email. 5. group:{emailid} A google group with an email address. For example auth-ti-cloud@google.com 6. domain:{domain} A Google Apps domain name. For example google.com, example.com",
+     "description": "Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following formats: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@gmail.com` or `joe@example.com`. * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `domain:{domain}`: A Google Apps domain name that represents all the users of that domain. For example, `google.com` or `example.com`.",
      "items": {
       "type": "string"
      }
@@ -173,7 +173,7 @@
    "properties": {
     "permissions": {
      "type": "array",
-     "description": "The set of permissions to check for the 'resource'. Permissions with wildcards (such as '*' or 'storage.*') are not allowed.",
+     "description": "The set of permissions to check for the `resource`. Permissions with wildcards (such as '*' or 'storage.*') are not allowed.",
      "items": {
       "type": "string"
      }
@@ -238,14 +238,14 @@
     },
     "messageId": {
      "type": "string",
-     "description": "ID of this message assigned by the server at publication time. 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 a publisher in a Publish call."
+     "description": "ID of this message assigned by the server at publication time. 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 a publisher in a `Publish` call."
     }
    }
   },
   "PublishResponse": {
    "id": "PublishResponse",
    "type": "object",
-   "description": "Response for the Publish method.",
+   "description": "Response for the `Publish` method.",
    "properties": {
     "messageIds": {
      "type": "array",
@@ -259,7 +259,7 @@
   "ListTopicsResponse": {
    "id": "ListTopicsResponse",
    "type": "object",
-   "description": "Response for the ListTopics method.",
+   "description": "Response for the `ListTopics` method.",
    "properties": {
     "topics": {
      "type": "array",
@@ -270,14 +270,14 @@
     },
     "nextPageToken": {
      "type": "string",
-     "description": "If not empty, indicates that there may be more topics that match the request; this value should be passed in a new ListTopicsRequest."
+     "description": "If not empty, indicates that there may be more topics that match the request; this value should be passed in a new `ListTopicsRequest`."
     }
    }
   },
   "ListTopicSubscriptionsResponse": {
    "id": "ListTopicSubscriptionsResponse",
    "type": "object",
-   "description": "Response for the ListTopicSubscriptions method.",
+   "description": "Response for the `ListTopicSubscriptions` method.",
    "properties": {
     "subscriptions": {
      "type": "array",
@@ -288,7 +288,7 @@
     },
     "nextPageToken": {
      "type": "string",
-     "description": "If not empty, indicates that there may be more subscriptions that match the request; this value should be passed in a new ListTopicSubscriptionsRequest to get more subscriptions."
+     "description": "If not empty, indicates that there may be more subscriptions that match the request; this value should be passed in a new `ListTopicSubscriptionsRequest` to get more subscriptions."
     }
    }
   },
@@ -312,11 +312,11 @@
     },
     "pushConfig": {
      "$ref": "PushConfig",
-     "description": "If push delivery is used with this subscription, this field is used to configure it. An empty pushConfig signifies that the subscriber will pull and ack messages using API methods."
+     "description": "If push delivery is used with this subscription, this field is used to configure it. An empty `pushConfig` signifies that the subscriber will pull and ack messages using API methods."
     },
     "ackDeadlineSeconds": {
      "type": "integer",
-     "description": "This value is the maximum time after a subscriber receives a message before the subscriber should acknowledge the message. After message delivery but before the ack deadline expires and before the message is acknowledged, it is an outstanding message and will not be delivered again during that time (on a best-effort basis). For pull delivery this value is used as the initial value for the ack deadline. To override this value for a given message, call ModifyAckDeadline with the corresponding ack_id. For push delivery, this value is also used to set the request timeout for the call to the push endpoint. If the subscriber never acknowledges the message, the Pub/Sub system will eventually redeliver the message. If this parameter is not set, the default value of 10 seconds is used.",
+     "description": "This value is the maximum time after a subscriber receives a message before the subscriber should acknowledge the message. After message delivery but before the ack deadline expires and before the message is acknowledged, it is an outstanding message and will not be delivered again during that time (on a best-effort basis). For pull delivery this value is used as the initial value for the ack deadline. To override this value for a given message, call `ModifyAckDeadline` with the corresponding `ack_id`. For push delivery, this value is also used to set the request timeout for the call to the push endpoint. If the subscriber never acknowledges the message, the Pub/Sub system will eventually redeliver the message. If this parameter is not set, the default value of 10 seconds is used.",
      "format": "int32"
     }
    }
@@ -332,7 +332,7 @@
     },
     "attributes": {
      "type": "object",
-     "description": "Endpoint configuration attributes. Every endpoint has a set of API supported attributes that can be used to control different aspects of the message delivery. The currently supported attribute is `x-goog-version`, which you can use to change the format of the push message. This attribute indicates the version of the data expected by the endpoint. This controls the shape of the envelope (i.e. its fields and metadata). The endpoint version is based on the version of the Pub/Sub API. If not present during the CreateSubscription call, it will default to the version of the API used to make such call. If not present during a ModifyPushConfig call, its value will not be changed. GetSubscription calls will always return a valid version, even if the subscription was created without this attribute. The possible values for this attribute are: * `v1beta1`: uses the push format defined in the v1beta1 Pub/Sub API. * `v1` or `v1beta2`: uses the push format defined in the v1 Pub/Sub API.",
+     "description": "Endpoint configuration attributes. Every endpoint has a set of API supported attributes that can be used to control different aspects of the message delivery. The currently supported attribute is `x-goog-version`, which you can use to change the format of the push message. This attribute indicates the version of the data expected by the endpoint. This controls the shape of the envelope (i.e. its fields and metadata). The endpoint version is based on the version of the Pub/Sub API. If not present during the `CreateSubscription` call, it will default to the version of the API used to make such call. If not present during a `ModifyPushConfig` call, its value will not be changed. `GetSubscription` calls will always return a valid version, even if the subscription was created without this attribute. The possible values for this attribute are: * `v1beta1`: uses the push format defined in the v1beta1 Pub/Sub API. * `v1` or `v1beta2`: uses the push format defined in the v1 Pub/Sub API.",
      "additionalProperties": {
       "type": "string"
      }
@@ -342,7 +342,7 @@
   "ListSubscriptionsResponse": {
    "id": "ListSubscriptionsResponse",
    "type": "object",
-   "description": "Response for the ListSubscriptions method.",
+   "description": "Response for the `ListSubscriptions` method.",
    "properties": {
     "subscriptions": {
      "type": "array",
@@ -353,7 +353,7 @@
     },
     "nextPageToken": {
      "type": "string",
-     "description": "If not empty, indicates that there may be more subscriptions that match the request; this value should be passed in a new ListSubscriptionsRequest to get more subscriptions."
+     "description": "If not empty, indicates that there may be more subscriptions that match the request; this value should be passed in a new `ListSubscriptionsRequest` to get more subscriptions."
     }
    }
   },
@@ -375,7 +375,7 @@
     },
     "ackDeadlineSeconds": {
      "type": "integer",
-     "description": "The new ack deadline with respect to the time this request was sent to the Pub/Sub system. Must be \u003e= 0. For example, if the value is 10, the new ack deadline will expire 10 seconds after the ModifyAckDeadline call was made. Specifying zero may immediately make the message available for another pull request.",
+     "description": "The new ack deadline with respect to the time this request was sent to the Pub/Sub system. Must be \u003e= 0. For example, if the value is 10, the new ack deadline will expire 10 seconds after the `ModifyAckDeadline` call was made. Specifying zero may immediately make the message available for another pull request.",
      "format": "int32"
     }
    }
@@ -387,7 +387,7 @@
    "properties": {
     "ackIds": {
      "type": "array",
-     "description": "The acknowledgment ID for the messages being acknowledged that was returned by the Pub/Sub system in the Pull response. Must not be empty.",
+     "description": "The acknowledgment ID for the messages being acknowledged that was returned by the Pub/Sub system in the `Pull` response. Must not be empty.",
      "items": {
       "type": "string"
      }
@@ -397,11 +397,11 @@
   "PullRequest": {
    "id": "PullRequest",
    "type": "object",
-   "description": "Request for the Pull method.",
+   "description": "Request for the `Pull` method.",
    "properties": {
     "returnImmediately": {
      "type": "boolean",
-     "description": "If this is specified as true the system will respond immediately even if it is not able to return a message in the Pull response. Otherwise the system is allowed to wait until at least one message is available rather than returning no messages. The client may cancel the request if it does not wish to wait any longer for the response."
+     "description": "If this is specified as true the system will respond immediately even if it is not able to return a message in the `Pull` response. Otherwise the system is allowed to wait until at least one message is available rather than returning no messages. The client may cancel the request if it does not wish to wait any longer for the response."
     },
     "maxMessages": {
      "type": "integer",
@@ -413,11 +413,11 @@
   "PullResponse": {
    "id": "PullResponse",
    "type": "object",
-   "description": "Response for the Pull method.",
+   "description": "Response for the `Pull` method.",
    "properties": {
     "receivedMessages": {
      "type": "array",
-     "description": "Received Pub/Sub messages. The Pub/Sub system will return zero messages if there are no more available in the backlog. The Pub/Sub system may return fewer than the maxMessages requested even if there are more messages available in the backlog.",
+     "description": "Received Pub/Sub messages. The Pub/Sub system will return zero messages if there are no more available in the backlog. The Pub/Sub system may return fewer than the `maxMessages` requested even if there are more messages available in the backlog.",
      "items": {
       "$ref": "ReceivedMessage"
      }
@@ -446,7 +446,7 @@
    "properties": {
     "pushConfig": {
      "$ref": "PushConfig",
-     "description": "The push configuration for future deliveries. An empty pushConfig indicates that the Pub/Sub system should stop pushing messages from the given subscription and allow messages to be pulled and acknowledged - effectively pausing the subscription if Pull is not called."
+     "description": "The push configuration for future deliveries. An empty `pushConfig` indicates that the Pub/Sub system should stop pushing messages from the given subscription and allow messages to be pulled and acknowledged - effectively pausing the subscription if `Pull` is not called."
     }
    }
   }
@@ -464,7 +464,7 @@
        "parameters": {
         "resource": {
          "type": "string",
-         "description": "REQUIRED: The resource for which policy is being specified. Resource is usually specified as a path, such as, projects/{project}/zones/{zone}/disks/{disk}.",
+         "description": "REQUIRED: The resource for which policy is being specified. `resource` is usually specified as a path, such as, `projects/{project}/zones/{zone}/disks/{disk}`.",
          "required": true,
          "pattern": "^projects/[^/]*/topics/[^/]*$",
          "location": "path"
@@ -488,11 +488,11 @@
        "id": "pubsub.projects.topics.getIamPolicy",
        "path": "v1beta2/{+resource}:getIamPolicy",
        "httpMethod": "GET",
-       "description": "Gets the access control policy for a resource. Is empty if the policy or the resource does not exist.",
+       "description": "Gets the access control policy for a `resource`. Is empty if the policy or the resource does not exist.",
        "parameters": {
         "resource": {
          "type": "string",
-         "description": "REQUIRED: The resource for which policy is being requested. Resource is usually specified as a path, such as, projects/{project}.",
+         "description": "REQUIRED: The resource for which policy is being requested. Resource is usually specified as a path, such as, `projects/{project}`.",
          "required": true,
          "pattern": "^projects/[^/]*/topics/[^/]*$",
          "location": "path"
@@ -517,7 +517,7 @@
        "parameters": {
         "resource": {
          "type": "string",
-         "description": "REQUIRED: The resource for which policy detail is being requested. Resource is usually specified as a path, such as, projects/{project}.",
+         "description": "REQUIRED: The resource for which policy detail is being requested. `resource` is usually specified as a path, such as, `projects/{project}`.",
          "required": true,
          "pattern": "^projects/[^/]*/topics/[^/]*$",
          "location": "path"
@@ -569,7 +569,7 @@
        "id": "pubsub.projects.topics.publish",
        "path": "v1beta2/{+topic}:publish",
        "httpMethod": "POST",
-       "description": "Adds one or more messages to the topic. Returns NOT_FOUND if the topic does not exist. The message payload must not be empty; it must contain either a non-empty data field, or at least one attribute.",
+       "description": "Adds one or more messages to the topic. Returns `NOT_FOUND` if the topic does not exist. The message payload must not be empty; it must contain either a non-empty data field, or at least one attribute.",
        "parameters": {
         "topic": {
          "type": "string",
@@ -639,7 +639,7 @@
         },
         "pageToken": {
          "type": "string",
-         "description": "The value returned by the last ListTopicsResponse; indicates that this is a continuation of a prior ListTopics call, and that the system should return the next page of data.",
+         "description": "The value returned by the last `ListTopicsResponse`; indicates that this is a continuation of a prior `ListTopics` call, and that the system should return the next page of data.",
          "location": "query"
         }
        },
@@ -658,7 +658,7 @@
        "id": "pubsub.projects.topics.delete",
        "path": "v1beta2/{+topic}",
        "httpMethod": "DELETE",
-       "description": "Deletes the topic with the given name. Returns NOT_FOUND if the topic does not exist. After a topic is deleted, a new topic may be created with the same name; this is an entirely new topic with none of the old configuration or subscriptions. Existing subscriptions to this topic are not deleted, but their `topic` field is set to `_deleted-topic_`.",
+       "description": "Deletes the topic with the given name. Returns `NOT_FOUND` if the topic does not exist. After a topic is deleted, a new topic may be created with the same name; this is an entirely new topic with none of the old configuration or subscriptions. Existing subscriptions to this topic are not deleted, but their `topic` field is set to `_deleted-topic_`.",
        "parameters": {
         "topic": {
          "type": "string",
@@ -704,7 +704,7 @@
           },
           "pageToken": {
            "type": "string",
-           "description": "The value returned by the last ListTopicSubscriptionsResponse; indicates that this is a continuation of a prior ListTopicSubscriptions call, and that the system should return the next page of data.",
+           "description": "The value returned by the last `ListTopicSubscriptionsResponse`; indicates that this is a continuation of a prior `ListTopicSubscriptions` call, and that the system should return the next page of data.",
            "location": "query"
           }
          },
@@ -733,7 +733,7 @@
        "parameters": {
         "resource": {
          "type": "string",
-         "description": "REQUIRED: The resource for which policy is being specified. Resource is usually specified as a path, such as, projects/{project}/zones/{zone}/disks/{disk}.",
+         "description": "REQUIRED: The resource for which policy is being specified. `resource` is usually specified as a path, such as, `projects/{project}/zones/{zone}/disks/{disk}`.",
          "required": true,
          "pattern": "^projects/[^/]*/subscriptions/[^/]*$",
          "location": "path"
@@ -757,11 +757,11 @@
        "id": "pubsub.projects.subscriptions.getIamPolicy",
        "path": "v1beta2/{+resource}:getIamPolicy",
        "httpMethod": "GET",
-       "description": "Gets the access control policy for a resource. Is empty if the policy or the resource does not exist.",
+       "description": "Gets the access control policy for a `resource`. Is empty if the policy or the resource does not exist.",
        "parameters": {
         "resource": {
          "type": "string",
-         "description": "REQUIRED: The resource for which policy is being requested. Resource is usually specified as a path, such as, projects/{project}.",
+         "description": "REQUIRED: The resource for which policy is being requested. Resource is usually specified as a path, such as, `projects/{project}`.",
          "required": true,
          "pattern": "^projects/[^/]*/subscriptions/[^/]*$",
          "location": "path"
@@ -786,7 +786,7 @@
        "parameters": {
         "resource": {
          "type": "string",
-         "description": "REQUIRED: The resource for which policy detail is being requested. Resource is usually specified as a path, such as, projects/{project}.",
+         "description": "REQUIRED: The resource for which policy detail is being requested. `resource` is usually specified as a path, such as, `projects/{project}`.",
          "required": true,
          "pattern": "^projects/[^/]*/subscriptions/[^/]*$",
          "location": "path"
@@ -810,7 +810,7 @@
        "id": "pubsub.projects.subscriptions.create",
        "path": "v1beta2/{+name}",
        "httpMethod": "PUT",
-       "description": "Creates a subscription to a given topic for a given subscriber. If the subscription already exists, returns ALREADY_EXISTS. If the corresponding topic doesn't exist, returns NOT_FOUND. If the name is not provided in the request, the server will assign a random name for this subscription on the same project as the topic.",
+       "description": "Creates a subscription to a given topic for a given subscriber. If the subscription already exists, returns `ALREADY_EXISTS`. If the corresponding topic doesn't exist, returns `NOT_FOUND`. If the name is not provided in the request, the server will assign a random name for this subscription on the same project as the topic.",
        "parameters": {
         "name": {
          "type": "string",
@@ -880,7 +880,7 @@
         },
         "pageToken": {
          "type": "string",
-         "description": "The value returned by the last ListSubscriptionsResponse; indicates that this is a continuation of a prior ListSubscriptions call, and that the system should return the next page of data.",
+         "description": "The value returned by the last `ListSubscriptionsResponse`; indicates that this is a continuation of a prior `ListSubscriptions` call, and that the system should return the next page of data.",
          "location": "query"
         }
        },
@@ -899,7 +899,7 @@
        "id": "pubsub.projects.subscriptions.delete",
        "path": "v1beta2/{+subscription}",
        "httpMethod": "DELETE",
-       "description": "Deletes an existing subscription. All pending messages in the subscription are immediately dropped. Calls to Pull after deletion will return NOT_FOUND. After a subscription is deleted, a new one may be created with the same name, but the new one has no association with the old subscription, or its topic unless the same topic is specified.",
+       "description": "Deletes an existing subscription. All pending messages in the subscription are immediately dropped. Calls to `Pull` after deletion will return `NOT_FOUND`. After a subscription is deleted, a new one may be created with the same name, but the new one has no association with the old subscription, or its topic unless the same topic is specified.",
        "parameters": {
         "subscription": {
          "type": "string",
@@ -952,7 +952,7 @@
        "id": "pubsub.projects.subscriptions.acknowledge",
        "path": "v1beta2/{+subscription}:acknowledge",
        "httpMethod": "POST",
-       "description": "Acknowledges the messages associated with the ack tokens in the AcknowledgeRequest. The Pub/Sub system can remove the relevant messages from the subscription. Acknowledging a message whose ack deadline has expired may succeed, but such a message may be redelivered later. Acknowledging a message more than once will not result in an error.",
+       "description": "Acknowledges the messages associated with the `ack_ids` in the `AcknowledgeRequest`. The Pub/Sub system can remove the relevant messages from the subscription. Acknowledging a message whose ack deadline has expired may succeed, but such a message may be redelivered later. Acknowledging a message more than once will not result in an error.",
        "parameters": {
         "subscription": {
          "type": "string",
@@ -980,7 +980,7 @@
        "id": "pubsub.projects.subscriptions.pull",
        "path": "v1beta2/{+subscription}:pull",
        "httpMethod": "POST",
-       "description": "Pulls messages from the server. Returns an empty list if there are no messages available in the backlog. The server may return UNAVAILABLE if there are too many concurrent pull requests pending for the given subscription.",
+       "description": "Pulls messages from the server. Returns an empty list if there are no messages available in the backlog. The server may return `UNAVAILABLE` if there are too many concurrent pull requests pending for the given subscription.",
        "parameters": {
         "subscription": {
          "type": "string",
@@ -1008,7 +1008,7 @@
        "id": "pubsub.projects.subscriptions.modifyPushConfig",
        "path": "v1beta2/{+subscription}:modifyPushConfig",
        "httpMethod": "POST",
-       "description": "Modifies the PushConfig for a specified subscription. This may be used to change a push subscription to a pull one (signified by an empty PushConfig) or vice versa, or change the endpoint URL and other attributes of a push subscription. Messages will accumulate for delivery continuously through the call regardless of changes to the PushConfig.",
+       "description": "Modifies the `PushConfig` for a specified subscription. This may be used to change a push subscription to a pull one (signified by an empty `PushConfig`) or vice versa, or change the endpoint URL and other attributes of a push subscription. Messages will accumulate for delivery continuously through the call regardless of changes to the `PushConfig`.",
        "parameters": {
         "subscription": {
          "type": "string",
diff --git a/pubsub/v1beta2/pubsub-gen.go b/pubsub/v1beta2/pubsub-gen.go
index 1624007..7a7691b 100644
--- a/pubsub/v1beta2/pubsub-gen.go
+++ b/pubsub/v1beta2/pubsub-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "pubsub:v1beta2"
 const apiName = "pubsub"
@@ -124,7 +126,7 @@
 // AcknowledgeRequest: Request for the Acknowledge method.
 type AcknowledgeRequest struct {
 	// AckIds: The acknowledgment ID for the messages being acknowledged
-	// that was returned by the Pub/Sub system in the Pull response. Must
+	// that was returned by the Pub/Sub system in the `Pull` response. Must
 	// not be empty.
 	AckIds []string `json:"ackIds,omitempty"`
 
@@ -143,22 +145,27 @@
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
 
-// Binding: Associates members with roles. See below for allowed formats
-// of members.
+// Binding: Associates `members` with a `role`.
 type Binding struct {
-	// Members: Format of member entries: 1. allUsers Matches any requesting
-	// principal (users, service accounts or anonymous). 2.
-	// allAuthenticatedUsers Matches any requesting authenticated principal
-	// (users or service accounts). 3. user:{emailid} A google user account
-	// using an email address. For example alice@gmail.com, joe@example.com
-	// 4. serviceAccount:{emailid} An service account email. 5.
-	// group:{emailid} A google group with an email address. For example
-	// auth-ti-cloud@google.com 6. domain:{domain} A Google Apps domain
-	// name. For example google.com, example.com
+	// Members: Specifies the identities requesting access for a Cloud
+	// Platform resource. `members` can have the following formats: *
+	// `allUsers`: A special identifier that represents anyone who is on the
+	// internet; with or without a Google account. *
+	// `allAuthenticatedUsers`: A special identifier that represents anyone
+	// who is authenticated with a Google account or a service account. *
+	// `user:{emailid}`: An email address that represents a specific Google
+	// account. For example, `alice@gmail.com` or `joe@example.com`. *
+	// `serviceAccount:{emailid}`: An email address that represents a
+	// service account. For example,
+	// `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An
+	// email address that represents a Google group. For example,
+	// `admins@example.com`. * `domain:{domain}`: A Google Apps domain name
+	// that represents all the users of that domain. For example,
+	// `google.com` or `example.com`.
 	Members []string `json:"members,omitempty"`
 
-	// Role: The name of the role to which the members should be bound.
-	// Examples: "roles/viewer", "roles/editor", "roles/owner". Required
+	// Role: Role that is assigned to `members`. For example,
+	// `roles/viewer`, `roles/editor`, or `roles/owner`. Required
 	Role string `json:"role,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Members") to
@@ -188,11 +195,12 @@
 	googleapi.ServerResponse `json:"-"`
 }
 
-// ListSubscriptionsResponse: Response for the ListSubscriptions method.
+// ListSubscriptionsResponse: Response for the `ListSubscriptions`
+// method.
 type ListSubscriptionsResponse struct {
 	// NextPageToken: If not empty, indicates that there may be more
 	// subscriptions that match the request; this value should be passed in
-	// a new ListSubscriptionsRequest to get more subscriptions.
+	// a new `ListSubscriptionsRequest` to get more subscriptions.
 	NextPageToken string `json:"nextPageToken,omitempty"`
 
 	// Subscriptions: The subscriptions that match the request.
@@ -218,11 +226,11 @@
 }
 
 // ListTopicSubscriptionsResponse: Response for the
-// ListTopicSubscriptions method.
+// `ListTopicSubscriptions` method.
 type ListTopicSubscriptionsResponse struct {
 	// NextPageToken: If not empty, indicates that there may be more
 	// subscriptions that match the request; this value should be passed in
-	// a new ListTopicSubscriptionsRequest to get more subscriptions.
+	// a new `ListTopicSubscriptionsRequest` to get more subscriptions.
 	NextPageToken string `json:"nextPageToken,omitempty"`
 
 	// Subscriptions: The names of the subscriptions that match the request.
@@ -247,11 +255,11 @@
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
 
-// ListTopicsResponse: Response for the ListTopics method.
+// ListTopicsResponse: Response for the `ListTopics` method.
 type ListTopicsResponse struct {
 	// NextPageToken: If not empty, indicates that there may be more topics
 	// that match the request; this value should be passed in a new
-	// ListTopicsRequest.
+	// `ListTopicsRequest`.
 	NextPageToken string `json:"nextPageToken,omitempty"`
 
 	// Topics: The resulting topics.
@@ -281,7 +289,7 @@
 	// AckDeadlineSeconds: The new ack deadline with respect to the time
 	// this request was sent to the Pub/Sub system. Must be >= 0. For
 	// example, if the value is 10, the new ack deadline will expire 10
-	// seconds after the ModifyAckDeadline call was made. Specifying zero
+	// seconds after the `ModifyAckDeadline` call was made. Specifying zero
 	// may immediately make the message available for another pull request.
 	AckDeadlineSeconds int64 `json:"ackDeadlineSeconds,omitempty"`
 
@@ -310,9 +318,9 @@
 // ModifyPushConfigRequest: Request for the ModifyPushConfig method.
 type ModifyPushConfigRequest struct {
 	// PushConfig: The push configuration for future deliveries. An empty
-	// pushConfig indicates that the Pub/Sub system should stop pushing
+	// `pushConfig` indicates that the Pub/Sub system should stop pushing
 	// messages from the given subscription and allow messages to be pulled
-	// and acknowledged - effectively pausing the subscription if Pull is
+	// and acknowledged - effectively pausing the subscription if `Pull` is
 	// not called.
 	PushConfig *PushConfig `json:"pushConfig,omitempty"`
 
@@ -331,33 +339,28 @@
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
 
-// Policy: # Overview The `Policy` defines an access control policy
-// language. It is used to define policies that are attached to
-// resources like files, folders, VMs, etc. # Policy structure A
-// `Policy` consists of a list of bindings. A `Binding` binds a set of
-// members to a role, where the members include user accounts, user
-// groups, user domains, and service accounts. A 'role' is a named set
-// of permissions, defined by IAM. The definition of a role is outside
-// the policy. A permission check first determines the roles that
-// include the specified permission, and then determines if the
-// principal specified is a member of a binding to at least one of these
-// roles. The membership check is recursive when a group is bound to a
-// role. Policy examples: ``` { "bindings": [ { "role": "roles/owner",
-// "members": [ "user:mike@example.com", "group:admins@example.com",
-// "domain:google.com",
-// "serviceAccount:frontend@example.iam.gserviceaccounts.com"] }, {
+// Policy: Defines an Identity and Access Management (IAM) policy. It is
+// used to specify access control policies for Cloud Platform resources.
+// A `Policy` consists of a list of `bindings`. A `Binding` binds a list
+// of `members` to a `role`, where the members can be user accounts,
+// Google groups, Google domains, and service accounts. A `role` is a
+// named list of permissions defined by IAM. **Example** { "bindings": [
+// { "role": "roles/owner", "members": [ "user:mike@example.com",
+// "group:admins@example.com", "domain:google.com",
+// "serviceAccount:my-other-app@appspot.gserviceaccount.com"] }, {
 // "role": "roles/viewer", "members": ["user:sean@example.com"] } ] }
-// ```
+// For a description of IAM and its features, see the [IAM developer's
+// guide](https://cloud.google.com/iam).
 type Policy struct {
-	// Bindings: It is an error to specify multiple bindings for the same
-	// role. It is an error to specify a binding with no members.
+	// Bindings: Associates a list of `members` to a `role`. Multiple
+	// `bindings` must not be specified for the same `role`. `bindings` with
+	// no members will result in an error.
 	Bindings []*Binding `json:"bindings,omitempty"`
 
 	// Etag: Can be used to perform a read-modify-write.
 	Etag string `json:"etag,omitempty"`
 
-	// Version: The policy language version. The version of the policy is
-	// represented by the etag. The default version is 0.
+	// Version: Version of the `Policy`. The default version is 0.
 	Version int64 `json:"version,omitempty"`
 
 	// ServerResponse contains the HTTP response code and headers from the
@@ -399,7 +402,7 @@
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
 
-// PublishResponse: Response for the Publish method.
+// PublishResponse: Response for the `Publish` method.
 type PublishResponse struct {
 	// MessageIds: The server-assigned ID of each published message, in the
 	// same order as the messages in the request. IDs are guaranteed to be
@@ -438,9 +441,9 @@
 
 	// MessageId: ID of this message assigned by the server at publication
 	// time. 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 a publisher in a Publish
-	// call.
+	// read by a subscriber that receives a `PubsubMessage` via a `Pull`
+	// call or a push delivery. It must not be populated by a publisher in a
+	// `Publish` call.
 	MessageId string `json:"messageId,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Attributes") to
@@ -458,7 +461,7 @@
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
 
-// PullRequest: Request for the Pull method.
+// PullRequest: Request for the `Pull` method.
 type PullRequest struct {
 	// MaxMessages: The maximum number of messages returned for this
 	// request. The Pub/Sub system may return fewer than the number
@@ -467,8 +470,8 @@
 
 	// ReturnImmediately: If this is specified as true the system will
 	// respond immediately even if it is not able to return a message in the
-	// Pull response. Otherwise the system is allowed to wait until at least
-	// one message is available rather than returning no messages. The
+	// `Pull` response. Otherwise the system is allowed to wait until at
+	// least one message is available rather than returning no messages. The
 	// client may cancel the request if it does not wish to wait any longer
 	// for the response.
 	ReturnImmediately bool `json:"returnImmediately,omitempty"`
@@ -488,11 +491,11 @@
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
 
-// PullResponse: Response for the Pull method.
+// PullResponse: Response for the `Pull` method.
 type PullResponse struct {
 	// ReceivedMessages: Received Pub/Sub messages. The Pub/Sub system will
 	// return zero messages if there are no more available in the backlog.
-	// The Pub/Sub system may return fewer than the maxMessages requested
+	// The Pub/Sub system may return fewer than the `maxMessages` requested
 	// even if there are more messages available in the backlog.
 	ReceivedMessages []*ReceivedMessage `json:"receivedMessages,omitempty"`
 
@@ -524,10 +527,10 @@
 	// message. This attribute indicates the version of the data expected by
 	// the endpoint. This controls the shape of the envelope (i.e. its
 	// fields and metadata). The endpoint version is based on the version of
-	// the Pub/Sub API. If not present during the CreateSubscription call,
+	// the Pub/Sub API. If not present during the `CreateSubscription` call,
 	// it will default to the version of the API used to make such call. If
-	// not present during a ModifyPushConfig call, its value will not be
-	// changed. GetSubscription calls will always return a valid version,
+	// not present during a `ModifyPushConfig` call, its value will not be
+	// changed. `GetSubscription` calls will always return a valid version,
 	// even if the subscription was created without this attribute. The
 	// possible values for this attribute are: * `v1beta1`: uses the push
 	// format defined in the v1beta1 Pub/Sub API. * `v1` or `v1beta2`: uses
@@ -580,9 +583,9 @@
 // SetIamPolicyRequest: Request message for `SetIamPolicy` method.
 type SetIamPolicyRequest struct {
 	// Policy: REQUIRED: The complete policy to be applied to the
-	// 'resource'. The size of the policy is limited to a few 10s of KB. An
-	// empty policy is in general a valid policy but certain services (like
-	// Projects) might reject them.
+	// `resource`. The size of the policy is limited to a few 10s of KB. An
+	// empty policy is a valid policy but certain Cloud Platform services
+	// (such as Projects) might reject them.
 	Policy *Policy `json:"policy,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Policy") to
@@ -609,11 +612,11 @@
 	// and will not be delivered again during that time (on a best-effort
 	// basis). For pull delivery this value is used as the initial value for
 	// the ack deadline. To override this value for a given message, call
-	// ModifyAckDeadline with the corresponding ack_id. For push delivery,
-	// this value is also used to set the request timeout for the call to
-	// the push endpoint. If the subscriber never acknowledges the message,
-	// the Pub/Sub system will eventually redeliver the message. If this
-	// parameter is not set, the default value of 10 seconds is used.
+	// `ModifyAckDeadline` with the corresponding `ack_id`. For push
+	// delivery, this value is also used to set the request timeout for the
+	// call to the push endpoint. If the subscriber never acknowledges the
+	// message, the Pub/Sub system will eventually redeliver the message. If
+	// this parameter is not set, the default value of 10 seconds is used.
 	AckDeadlineSeconds int64 `json:"ackDeadlineSeconds,omitempty"`
 
 	// Name: The name of the subscription. It must have the format
@@ -625,8 +628,8 @@
 	Name string `json:"name,omitempty"`
 
 	// PushConfig: If push delivery is used with this subscription, this
-	// field is used to configure it. An empty pushConfig signifies that the
-	// subscriber will pull and ack messages using API methods.
+	// field is used to configure it. An empty `pushConfig` signifies that
+	// the subscriber will pull and ack messages using API methods.
 	PushConfig *PushConfig `json:"pushConfig,omitempty"`
 
 	// Topic: The name of the topic from which this subscription is
@@ -656,7 +659,7 @@
 // TestIamPermissionsRequest: Request message for `TestIamPermissions`
 // method.
 type TestIamPermissionsRequest struct {
-	// Permissions: The set of permissions to check for the 'resource'.
+	// Permissions: The set of permissions to check for the `resource`.
 	// Permissions with wildcards (such as '*' or 'storage.*') are not
 	// allowed.
 	Permissions []string `json:"permissions,omitempty"`
@@ -741,10 +744,10 @@
 	ctx_               context.Context
 }
 
-// Acknowledge: Acknowledges the messages associated with the ack tokens
-// in the AcknowledgeRequest. The Pub/Sub system can remove the relevant
-// messages from the subscription. Acknowledging a message whose ack
-// deadline has expired may succeed, but such a message may be
+// Acknowledge: Acknowledges the messages associated with the `ack_ids`
+// in the `AcknowledgeRequest`. The Pub/Sub system can remove the
+// relevant messages from the subscription. Acknowledging a message
+// whose ack deadline has expired may succeed, but such a message may be
 // redelivered later. Acknowledging a message more than once will not
 // result in an error.
 func (r *ProjectsSubscriptionsService) Acknowledge(subscription string, acknowledgerequest *AcknowledgeRequest) *ProjectsSubscriptionsAcknowledgeCall {
@@ -832,7 +835,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Acknowledges the messages associated with the ack tokens in the AcknowledgeRequest. The Pub/Sub system can remove the relevant messages from the subscription. Acknowledging a message whose ack deadline has expired may succeed, but such a message may be redelivered later. Acknowledging a message more than once will not result in an error.",
+	//   "description": "Acknowledges the messages associated with the `ack_ids` in the `AcknowledgeRequest`. The Pub/Sub system can remove the relevant messages from the subscription. Acknowledging a message whose ack deadline has expired may succeed, but such a message may be redelivered later. Acknowledging a message more than once will not result in an error.",
 	//   "httpMethod": "POST",
 	//   "id": "pubsub.projects.subscriptions.acknowledge",
 	//   "parameterOrder": [
@@ -874,8 +877,8 @@
 
 // Create: Creates a subscription to a given topic for a given
 // subscriber. If the subscription already exists, returns
-// ALREADY_EXISTS. If the corresponding topic doesn't exist, returns
-// NOT_FOUND. If the name is not provided in the request, the server
+// `ALREADY_EXISTS`. If the corresponding topic doesn't exist, returns
+// `NOT_FOUND`. If the name is not provided in the request, the server
 // will assign a random name for this subscription on the same project
 // as the topic.
 func (r *ProjectsSubscriptionsService) Create(name string, subscription *Subscription) *ProjectsSubscriptionsCreateCall {
@@ -963,7 +966,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Creates a subscription to a given topic for a given subscriber. If the subscription already exists, returns ALREADY_EXISTS. If the corresponding topic doesn't exist, returns NOT_FOUND. If the name is not provided in the request, the server will assign a random name for this subscription on the same project as the topic.",
+	//   "description": "Creates a subscription to a given topic for a given subscriber. If the subscription already exists, returns `ALREADY_EXISTS`. If the corresponding topic doesn't exist, returns `NOT_FOUND`. If the name is not provided in the request, the server will assign a random name for this subscription on the same project as the topic.",
 	//   "httpMethod": "PUT",
 	//   "id": "pubsub.projects.subscriptions.create",
 	//   "parameterOrder": [
@@ -1003,9 +1006,9 @@
 }
 
 // Delete: Deletes an existing subscription. All pending messages in the
-// subscription are immediately dropped. Calls to Pull after deletion
-// will return NOT_FOUND. After a subscription is deleted, a new one may
-// be created with the same name, but the new one has no association
+// subscription are immediately dropped. Calls to `Pull` after deletion
+// will return `NOT_FOUND`. After a subscription is deleted, a new one
+// may be created with the same name, but the new one has no association
 // with the old subscription, or its topic unless the same topic is
 // specified.
 func (r *ProjectsSubscriptionsService) Delete(subscription string) *ProjectsSubscriptionsDeleteCall {
@@ -1086,7 +1089,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Deletes an existing subscription. All pending messages in the subscription are immediately dropped. Calls to Pull after deletion will return NOT_FOUND. After a subscription is deleted, a new one may be created with the same name, but the new one has no association with the old subscription, or its topic unless the same topic is specified.",
+	//   "description": "Deletes an existing subscription. All pending messages in the subscription are immediately dropped. Calls to `Pull` after deletion will return `NOT_FOUND`. After a subscription is deleted, a new one may be created with the same name, but the new one has no association with the old subscription, or its topic unless the same topic is specified.",
 	//   "httpMethod": "DELETE",
 	//   "id": "pubsub.projects.subscriptions.delete",
 	//   "parameterOrder": [
@@ -1250,8 +1253,8 @@
 	ctx_     context.Context
 }
 
-// GetIamPolicy: Gets the access control policy for a resource. Is empty
-// if the policy or the resource does not exist.
+// GetIamPolicy: Gets the access control policy for a `resource`. Is
+// empty if the policy or the resource does not exist.
 func (r *ProjectsSubscriptionsService) GetIamPolicy(resource string) *ProjectsSubscriptionsGetIamPolicyCall {
 	c := &ProjectsSubscriptionsGetIamPolicyCall{s: r.s, opt_: make(map[string]interface{})}
 	c.resource = resource
@@ -1343,7 +1346,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Gets the access control policy for a resource. Is empty if the policy or the resource does not exist.",
+	//   "description": "Gets the access control policy for a `resource`. Is empty if the policy or the resource does not exist.",
 	//   "httpMethod": "GET",
 	//   "id": "pubsub.projects.subscriptions.getIamPolicy",
 	//   "parameterOrder": [
@@ -1351,7 +1354,7 @@
 	//   ],
 	//   "parameters": {
 	//     "resource": {
-	//       "description": "REQUIRED: The resource for which policy is being requested. Resource is usually specified as a path, such as, projects/{project}.",
+	//       "description": "REQUIRED: The resource for which policy is being requested. Resource is usually specified as a path, such as, `projects/{project}`.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]*/subscriptions/[^/]*$",
 	//       "required": true,
@@ -1394,8 +1397,8 @@
 }
 
 // PageToken sets the optional parameter "pageToken": The value returned
-// by the last ListSubscriptionsResponse; indicates that this is a
-// continuation of a prior ListSubscriptions call, and that the system
+// by the last `ListSubscriptionsResponse`; indicates that this is a
+// continuation of a prior `ListSubscriptions` call, and that the system
 // should return the next page of data.
 func (c *ProjectsSubscriptionsListCall) PageToken(pageToken string) *ProjectsSubscriptionsListCall {
 	c.opt_["pageToken"] = pageToken
@@ -1507,7 +1510,7 @@
 	//       "type": "integer"
 	//     },
 	//     "pageToken": {
-	//       "description": "The value returned by the last ListSubscriptionsResponse; indicates that this is a continuation of a prior ListSubscriptions call, and that the system should return the next page of data.",
+	//       "description": "The value returned by the last `ListSubscriptionsResponse`; indicates that this is a continuation of a prior `ListSubscriptions` call, and that the system should return the next page of data.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
@@ -1670,12 +1673,12 @@
 	ctx_                    context.Context
 }
 
-// ModifyPushConfig: Modifies the PushConfig for a specified
+// ModifyPushConfig: Modifies the `PushConfig` for a specified
 // subscription. This may be used to change a push subscription to a
-// pull one (signified by an empty PushConfig) or vice versa, or change
-// the endpoint URL and other attributes of a push subscription.
+// pull one (signified by an empty `PushConfig`) or vice versa, or
+// change the endpoint URL and other attributes of a push subscription.
 // Messages will accumulate for delivery continuously through the call
-// regardless of changes to the PushConfig.
+// regardless of changes to the `PushConfig`.
 func (r *ProjectsSubscriptionsService) ModifyPushConfig(subscription string, modifypushconfigrequest *ModifyPushConfigRequest) *ProjectsSubscriptionsModifyPushConfigCall {
 	c := &ProjectsSubscriptionsModifyPushConfigCall{s: r.s, opt_: make(map[string]interface{})}
 	c.subscription = subscription
@@ -1761,7 +1764,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Modifies the PushConfig for a specified subscription. This may be used to change a push subscription to a pull one (signified by an empty PushConfig) or vice versa, or change the endpoint URL and other attributes of a push subscription. Messages will accumulate for delivery continuously through the call regardless of changes to the PushConfig.",
+	//   "description": "Modifies the `PushConfig` for a specified subscription. This may be used to change a push subscription to a pull one (signified by an empty `PushConfig`) or vice versa, or change the endpoint URL and other attributes of a push subscription. Messages will accumulate for delivery continuously through the call regardless of changes to the `PushConfig`.",
 	//   "httpMethod": "POST",
 	//   "id": "pubsub.projects.subscriptions.modifyPushConfig",
 	//   "parameterOrder": [
@@ -1803,7 +1806,7 @@
 
 // Pull: Pulls messages from the server. Returns an empty list if there
 // are no messages available in the backlog. The server may return
-// UNAVAILABLE if there are too many concurrent pull requests pending
+// `UNAVAILABLE` if there are too many concurrent pull requests pending
 // for the given subscription.
 func (r *ProjectsSubscriptionsService) Pull(subscription string, pullrequest *PullRequest) *ProjectsSubscriptionsPullCall {
 	c := &ProjectsSubscriptionsPullCall{s: r.s, opt_: make(map[string]interface{})}
@@ -1890,7 +1893,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Pulls messages from the server. Returns an empty list if there are no messages available in the backlog. The server may return UNAVAILABLE if there are too many concurrent pull requests pending for the given subscription.",
+	//   "description": "Pulls messages from the server. Returns an empty list if there are no messages available in the backlog. The server may return `UNAVAILABLE` if there are too many concurrent pull requests pending for the given subscription.",
 	//   "httpMethod": "POST",
 	//   "id": "pubsub.projects.subscriptions.pull",
 	//   "parameterOrder": [
@@ -2025,7 +2028,7 @@
 	//   ],
 	//   "parameters": {
 	//     "resource": {
-	//       "description": "REQUIRED: The resource for which policy is being specified. Resource is usually specified as a path, such as, projects/{project}/zones/{zone}/disks/{disk}.",
+	//       "description": "REQUIRED: The resource for which policy is being specified. `resource` is usually specified as a path, such as, `projects/{project}/zones/{zone}/disks/{disk}`.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]*/subscriptions/[^/]*$",
 	//       "required": true,
@@ -2152,7 +2155,7 @@
 	//   ],
 	//   "parameters": {
 	//     "resource": {
-	//       "description": "REQUIRED: The resource for which policy detail is being requested. Resource is usually specified as a path, such as, projects/{project}.",
+	//       "description": "REQUIRED: The resource for which policy detail is being requested. `resource` is usually specified as a path, such as, `projects/{project}`.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]*/subscriptions/[^/]*$",
 	//       "required": true,
@@ -2309,7 +2312,7 @@
 	ctx_  context.Context
 }
 
-// Delete: Deletes the topic with the given name. Returns NOT_FOUND if
+// Delete: Deletes the topic with the given name. Returns `NOT_FOUND` if
 // the topic does not exist. After a topic is deleted, a new topic may
 // be created with the same name; this is an entirely new topic with
 // none of the old configuration or subscriptions. Existing
@@ -2393,7 +2396,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Deletes the topic with the given name. Returns NOT_FOUND if the topic does not exist. After a topic is deleted, a new topic may be created with the same name; this is an entirely new topic with none of the old configuration or subscriptions. Existing subscriptions to this topic are not deleted, but their `topic` field is set to `_deleted-topic_`.",
+	//   "description": "Deletes the topic with the given name. Returns `NOT_FOUND` if the topic does not exist. After a topic is deleted, a new topic may be created with the same name; this is an entirely new topic with none of the old configuration or subscriptions. Existing subscriptions to this topic are not deleted, but their `topic` field is set to `_deleted-topic_`.",
 	//   "httpMethod": "DELETE",
 	//   "id": "pubsub.projects.topics.delete",
 	//   "parameterOrder": [
@@ -2557,8 +2560,8 @@
 	ctx_     context.Context
 }
 
-// GetIamPolicy: Gets the access control policy for a resource. Is empty
-// if the policy or the resource does not exist.
+// GetIamPolicy: Gets the access control policy for a `resource`. Is
+// empty if the policy or the resource does not exist.
 func (r *ProjectsTopicsService) GetIamPolicy(resource string) *ProjectsTopicsGetIamPolicyCall {
 	c := &ProjectsTopicsGetIamPolicyCall{s: r.s, opt_: make(map[string]interface{})}
 	c.resource = resource
@@ -2650,7 +2653,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Gets the access control policy for a resource. Is empty if the policy or the resource does not exist.",
+	//   "description": "Gets the access control policy for a `resource`. Is empty if the policy or the resource does not exist.",
 	//   "httpMethod": "GET",
 	//   "id": "pubsub.projects.topics.getIamPolicy",
 	//   "parameterOrder": [
@@ -2658,7 +2661,7 @@
 	//   ],
 	//   "parameters": {
 	//     "resource": {
-	//       "description": "REQUIRED: The resource for which policy is being requested. Resource is usually specified as a path, such as, projects/{project}.",
+	//       "description": "REQUIRED: The resource for which policy is being requested. Resource is usually specified as a path, such as, `projects/{project}`.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]*/topics/[^/]*$",
 	//       "required": true,
@@ -2701,9 +2704,9 @@
 }
 
 // PageToken sets the optional parameter "pageToken": The value returned
-// by the last ListTopicsResponse; indicates that this is a continuation
-// of a prior ListTopics call, and that the system should return the
-// next page of data.
+// by the last `ListTopicsResponse`; indicates that this is a
+// continuation of a prior `ListTopics` call, and that the system should
+// return the next page of data.
 func (c *ProjectsTopicsListCall) PageToken(pageToken string) *ProjectsTopicsListCall {
 	c.opt_["pageToken"] = pageToken
 	return c
@@ -2814,7 +2817,7 @@
 	//       "type": "integer"
 	//     },
 	//     "pageToken": {
-	//       "description": "The value returned by the last ListTopicsResponse; indicates that this is a continuation of a prior ListTopics call, and that the system should return the next page of data.",
+	//       "description": "The value returned by the last `ListTopicsResponse`; indicates that this is a continuation of a prior `ListTopics` call, and that the system should return the next page of data.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
@@ -2848,9 +2851,9 @@
 	ctx_           context.Context
 }
 
-// Publish: Adds one or more messages to the topic. Returns NOT_FOUND if
-// the topic does not exist. The message payload must not be empty; it
-// must contain either a non-empty data field, or at least one
+// Publish: Adds one or more messages to the topic. Returns `NOT_FOUND`
+// if the topic does not exist. The message payload must not be empty;
+// it must contain either a non-empty data field, or at least one
 // attribute.
 func (r *ProjectsTopicsService) Publish(topic string, publishrequest *PublishRequest) *ProjectsTopicsPublishCall {
 	c := &ProjectsTopicsPublishCall{s: r.s, opt_: make(map[string]interface{})}
@@ -2937,7 +2940,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Adds one or more messages to the topic. Returns NOT_FOUND if the topic does not exist. The message payload must not be empty; it must contain either a non-empty data field, or at least one attribute.",
+	//   "description": "Adds one or more messages to the topic. Returns `NOT_FOUND` if the topic does not exist. The message payload must not be empty; it must contain either a non-empty data field, or at least one attribute.",
 	//   "httpMethod": "POST",
 	//   "id": "pubsub.projects.topics.publish",
 	//   "parameterOrder": [
@@ -3072,7 +3075,7 @@
 	//   ],
 	//   "parameters": {
 	//     "resource": {
-	//       "description": "REQUIRED: The resource for which policy is being specified. Resource is usually specified as a path, such as, projects/{project}/zones/{zone}/disks/{disk}.",
+	//       "description": "REQUIRED: The resource for which policy is being specified. `resource` is usually specified as a path, such as, `projects/{project}/zones/{zone}/disks/{disk}`.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]*/topics/[^/]*$",
 	//       "required": true,
@@ -3199,7 +3202,7 @@
 	//   ],
 	//   "parameters": {
 	//     "resource": {
-	//       "description": "REQUIRED: The resource for which policy detail is being requested. Resource is usually specified as a path, such as, projects/{project}.",
+	//       "description": "REQUIRED: The resource for which policy detail is being requested. `resource` is usually specified as a path, such as, `projects/{project}`.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]*/topics/[^/]*$",
 	//       "required": true,
@@ -3245,8 +3248,8 @@
 }
 
 // PageToken sets the optional parameter "pageToken": The value returned
-// by the last ListTopicSubscriptionsResponse; indicates that this is a
-// continuation of a prior ListTopicSubscriptions call, and that the
+// by the last `ListTopicSubscriptionsResponse`; indicates that this is
+// a continuation of a prior `ListTopicSubscriptions` call, and that the
 // system should return the next page of data.
 func (c *ProjectsTopicsSubscriptionsListCall) PageToken(pageToken string) *ProjectsTopicsSubscriptionsListCall {
 	c.opt_["pageToken"] = pageToken
@@ -3358,7 +3361,7 @@
 	//       "type": "integer"
 	//     },
 	//     "pageToken": {
-	//       "description": "The value returned by the last ListTopicSubscriptionsResponse; indicates that this is a continuation of a prior ListTopicSubscriptions call, and that the system should return the next page of data.",
+	//       "description": "The value returned by the last `ListTopicSubscriptionsResponse`; indicates that this is a continuation of a prior `ListTopicSubscriptions` call, and that the system should return the next page of data.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
diff --git a/qpxexpress/v1/qpxexpress-gen.go b/qpxexpress/v1/qpxexpress-gen.go
index c630965..d15e7a1 100644
--- a/qpxexpress/v1/qpxexpress-gen.go
+++ b/qpxexpress/v1/qpxexpress-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "qpxExpress:v1"
 const apiName = "qpxExpress"
diff --git a/replicapool/v1beta1/replicapool-gen.go b/replicapool/v1beta1/replicapool-gen.go
index 6e281ef..d847cb3 100644
--- a/replicapool/v1beta1/replicapool-gen.go
+++ b/replicapool/v1beta1/replicapool-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "replicapool:v1beta1"
 const apiName = "replicapool"
diff --git a/replicapool/v1beta2/replicapool-gen.go b/replicapool/v1beta2/replicapool-gen.go
index dce418b..ee09d3d 100644
--- a/replicapool/v1beta2/replicapool-gen.go
+++ b/replicapool/v1beta2/replicapool-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "replicapool:v1beta2"
 const apiName = "replicapool"
diff --git a/replicapoolupdater/v1beta1/replicapoolupdater-gen.go b/replicapoolupdater/v1beta1/replicapoolupdater-gen.go
index 920ae11..e65cbac 100644
--- a/replicapoolupdater/v1beta1/replicapoolupdater-gen.go
+++ b/replicapoolupdater/v1beta1/replicapoolupdater-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "replicapoolupdater:v1beta1"
 const apiName = "replicapoolupdater"
diff --git a/reseller/v1/reseller-gen.go b/reseller/v1/reseller-gen.go
index 4cc9d81..054cfdc 100644
--- a/reseller/v1/reseller-gen.go
+++ b/reseller/v1/reseller-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "reseller:v1"
 const apiName = "reseller"
diff --git a/reseller/v1sandbox/reseller-gen.go b/reseller/v1sandbox/reseller-gen.go
index c2e9f3c..cf3ac85 100644
--- a/reseller/v1sandbox/reseller-gen.go
+++ b/reseller/v1sandbox/reseller-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "reseller:v1sandbox"
 const apiName = "reseller"
diff --git a/resourceviews/v1beta1/resourceviews-gen.go b/resourceviews/v1beta1/resourceviews-gen.go
index ca7a219..7341b09 100644
--- a/resourceviews/v1beta1/resourceviews-gen.go
+++ b/resourceviews/v1beta1/resourceviews-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "resourceviews:v1beta1"
 const apiName = "resourceviews"
diff --git a/resourceviews/v1beta2/resourceviews-gen.go b/resourceviews/v1beta2/resourceviews-gen.go
index 72bf23f..24676cd 100644
--- a/resourceviews/v1beta2/resourceviews-gen.go
+++ b/resourceviews/v1beta2/resourceviews-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "resourceviews:v1beta2"
 const apiName = "resourceviews"
diff --git a/script/v1/script-gen.go b/script/v1/script-gen.go
index 307faa5..1f78d32 100644
--- a/script/v1/script-gen.go
+++ b/script/v1/script-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "script:v1"
 const apiName = "script"
diff --git a/siteverification/v1/siteverification-gen.go b/siteverification/v1/siteverification-gen.go
index 6573659..a0fa3bb 100644
--- a/siteverification/v1/siteverification-gen.go
+++ b/siteverification/v1/siteverification-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "siteVerification:v1"
 const apiName = "siteVerification"
diff --git a/spectrum/v1explorer/spectrum-gen.go b/spectrum/v1explorer/spectrum-gen.go
index 4847ba0..6b50d68 100644
--- a/spectrum/v1explorer/spectrum-gen.go
+++ b/spectrum/v1explorer/spectrum-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "spectrum:v1explorer"
 const apiName = "spectrum"
diff --git a/sqladmin/v1beta3/sqladmin-gen.go b/sqladmin/v1beta3/sqladmin-gen.go
index 7f878cc..c1dfbdc 100644
--- a/sqladmin/v1beta3/sqladmin-gen.go
+++ b/sqladmin/v1beta3/sqladmin-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "sqladmin:v1beta3"
 const apiName = "sqladmin"
diff --git a/sqladmin/v1beta4/sqladmin-api.json b/sqladmin/v1beta4/sqladmin-api.json
index 41e1eaa..d3b8359 100644
--- a/sqladmin/v1beta4/sqladmin-api.json
+++ b/sqladmin/v1beta4/sqladmin-api.json
@@ -1,12 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/CdVfU5tbn5VgAny3uzYYuohH1xY\"",
+ "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/dmM5e1LsyAJYfrXQoy2C4h3tVuA\"",
  "discoveryVersion": "v1",
  "id": "sqladmin:v1beta4",
  "name": "sqladmin",
  "canonicalName": "SQL Admin",
  "version": "v1beta4",
- "revision": "20150825",
+ "revision": "20151013",
  "title": "Cloud SQL Administration API",
  "description": "API for Cloud SQL database instance management.",
  "ownerDomain": "google.com",
@@ -479,7 +479,7 @@
      "properties": {
       "schemaOnly": {
        "type": "boolean",
-       "description": "Export only schema."
+       "description": "Export only schemas."
       },
       "tables": {
        "type": "array",
@@ -496,6 +496,23 @@
     }
    }
   },
+  "FailoverContext": {
+   "id": "FailoverContext",
+   "type": "object",
+   "description": "Database instance failover context.",
+   "properties": {
+    "kind": {
+     "type": "string",
+     "description": "This is always sql#failoverContext.",
+     "default": "sql#failoverContext"
+    },
+    "settingsVersion": {
+     "type": "string",
+     "description": "The current settings version of this instance. Request will be rejected if this version doesn't match the current settings version.",
+     "format": "int64"
+    }
+   }
+  },
   "Flag": {
    "id": "Flag",
    "type": "object",
@@ -510,7 +527,7 @@
     },
     "appliesTo": {
      "type": "array",
-     "description": "The database version this flag applies to. Currently this can only be [MYSQL_5_5].",
+     "description": "The database version this flag applies to. Can be MYSQL_5_5, MYSQL_5_6, or both.",
      "items": {
       "type": "string"
      }
@@ -622,6 +639,17 @@
     }
    }
   },
+  "InstancesFailoverRequest": {
+   "id": "InstancesFailoverRequest",
+   "type": "object",
+   "description": "Instance failover request.",
+   "properties": {
+    "failoverContext": {
+     "$ref": "FailoverContext",
+     "description": "Failover Context."
+    }
+   }
+  },
   "InstancesImportRequest": {
    "id": "InstancesImportRequest",
    "type": "object",
@@ -933,6 +961,10 @@
    "type": "object",
    "description": "Read-replica configuration for connecting to the master.",
    "properties": {
+    "failoverTarget": {
+     "type": "boolean",
+     "description": "Specifies if the replica is the failover target. If the field is set to true the replica will be designated as a failover replica. In case the master instance fails, the replica instance will be promoted as the new master instance.\nOnly one replica can be specified as failover target, and the replica has to be in different zone with the master instance."
+    },
     "kind": {
      "type": "string",
      "description": "This is always sql#replicaConfiguration.",
@@ -994,6 +1026,11 @@
      "type": "boolean",
      "description": "Configuration specific to read replica instances. Indicates whether database flags for crash-safe replication are enabled."
     },
+    "dataDiskSizeGb": {
+     "type": "string",
+     "description": "The size of data disk for the performance instance, specified in GB. Setting this value for non-performance instances will result in an error.",
+     "format": "int64"
+    },
     "databaseFlags": {
      "type": "array",
      "description": "The database flags passed to the instance at startup.",
@@ -1293,7 +1330,7 @@
      "parameters": {
       "id": {
        "type": "string",
-       "description": "The ID of the Backup Run to delete.",
+       "description": "The ID of the Backup Run to delete. To find a Backup Run ID, use the list method.",
        "required": true,
        "format": "int64",
        "location": "path"
@@ -1751,6 +1788,40 @@
       "https://www.googleapis.com/auth/cloud-platform"
      ]
     },
+    "failover": {
+     "id": "sql.instances.failover",
+     "path": "projects/{project}/instances/{instance}/failover",
+     "httpMethod": "POST",
+     "description": "Failover the instance to its failover replica instance.",
+     "parameters": {
+      "instance": {
+       "type": "string",
+       "description": "Cloud SQL instance ID. This does not include the project ID.",
+       "required": true,
+       "location": "path"
+      },
+      "project": {
+       "type": "string",
+       "description": "ID of the project that contains the read replica.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "instance"
+     ],
+     "request": {
+      "$ref": "InstancesFailoverRequest"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/cloud-platform",
+      "https://www.googleapis.com/auth/sqlservice.admin"
+     ]
+    },
     "get": {
      "id": "sql.instances.get",
      "path": "projects/{project}/instances/{instance}",
diff --git a/sqladmin/v1beta4/sqladmin-gen.go b/sqladmin/v1beta4/sqladmin-gen.go
index a638f72..cf4e147 100644
--- a/sqladmin/v1beta4/sqladmin-gen.go
+++ b/sqladmin/v1beta4/sqladmin-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "sqladmin:v1beta4"
 const apiName = "sqladmin"
@@ -657,7 +659,7 @@
 // ExportContextSqlExportOptions: Options for exporting data as SQL
 // statements.
 type ExportContextSqlExportOptions struct {
-	// SchemaOnly: Export only schema.
+	// SchemaOnly: Export only schemas.
 	SchemaOnly bool `json:"schemaOnly,omitempty"`
 
 	// Tables: Tables to export, or that were exported, from the specified
@@ -679,14 +681,39 @@
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
 
+// FailoverContext: Database instance failover context.
+type FailoverContext struct {
+	// Kind: This is always sql#failoverContext.
+	Kind string `json:"kind,omitempty"`
+
+	// SettingsVersion: The current settings version of this instance.
+	// Request will be rejected if this version doesn't match the current
+	// settings version.
+	SettingsVersion int64 `json:"settingsVersion,omitempty,string"`
+
+	// 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:"-"`
+}
+
+func (s *FailoverContext) MarshalJSON() ([]byte, error) {
+	type noMethod FailoverContext
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
 // Flag: A Google Cloud SQL service flag resource.
 type Flag struct {
 	// AllowedStringValues: For STRING flags, a list of strings that the
 	// value can be set to.
 	AllowedStringValues []string `json:"allowedStringValues,omitempty"`
 
-	// AppliesTo: The database version this flag applies to. Currently this
-	// can only be [MYSQL_5_5].
+	// AppliesTo: The database version this flag applies to. Can be
+	// MYSQL_5_5, MYSQL_5_6, or both.
 	AppliesTo []string `json:"appliesTo,omitempty"`
 
 	// Kind: This is always sql#flag.
@@ -852,6 +879,26 @@
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
 
+// InstancesFailoverRequest: Instance failover request.
+type InstancesFailoverRequest struct {
+	// FailoverContext: Failover Context.
+	FailoverContext *FailoverContext `json:"failoverContext,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "FailoverContext") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *InstancesFailoverRequest) MarshalJSON() ([]byte, error) {
+	type noMethod InstancesFailoverRequest
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
 // InstancesImportRequest: Database instance import request.
 type InstancesImportRequest struct {
 	// ImportContext: Contains details about the import operation.
@@ -1267,6 +1314,14 @@
 // ReplicaConfiguration: Read-replica configuration for connecting to
 // the master.
 type ReplicaConfiguration struct {
+	// FailoverTarget: Specifies if the replica is the failover target. If
+	// the field is set to true the replica will be designated as a failover
+	// replica. In case the master instance fails, the replica instance will
+	// be promoted as the new master instance.
+	// Only one replica can be specified as failover target, and the replica
+	// has to be in different zone with the master instance.
+	FailoverTarget bool `json:"failoverTarget,omitempty"`
+
 	// Kind: This is always sql#replicaConfiguration.
 	Kind string `json:"kind,omitempty"`
 
@@ -1279,7 +1334,7 @@
 	// data directory.
 	MysqlReplicaConfiguration *MySqlReplicaConfiguration `json:"mysqlReplicaConfiguration,omitempty"`
 
-	// ForceSendFields is a list of field names (e.g. "Kind") to
+	// ForceSendFields is a list of field names (e.g. "FailoverTarget") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
 	// non-interface field appearing in ForceSendFields will be sent to the
@@ -1343,6 +1398,11 @@
 	// replication are enabled.
 	CrashSafeReplicationEnabled bool `json:"crashSafeReplicationEnabled,omitempty"`
 
+	// DataDiskSizeGb: The size of data disk for the performance instance,
+	// specified in GB. Setting this value for non-performance instances
+	// will result in an error.
+	DataDiskSizeGb int64 `json:"dataDiskSizeGb,omitempty,string"`
+
 	// DatabaseFlags: The database flags passed to the instance at startup.
 	DatabaseFlags []*DatabaseFlags `json:"databaseFlags,omitempty"`
 
@@ -1817,7 +1877,7 @@
 	//   ],
 	//   "parameters": {
 	//     "id": {
-	//       "description": "The ID of the Backup Run to delete.",
+	//       "description": "The ID of the Backup Run to delete. To find a Backup Run ID, use the list method.",
 	//       "format": "int64",
 	//       "location": "path",
 	//       "required": true,
@@ -3523,6 +3583,141 @@
 
 }
 
+// method id "sql.instances.failover":
+
+type InstancesFailoverCall struct {
+	s                        *Service
+	project                  string
+	instance                 string
+	instancesfailoverrequest *InstancesFailoverRequest
+	opt_                     map[string]interface{}
+	ctx_                     context.Context
+}
+
+// Failover: Failover the instance to its failover replica instance.
+func (r *InstancesService) Failover(project string, instance string, instancesfailoverrequest *InstancesFailoverRequest) *InstancesFailoverCall {
+	c := &InstancesFailoverCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.instance = instance
+	c.instancesfailoverrequest = instancesfailoverrequest
+	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 *InstancesFailoverCall) Fields(s ...googleapi.Field) *InstancesFailoverCall {
+	c.opt_["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 *InstancesFailoverCall) Context(ctx context.Context) *InstancesFailoverCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *InstancesFailoverCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancesfailoverrequest)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/failover")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"project":  c.project,
+		"instance": c.instance,
+	})
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "sql.instances.failover" 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 *InstancesFailoverCall) Do() (*Operation, error) {
+	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,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Failover the instance to its failover replica instance.",
+	//   "httpMethod": "POST",
+	//   "id": "sql.instances.failover",
+	//   "parameterOrder": [
+	//     "project",
+	//     "instance"
+	//   ],
+	//   "parameters": {
+	//     "instance": {
+	//       "description": "Cloud SQL instance ID. This does not include the project ID.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "project": {
+	//       "description": "ID of the project that contains the read replica.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "projects/{project}/instances/{instance}/failover",
+	//   "request": {
+	//     "$ref": "InstancesFailoverRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/sqlservice.admin"
+	//   ]
+	// }
+
+}
+
 // method id "sql.instances.get":
 
 type InstancesGetCall struct {
diff --git a/storage/v1/storage-api.json b/storage/v1/storage-api.json
index 484abff..d97a468 100644
--- a/storage/v1/storage-api.json
+++ b/storage/v1/storage-api.json
@@ -1,11 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/OK_cUEY_NOfFazu7VbcsL_tulGg\"",
+ "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/N6tKJW3LYMQm0Iy7CDmwkEgtf6o\"",
  "discoveryVersion": "v1",
  "id": "storage:v1",
  "name": "storage",
  "version": "v1",
- "revision": "20150909",
+ "revision": "20151007",
  "title": "Cloud Storage JSON API",
  "description": "Lets you store and retrieve potentially-large, immutable data objects.",
  "ownerDomain": "google.com",
@@ -274,7 +274,12 @@
     },
     "timeCreated": {
      "type": "string",
-     "description": "Creation time of the bucket in RFC 3339 format.",
+     "description": "The creation time of the bucket in RFC 3339 format.",
+     "format": "date-time"
+    },
+    "updated": {
+     "type": "string",
+     "description": "The modification time of the bucket in RFC 3339 format.",
      "format": "date-time"
     },
     "versioning": {
@@ -651,6 +656,11 @@
      "type": "string",
      "description": "Storage class of the object."
     },
+    "timeCreated": {
+     "type": "string",
+     "description": "The creation time of the object in RFC 3339 format.",
+     "format": "date-time"
+    },
     "timeDeleted": {
      "type": "string",
      "description": "The deletion time of the object in RFC 3339 format. Will be returned if and only if this version of the object has been deleted.",
@@ -658,7 +668,7 @@
     },
     "updated": {
      "type": "string",
-     "description": "The creation or modification time of the object in RFC 3339 format. For buckets with versioning enabled, changing an object's metadata does not change this property.",
+     "description": "The modification time of the object metadata in RFC 3339 format.",
      "format": "date-time"
     }
    }
diff --git a/storage/v1/storage-gen.go b/storage/v1/storage-gen.go
index 7155d40..f690ddf 100644
--- a/storage/v1/storage-gen.go
+++ b/storage/v1/storage-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "storage:v1"
 const apiName = "storage"
@@ -214,9 +216,12 @@
 	// Defaults to STANDARD. For more information, see storage classes.
 	StorageClass string `json:"storageClass,omitempty"`
 
-	// TimeCreated: Creation time of the bucket in RFC 3339 format.
+	// TimeCreated: The creation time of the bucket in RFC 3339 format.
 	TimeCreated string `json:"timeCreated,omitempty"`
 
+	// Updated: The modification time of the bucket in RFC 3339 format.
+	Updated string `json:"updated,omitempty"`
+
 	// Versioning: The bucket's versioning configuration.
 	Versioning *BucketVersioning `json:"versioning,omitempty"`
 
@@ -846,14 +851,16 @@
 	// StorageClass: Storage class of the object.
 	StorageClass string `json:"storageClass,omitempty"`
 
+	// TimeCreated: The creation time of the object in RFC 3339 format.
+	TimeCreated string `json:"timeCreated,omitempty"`
+
 	// TimeDeleted: The deletion time of the object in RFC 3339 format. Will
 	// be returned if and only if this version of the object has been
 	// deleted.
 	TimeDeleted string `json:"timeDeleted,omitempty"`
 
-	// Updated: The creation or modification time of the object in RFC 3339
-	// format. For buckets with versioning enabled, changing an object's
-	// metadata does not change this property.
+	// Updated: The modification time of the object metadata in RFC 3339
+	// format.
 	Updated string `json:"updated,omitempty"`
 
 	// ServerResponse contains the HTTP response code and headers from the
diff --git a/storage/v1beta1/storage-api.json b/storage/v1beta1/storage-api.json
index b0319e3..c7deff5 100644
--- a/storage/v1beta1/storage-api.json
+++ b/storage/v1beta1/storage-api.json
@@ -1,12 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/--kbHbD1ylfgYf5jjY5PzcBb6t4\"",
+ "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/bTGfIvC19RkllzOnE1QWbh07cyk\"",
  "discoveryVersion": "v1",
  "id": "storage:v1beta1",
  "name": "storage",
  "version": "v1beta1",
- "revision": "20141229",
- "title": "Cloud Storage API",
+ "revision": "20151007",
+ "title": "Cloud Storage JSON API",
  "description": "Lets you store and retrieve potentially-large, immutable data objects.",
  "ownerDomain": "google.com",
  "ownerName": "Google",
diff --git a/storage/v1beta1/storage-gen.go b/storage/v1beta1/storage-gen.go
index 92f0110..3c12c7c 100644
--- a/storage/v1beta1/storage-gen.go
+++ b/storage/v1beta1/storage-gen.go
@@ -1,4 +1,4 @@
-// Package storage provides access to the Cloud Storage API.
+// Package storage provides access to the Cloud Storage JSON API.
 //
 // See https://developers.google.com/storage/docs/json_api/
 //
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "storage:v1beta1"
 const apiName = "storage"
diff --git a/storage/v1beta2/storage-api.json b/storage/v1beta2/storage-api.json
index b552bed..a7ac03e 100644
--- a/storage/v1beta2/storage-api.json
+++ b/storage/v1beta2/storage-api.json
@@ -1,12 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/15LYn2He35ZdsKeqcXSKVIUDAPY\"",
+ "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/58I9am2CtsQcuFUTzCVHg3vRyjQ\"",
  "discoveryVersion": "v1",
  "id": "storage:v1beta2",
  "name": "storage",
  "version": "v1beta2",
- "revision": "20141229",
- "title": "Cloud Storage API",
+ "revision": "20151007",
+ "title": "Cloud Storage JSON API",
  "description": "Lets you store and retrieve potentially-large, immutable data objects.",
  "ownerDomain": "google.com",
  "ownerName": "Google",
diff --git a/storage/v1beta2/storage-gen.go b/storage/v1beta2/storage-gen.go
index d77d203..816881f 100644
--- a/storage/v1beta2/storage-gen.go
+++ b/storage/v1beta2/storage-gen.go
@@ -1,4 +1,4 @@
-// Package storage provides access to the Cloud Storage API.
+// Package storage provides access to the Cloud Storage JSON API.
 //
 // See https://developers.google.com/storage/docs/json_api/
 //
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "storage:v1beta2"
 const apiName = "storage"
diff --git a/storagetransfer/v1/storagetransfer-gen.go b/storagetransfer/v1/storagetransfer-gen.go
index 332b017..70ccfaa 100644
--- a/storagetransfer/v1/storagetransfer-gen.go
+++ b/storagetransfer/v1/storagetransfer-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "storagetransfer:v1"
 const apiName = "storagetransfer"
diff --git a/tagmanager/v1/tagmanager-api.json b/tagmanager/v1/tagmanager-api.json
index 08bf087..eef47d7 100644
--- a/tagmanager/v1/tagmanager-api.json
+++ b/tagmanager/v1/tagmanager-api.json
@@ -1,12 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/N2n1iYnDyuh2rPS2JpjnBtCuGt0\"",
+ "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/-5hQwJsgwNQCq1DK1Ud7--ggMIg\"",
  "discoveryVersion": "v1",
  "id": "tagmanager:v1",
  "name": "tagmanager",
  "canonicalName": "Tag Manager",
  "version": "v1",
- "revision": "20150831",
+ "revision": "20151008",
  "title": "Tag Manager API",
  "description": "API for accessing Tag Manager accounts and containers.",
  "ownerDomain": "google.com",
@@ -158,14 +158,14 @@
    "properties": {
     "parameter": {
      "type": "array",
-     "description": "A list of named parameters (key/value), depending on the condition's type. Notes: \n- For binary operators, include parameters named arg0 and arg1 for specifying the left and right operands, respectively. \n- At this time, the left operand (arg0) must be a reference to a macro. \n- For case-insensitive Regex matching, include a boolean parameter named ignore_case that is set to true. If not specified or set to any other value, the matching will be case sensitive. \n- To negate an operator, include a boolean parameter named negate boolean parameter that is set to true.",
+     "description": "A list of named parameters (key/value), depending on the condition's type. Notes: \n- For binary operators, include parameters named arg0 and arg1 for specifying the left and right operands, respectively. \n- At this time, the left operand (arg0) must be a reference to a variable. \n- For case-insensitive Regex matching, include a boolean parameter named ignore_case that is set to true. If not specified or set to any other value, the matching will be case sensitive. \n- To negate an operator, include a boolean parameter named negate boolean parameter that is set to true.",
      "items": {
       "$ref": "Parameter"
      },
      "annotations": {
       "required": [
-       "tagmanager.accounts.containers.rules.create",
-       "tagmanager.accounts.containers.rules.update"
+       "tagmanager.accounts.containers.triggers.create",
+       "tagmanager.accounts.containers.triggers.update"
       ]
      }
     },
@@ -200,8 +200,8 @@
      ],
      "annotations": {
       "required": [
-       "tagmanager.accounts.containers.rules.create",
-       "tagmanager.accounts.containers.rules.update"
+       "tagmanager.accounts.containers.triggers.create",
+       "tagmanager.accounts.containers.triggers.update"
       ]
      }
     }
@@ -368,12 +368,16 @@
       "type": "string",
       "enum": [
        "android",
+       "androidSdk5",
        "ios",
+       "iosSdk5",
        "web"
       ],
       "enumDescriptions": [
        "",
        "",
+       "",
+       "",
        ""
       ]
      },
@@ -716,34 +720,6 @@
     }
    }
   },
-  "ListMacrosResponse": {
-   "id": "ListMacrosResponse",
-   "type": "object",
-   "description": "List Macros Response.",
-   "properties": {
-    "macros": {
-     "type": "array",
-     "description": "All GTM Macros of a GTM Container.",
-     "items": {
-      "$ref": "Macro"
-     }
-    }
-   }
-  },
-  "ListRulesResponse": {
-   "id": "ListRulesResponse",
-   "type": "object",
-   "description": "List Rules Response.",
-   "properties": {
-    "rules": {
-     "type": "array",
-     "description": "All GTM Rules of a GTM Container.",
-     "items": {
-      "$ref": "Rule"
-     }
-    }
-   }
-  },
   "ListTagsResponse": {
    "id": "ListTagsResponse",
    "type": "object",
@@ -823,12 +799,7 @@
     },
     "name": {
      "type": "string",
-     "description": "Macro display name.",
-     "annotations": {
-      "required": [
-       "tagmanager.accounts.containers.macros.create"
-      ]
-     }
+     "description": "Macro display name."
     },
     "notes": {
      "type": "string",
@@ -857,13 +828,7 @@
     },
     "type": {
      "type": "string",
-     "description": "GTM Macro Type.",
-     "annotations": {
-      "required": [
-       "tagmanager.accounts.containers.macros.create",
-       "tagmanager.accounts.containers.macros.update"
-      ]
-     }
+     "description": "GTM Macro Type."
     }
    }
   },
@@ -892,7 +857,7 @@
     },
     "type": {
      "type": "string",
-     "description": "The parameter type. Valid values are: \n- boolean: The value represents a boolean, represented as 'true' or 'false' \n- integer: The value represents a 64-bit signed integer value, in base 10 \n- list: A list of parameters should be specified \n- map: A map of parameters should be specified \n- template: The value represents any text; this can include macro references (even macro references that might return non-string types)",
+     "description": "The parameter type. Valid values are: \n- boolean: The value represents a boolean, represented as 'true' or 'false' \n- integer: The value represents a 64-bit signed integer value, in base 10 \n- list: A list of parameters should be specified \n- map: A map of parameters should be specified \n- template: The value represents any text; this can include variable references (even variable references that might return non-string types)",
      "enum": [
       "boolean",
       "integer",
@@ -909,18 +874,18 @@
      ],
      "annotations": {
       "required": [
-       "tagmanager.accounts.containers.macros.create",
-       "tagmanager.accounts.containers.macros.update",
-       "tagmanager.accounts.containers.rules.create",
-       "tagmanager.accounts.containers.rules.update",
        "tagmanager.accounts.containers.tags.create",
-       "tagmanager.accounts.containers.tags.update"
+       "tagmanager.accounts.containers.tags.update",
+       "tagmanager.accounts.containers.triggers.create",
+       "tagmanager.accounts.containers.triggers.update",
+       "tagmanager.accounts.containers.variables.create",
+       "tagmanager.accounts.containers.variables.update"
       ]
      }
     },
     "value": {
      "type": "string",
-     "description": "A parameter's value (may contain macro references such as \"{{myMacro}}\") as appropriate to the specified type."
+     "description": "A parameter's value (may contain variable references such as \"{{myVariable}}\") as appropriate to the specified type."
     }
    }
   },
@@ -965,12 +930,7 @@
     },
     "name": {
      "type": "string",
-     "description": "Rule display name.",
-     "annotations": {
-      "required": [
-       "tagmanager.accounts.containers.rules.create"
-      ]
-     }
+     "description": "Rule display name."
     },
     "notes": {
      "type": "string",
@@ -1848,191 +1808,6 @@
         }
        }
       },
-      "macros": {
-       "methods": {
-        "create": {
-         "id": "tagmanager.accounts.containers.macros.create",
-         "path": "accounts/{accountId}/containers/{containerId}/macros",
-         "httpMethod": "POST",
-         "description": "Creates a GTM Macro.",
-         "parameters": {
-          "accountId": {
-           "type": "string",
-           "description": "The GTM Account ID.",
-           "required": true,
-           "location": "path"
-          },
-          "containerId": {
-           "type": "string",
-           "description": "The GTM Container ID.",
-           "required": true,
-           "location": "path"
-          }
-         },
-         "parameterOrder": [
-          "accountId",
-          "containerId"
-         ],
-         "request": {
-          "$ref": "Macro"
-         },
-         "response": {
-          "$ref": "Macro"
-         },
-         "scopes": [
-          "https://www.googleapis.com/auth/tagmanager.edit.containers"
-         ]
-        },
-        "delete": {
-         "id": "tagmanager.accounts.containers.macros.delete",
-         "path": "accounts/{accountId}/containers/{containerId}/macros/{macroId}",
-         "httpMethod": "DELETE",
-         "description": "Deletes a GTM Macro.",
-         "parameters": {
-          "accountId": {
-           "type": "string",
-           "description": "The GTM Account ID.",
-           "required": true,
-           "location": "path"
-          },
-          "containerId": {
-           "type": "string",
-           "description": "The GTM Container ID.",
-           "required": true,
-           "location": "path"
-          },
-          "macroId": {
-           "type": "string",
-           "description": "The GTM Macro ID.",
-           "required": true,
-           "location": "path"
-          }
-         },
-         "parameterOrder": [
-          "accountId",
-          "containerId",
-          "macroId"
-         ],
-         "scopes": [
-          "https://www.googleapis.com/auth/tagmanager.edit.containers"
-         ]
-        },
-        "get": {
-         "id": "tagmanager.accounts.containers.macros.get",
-         "path": "accounts/{accountId}/containers/{containerId}/macros/{macroId}",
-         "httpMethod": "GET",
-         "description": "Gets a GTM Macro.",
-         "parameters": {
-          "accountId": {
-           "type": "string",
-           "description": "The GTM Account ID.",
-           "required": true,
-           "location": "path"
-          },
-          "containerId": {
-           "type": "string",
-           "description": "The GTM Container ID.",
-           "required": true,
-           "location": "path"
-          },
-          "macroId": {
-           "type": "string",
-           "description": "The GTM Macro ID.",
-           "required": true,
-           "location": "path"
-          }
-         },
-         "parameterOrder": [
-          "accountId",
-          "containerId",
-          "macroId"
-         ],
-         "response": {
-          "$ref": "Macro"
-         },
-         "scopes": [
-          "https://www.googleapis.com/auth/tagmanager.edit.containers",
-          "https://www.googleapis.com/auth/tagmanager.readonly"
-         ]
-        },
-        "list": {
-         "id": "tagmanager.accounts.containers.macros.list",
-         "path": "accounts/{accountId}/containers/{containerId}/macros",
-         "httpMethod": "GET",
-         "description": "Lists all GTM Macros of a Container.",
-         "parameters": {
-          "accountId": {
-           "type": "string",
-           "description": "The GTM Account ID.",
-           "required": true,
-           "location": "path"
-          },
-          "containerId": {
-           "type": "string",
-           "description": "The GTM Container ID.",
-           "required": true,
-           "location": "path"
-          }
-         },
-         "parameterOrder": [
-          "accountId",
-          "containerId"
-         ],
-         "response": {
-          "$ref": "ListMacrosResponse"
-         },
-         "scopes": [
-          "https://www.googleapis.com/auth/tagmanager.edit.containers",
-          "https://www.googleapis.com/auth/tagmanager.readonly"
-         ]
-        },
-        "update": {
-         "id": "tagmanager.accounts.containers.macros.update",
-         "path": "accounts/{accountId}/containers/{containerId}/macros/{macroId}",
-         "httpMethod": "PUT",
-         "description": "Updates a GTM Macro.",
-         "parameters": {
-          "accountId": {
-           "type": "string",
-           "description": "The GTM Account ID.",
-           "required": true,
-           "location": "path"
-          },
-          "containerId": {
-           "type": "string",
-           "description": "The GTM Container ID.",
-           "required": true,
-           "location": "path"
-          },
-          "fingerprint": {
-           "type": "string",
-           "description": "When provided, this fingerprint must match the fingerprint of the macro in storage.",
-           "location": "query"
-          },
-          "macroId": {
-           "type": "string",
-           "description": "The GTM Macro ID.",
-           "required": true,
-           "location": "path"
-          }
-         },
-         "parameterOrder": [
-          "accountId",
-          "containerId",
-          "macroId"
-         ],
-         "request": {
-          "$ref": "Macro"
-         },
-         "response": {
-          "$ref": "Macro"
-         },
-         "scopes": [
-          "https://www.googleapis.com/auth/tagmanager.edit.containers"
-         ]
-        }
-       }
-      },
       "move_folders": {
        "methods": {
         "update": {
@@ -2086,191 +1861,6 @@
         }
        }
       },
-      "rules": {
-       "methods": {
-        "create": {
-         "id": "tagmanager.accounts.containers.rules.create",
-         "path": "accounts/{accountId}/containers/{containerId}/rules",
-         "httpMethod": "POST",
-         "description": "Creates a GTM Rule.",
-         "parameters": {
-          "accountId": {
-           "type": "string",
-           "description": "The GTM Account ID.",
-           "required": true,
-           "location": "path"
-          },
-          "containerId": {
-           "type": "string",
-           "description": "The GTM Container ID.",
-           "required": true,
-           "location": "path"
-          }
-         },
-         "parameterOrder": [
-          "accountId",
-          "containerId"
-         ],
-         "request": {
-          "$ref": "Rule"
-         },
-         "response": {
-          "$ref": "Rule"
-         },
-         "scopes": [
-          "https://www.googleapis.com/auth/tagmanager.edit.containers"
-         ]
-        },
-        "delete": {
-         "id": "tagmanager.accounts.containers.rules.delete",
-         "path": "accounts/{accountId}/containers/{containerId}/rules/{ruleId}",
-         "httpMethod": "DELETE",
-         "description": "Deletes a GTM Rule.",
-         "parameters": {
-          "accountId": {
-           "type": "string",
-           "description": "The GTM Account ID.",
-           "required": true,
-           "location": "path"
-          },
-          "containerId": {
-           "type": "string",
-           "description": "The GTM Container ID.",
-           "required": true,
-           "location": "path"
-          },
-          "ruleId": {
-           "type": "string",
-           "description": "The GTM Rule ID.",
-           "required": true,
-           "location": "path"
-          }
-         },
-         "parameterOrder": [
-          "accountId",
-          "containerId",
-          "ruleId"
-         ],
-         "scopes": [
-          "https://www.googleapis.com/auth/tagmanager.edit.containers"
-         ]
-        },
-        "get": {
-         "id": "tagmanager.accounts.containers.rules.get",
-         "path": "accounts/{accountId}/containers/{containerId}/rules/{ruleId}",
-         "httpMethod": "GET",
-         "description": "Gets a GTM Rule.",
-         "parameters": {
-          "accountId": {
-           "type": "string",
-           "description": "The GTM Account ID.",
-           "required": true,
-           "location": "path"
-          },
-          "containerId": {
-           "type": "string",
-           "description": "The GTM Container ID.",
-           "required": true,
-           "location": "path"
-          },
-          "ruleId": {
-           "type": "string",
-           "description": "The GTM Rule ID.",
-           "required": true,
-           "location": "path"
-          }
-         },
-         "parameterOrder": [
-          "accountId",
-          "containerId",
-          "ruleId"
-         ],
-         "response": {
-          "$ref": "Rule"
-         },
-         "scopes": [
-          "https://www.googleapis.com/auth/tagmanager.edit.containers",
-          "https://www.googleapis.com/auth/tagmanager.readonly"
-         ]
-        },
-        "list": {
-         "id": "tagmanager.accounts.containers.rules.list",
-         "path": "accounts/{accountId}/containers/{containerId}/rules",
-         "httpMethod": "GET",
-         "description": "Lists all GTM Rules of a Container.",
-         "parameters": {
-          "accountId": {
-           "type": "string",
-           "description": "The GTM Account ID.",
-           "required": true,
-           "location": "path"
-          },
-          "containerId": {
-           "type": "string",
-           "description": "The GTM Container ID.",
-           "required": true,
-           "location": "path"
-          }
-         },
-         "parameterOrder": [
-          "accountId",
-          "containerId"
-         ],
-         "response": {
-          "$ref": "ListRulesResponse"
-         },
-         "scopes": [
-          "https://www.googleapis.com/auth/tagmanager.edit.containers",
-          "https://www.googleapis.com/auth/tagmanager.readonly"
-         ]
-        },
-        "update": {
-         "id": "tagmanager.accounts.containers.rules.update",
-         "path": "accounts/{accountId}/containers/{containerId}/rules/{ruleId}",
-         "httpMethod": "PUT",
-         "description": "Updates a GTM Rule.",
-         "parameters": {
-          "accountId": {
-           "type": "string",
-           "description": "The GTM Account ID.",
-           "required": true,
-           "location": "path"
-          },
-          "containerId": {
-           "type": "string",
-           "description": "The GTM Container ID.",
-           "required": true,
-           "location": "path"
-          },
-          "fingerprint": {
-           "type": "string",
-           "description": "When provided, this fingerprint must match the fingerprint of the rule in storage.",
-           "location": "query"
-          },
-          "ruleId": {
-           "type": "string",
-           "description": "The GTM Rule ID.",
-           "required": true,
-           "location": "path"
-          }
-         },
-         "parameterOrder": [
-          "accountId",
-          "containerId",
-          "ruleId"
-         ],
-         "request": {
-          "$ref": "Rule"
-         },
-         "response": {
-          "$ref": "Rule"
-         },
-         "scopes": [
-          "https://www.googleapis.com/auth/tagmanager.edit.containers"
-         ]
-        }
-       }
-      },
       "tags": {
        "methods": {
         "create": {
@@ -3018,7 +2608,7 @@
          "id": "tagmanager.accounts.containers.versions.restore",
          "path": "accounts/{accountId}/containers/{containerId}/versions/{containerVersionId}/restore",
          "httpMethod": "POST",
-         "description": "Restores a Container Version. This will overwrite the container's current configuration (including its macros, rules and tags). The operation will not have any effect on the version that is being served (i.e. the published version).",
+         "description": "Restores a Container Version. This will overwrite the container's current configuration (including its variables, triggers and tags). The operation will not have any effect on the version that is being served (i.e. the published version).",
          "parameters": {
           "accountId": {
            "type": "string",
diff --git a/tagmanager/v1/tagmanager-gen.go b/tagmanager/v1/tagmanager-gen.go
index 98f2a86..c40ea81 100644
--- a/tagmanager/v1/tagmanager-gen.go
+++ b/tagmanager/v1/tagmanager-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "tagmanager:v1"
 const apiName = "tagmanager"
@@ -109,9 +111,7 @@
 func NewAccountsContainersService(s *Service) *AccountsContainersService {
 	rs := &AccountsContainersService{s: s}
 	rs.Folders = NewAccountsContainersFoldersService(s)
-	rs.Macros = NewAccountsContainersMacrosService(s)
 	rs.MoveFolders = NewAccountsContainersMoveFoldersService(s)
-	rs.Rules = NewAccountsContainersRulesService(s)
 	rs.Tags = NewAccountsContainersTagsService(s)
 	rs.Triggers = NewAccountsContainersTriggersService(s)
 	rs.Variables = NewAccountsContainersVariablesService(s)
@@ -124,12 +124,8 @@
 
 	Folders *AccountsContainersFoldersService
 
-	Macros *AccountsContainersMacrosService
-
 	MoveFolders *AccountsContainersMoveFoldersService
 
-	Rules *AccountsContainersRulesService
-
 	Tags *AccountsContainersTagsService
 
 	Triggers *AccountsContainersTriggersService
@@ -160,15 +156,6 @@
 	s *Service
 }
 
-func NewAccountsContainersMacrosService(s *Service) *AccountsContainersMacrosService {
-	rs := &AccountsContainersMacrosService{s: s}
-	return rs
-}
-
-type AccountsContainersMacrosService struct {
-	s *Service
-}
-
 func NewAccountsContainersMoveFoldersService(s *Service) *AccountsContainersMoveFoldersService {
 	rs := &AccountsContainersMoveFoldersService{s: s}
 	return rs
@@ -178,15 +165,6 @@
 	s *Service
 }
 
-func NewAccountsContainersRulesService(s *Service) *AccountsContainersRulesService {
-	rs := &AccountsContainersRulesService{s: s}
-	return rs
-}
-
-type AccountsContainersRulesService struct {
-	s *Service
-}
-
 func NewAccountsContainersTagsService(s *Service) *AccountsContainersTagsService {
 	rs := &AccountsContainersTagsService{s: s}
 	return rs
@@ -304,7 +282,7 @@
 	// - For binary operators, include parameters named arg0 and arg1 for
 	// specifying the left and right operands, respectively.
 	// - At this time, the left operand (arg0) must be a reference to a
-	// macro.
+	// variable.
 	// - For case-insensitive Regex matching, include a boolean parameter
 	// named ignore_case that is set to true. If not specified or set to any
 	// other value, the matching will be case sensitive.
@@ -433,7 +411,9 @@
 	//
 	// Possible values:
 	//   "android"
+	//   "androidSdk5"
 	//   "ios"
+	//   "iosSdk5"
 	//   "web"
 	UsageContext []string `json:"usageContext,omitempty"`
 
@@ -855,54 +835,6 @@
 	return internal.MarshalJSON(raw, s.ForceSendFields)
 }
 
-// ListMacrosResponse: List Macros Response.
-type ListMacrosResponse struct {
-	// Macros: All GTM Macros of a GTM Container.
-	Macros []*Macro `json:"macros,omitempty"`
-
-	// ServerResponse contains the HTTP response code and headers from the
-	// server.
-	googleapi.ServerResponse `json:"-"`
-
-	// ForceSendFields is a list of field names (e.g. "Macros") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-}
-
-func (s *ListMacrosResponse) MarshalJSON() ([]byte, error) {
-	type noMethod ListMacrosResponse
-	raw := noMethod(*s)
-	return internal.MarshalJSON(raw, s.ForceSendFields)
-}
-
-// ListRulesResponse: List Rules Response.
-type ListRulesResponse struct {
-	// Rules: All GTM Rules of a GTM Container.
-	Rules []*Rule `json:"rules,omitempty"`
-
-	// ServerResponse contains the HTTP response code and headers from the
-	// server.
-	googleapi.ServerResponse `json:"-"`
-
-	// ForceSendFields is a list of field names (e.g. "Rules") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-}
-
-func (s *ListRulesResponse) MarshalJSON() ([]byte, error) {
-	type noMethod ListRulesResponse
-	raw := noMethod(*s)
-	return internal.MarshalJSON(raw, s.ForceSendFields)
-}
-
 // ListTagsResponse: List Tags Response.
 type ListTagsResponse struct {
 	// Tags: All GTM Tags of a GTM Container.
@@ -1024,10 +956,6 @@
 	// Type: GTM Macro Type.
 	Type string `json:"type,omitempty"`
 
-	// ServerResponse contains the HTTP response code and headers from the
-	// server.
-	googleapi.ServerResponse `json:"-"`
-
 	// ForceSendFields is a list of field names (e.g. "AccountId") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
@@ -1063,8 +991,9 @@
 	// base 10
 	// - list: A list of parameters should be specified
 	// - map: A map of parameters should be specified
-	// - template: The value represents any text; this can include macro
-	// references (even macro references that might return non-string types)
+	// - template: The value represents any text; this can include variable
+	// references (even variable references that might return non-string
+	// types)
 	//
 	// Possible values:
 	//   "boolean"
@@ -1074,8 +1003,8 @@
 	//   "template"
 	Type string `json:"type,omitempty"`
 
-	// Value: A parameter's value (may contain macro references such as
-	// "{{myMacro}}") as appropriate to the specified type.
+	// Value: A parameter's value (may contain variable references such as
+	// "{{myVariable}}") as appropriate to the specified type.
 	Value string `json:"value,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Key") to
@@ -1145,10 +1074,6 @@
 	// RuleId: The Rule ID uniquely identifies the GTM Rule.
 	RuleId string `json:"ruleId,omitempty"`
 
-	// ServerResponse contains the HTTP response code and headers from the
-	// server.
-	googleapi.ServerResponse `json:"-"`
-
 	// ForceSendFields is a list of field names (e.g. "AccountId") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
@@ -3380,689 +3305,6 @@
 
 }
 
-// method id "tagmanager.accounts.containers.macros.create":
-
-type AccountsContainersMacrosCreateCall struct {
-	s           *Service
-	accountId   string
-	containerId string
-	macro       *Macro
-	opt_        map[string]interface{}
-	ctx_        context.Context
-}
-
-// Create: Creates a GTM Macro.
-func (r *AccountsContainersMacrosService) Create(accountId string, containerId string, macro *Macro) *AccountsContainersMacrosCreateCall {
-	c := &AccountsContainersMacrosCreateCall{s: r.s, opt_: make(map[string]interface{})}
-	c.accountId = accountId
-	c.containerId = containerId
-	c.macro = macro
-	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 *AccountsContainersMacrosCreateCall) Fields(s ...googleapi.Field) *AccountsContainersMacrosCreateCall {
-	c.opt_["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 *AccountsContainersMacrosCreateCall) Context(ctx context.Context) *AccountsContainersMacrosCreateCall {
-	c.ctx_ = ctx
-	return c
-}
-
-func (c *AccountsContainersMacrosCreateCall) doRequest(alt string) (*http.Response, error) {
-	var body io.Reader = nil
-	body, err := googleapi.WithoutDataWrapper.JSONReader(c.macro)
-	if err != nil {
-		return nil, err
-	}
-	ctype := "application/json"
-	params := make(url.Values)
-	params.Set("alt", alt)
-	if v, ok := c.opt_["fields"]; ok {
-		params.Set("fields", fmt.Sprintf("%v", v))
-	}
-	urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/containers/{containerId}/macros")
-	urls += "?" + params.Encode()
-	req, _ := http.NewRequest("POST", urls, body)
-	googleapi.Expand(req.URL, map[string]string{
-		"accountId":   c.accountId,
-		"containerId": c.containerId,
-	})
-	req.Header.Set("Content-Type", ctype)
-	req.Header.Set("User-Agent", c.s.userAgent())
-	if c.ctx_ != nil {
-		return ctxhttp.Do(c.ctx_, c.s.client, req)
-	}
-	return c.s.client.Do(req)
-}
-
-// Do executes the "tagmanager.accounts.containers.macros.create" call.
-// Exactly one of *Macro or error will be non-nil. Any non-2xx status
-// code is an error. Response headers are in either
-// *Macro.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 *AccountsContainersMacrosCreateCall) Do() (*Macro, error) {
-	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 := &Macro{
-		ServerResponse: googleapi.ServerResponse{
-			Header:         res.Header,
-			HTTPStatusCode: res.StatusCode,
-		},
-	}
-	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Creates a GTM Macro.",
-	//   "httpMethod": "POST",
-	//   "id": "tagmanager.accounts.containers.macros.create",
-	//   "parameterOrder": [
-	//     "accountId",
-	//     "containerId"
-	//   ],
-	//   "parameters": {
-	//     "accountId": {
-	//       "description": "The GTM Account ID.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "containerId": {
-	//       "description": "The GTM Container ID.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "accounts/{accountId}/containers/{containerId}/macros",
-	//   "request": {
-	//     "$ref": "Macro"
-	//   },
-	//   "response": {
-	//     "$ref": "Macro"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/tagmanager.edit.containers"
-	//   ]
-	// }
-
-}
-
-// method id "tagmanager.accounts.containers.macros.delete":
-
-type AccountsContainersMacrosDeleteCall struct {
-	s           *Service
-	accountId   string
-	containerId string
-	macroId     string
-	opt_        map[string]interface{}
-	ctx_        context.Context
-}
-
-// Delete: Deletes a GTM Macro.
-func (r *AccountsContainersMacrosService) Delete(accountId string, containerId string, macroId string) *AccountsContainersMacrosDeleteCall {
-	c := &AccountsContainersMacrosDeleteCall{s: r.s, opt_: make(map[string]interface{})}
-	c.accountId = accountId
-	c.containerId = containerId
-	c.macroId = macroId
-	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 *AccountsContainersMacrosDeleteCall) Fields(s ...googleapi.Field) *AccountsContainersMacrosDeleteCall {
-	c.opt_["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 *AccountsContainersMacrosDeleteCall) Context(ctx context.Context) *AccountsContainersMacrosDeleteCall {
-	c.ctx_ = ctx
-	return c
-}
-
-func (c *AccountsContainersMacrosDeleteCall) doRequest(alt string) (*http.Response, error) {
-	var body io.Reader = nil
-	params := make(url.Values)
-	params.Set("alt", alt)
-	if v, ok := c.opt_["fields"]; ok {
-		params.Set("fields", fmt.Sprintf("%v", v))
-	}
-	urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/containers/{containerId}/macros/{macroId}")
-	urls += "?" + params.Encode()
-	req, _ := http.NewRequest("DELETE", urls, body)
-	googleapi.Expand(req.URL, map[string]string{
-		"accountId":   c.accountId,
-		"containerId": c.containerId,
-		"macroId":     c.macroId,
-	})
-	req.Header.Set("User-Agent", c.s.userAgent())
-	if c.ctx_ != nil {
-		return ctxhttp.Do(c.ctx_, c.s.client, req)
-	}
-	return c.s.client.Do(req)
-}
-
-// Do executes the "tagmanager.accounts.containers.macros.delete" call.
-func (c *AccountsContainersMacrosDeleteCall) Do() error {
-	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 a GTM Macro.",
-	//   "httpMethod": "DELETE",
-	//   "id": "tagmanager.accounts.containers.macros.delete",
-	//   "parameterOrder": [
-	//     "accountId",
-	//     "containerId",
-	//     "macroId"
-	//   ],
-	//   "parameters": {
-	//     "accountId": {
-	//       "description": "The GTM Account ID.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "containerId": {
-	//       "description": "The GTM Container ID.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "macroId": {
-	//       "description": "The GTM Macro ID.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "accounts/{accountId}/containers/{containerId}/macros/{macroId}",
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/tagmanager.edit.containers"
-	//   ]
-	// }
-
-}
-
-// method id "tagmanager.accounts.containers.macros.get":
-
-type AccountsContainersMacrosGetCall struct {
-	s           *Service
-	accountId   string
-	containerId string
-	macroId     string
-	opt_        map[string]interface{}
-	ctx_        context.Context
-}
-
-// Get: Gets a GTM Macro.
-func (r *AccountsContainersMacrosService) Get(accountId string, containerId string, macroId string) *AccountsContainersMacrosGetCall {
-	c := &AccountsContainersMacrosGetCall{s: r.s, opt_: make(map[string]interface{})}
-	c.accountId = accountId
-	c.containerId = containerId
-	c.macroId = macroId
-	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 *AccountsContainersMacrosGetCall) Fields(s ...googleapi.Field) *AccountsContainersMacrosGetCall {
-	c.opt_["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 *AccountsContainersMacrosGetCall) IfNoneMatch(entityTag string) *AccountsContainersMacrosGetCall {
-	c.opt_["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 *AccountsContainersMacrosGetCall) Context(ctx context.Context) *AccountsContainersMacrosGetCall {
-	c.ctx_ = ctx
-	return c
-}
-
-func (c *AccountsContainersMacrosGetCall) doRequest(alt string) (*http.Response, error) {
-	var body io.Reader = nil
-	params := make(url.Values)
-	params.Set("alt", alt)
-	if v, ok := c.opt_["fields"]; ok {
-		params.Set("fields", fmt.Sprintf("%v", v))
-	}
-	urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/containers/{containerId}/macros/{macroId}")
-	urls += "?" + params.Encode()
-	req, _ := http.NewRequest("GET", urls, body)
-	googleapi.Expand(req.URL, map[string]string{
-		"accountId":   c.accountId,
-		"containerId": c.containerId,
-		"macroId":     c.macroId,
-	})
-	req.Header.Set("User-Agent", c.s.userAgent())
-	if v, ok := c.opt_["ifNoneMatch"]; ok {
-		req.Header.Set("If-None-Match", fmt.Sprintf("%v", v))
-	}
-	if c.ctx_ != nil {
-		return ctxhttp.Do(c.ctx_, c.s.client, req)
-	}
-	return c.s.client.Do(req)
-}
-
-// Do executes the "tagmanager.accounts.containers.macros.get" call.
-// Exactly one of *Macro or error will be non-nil. Any non-2xx status
-// code is an error. Response headers are in either
-// *Macro.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 *AccountsContainersMacrosGetCall) Do() (*Macro, error) {
-	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 := &Macro{
-		ServerResponse: googleapi.ServerResponse{
-			Header:         res.Header,
-			HTTPStatusCode: res.StatusCode,
-		},
-	}
-	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Gets a GTM Macro.",
-	//   "httpMethod": "GET",
-	//   "id": "tagmanager.accounts.containers.macros.get",
-	//   "parameterOrder": [
-	//     "accountId",
-	//     "containerId",
-	//     "macroId"
-	//   ],
-	//   "parameters": {
-	//     "accountId": {
-	//       "description": "The GTM Account ID.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "containerId": {
-	//       "description": "The GTM Container ID.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "macroId": {
-	//       "description": "The GTM Macro ID.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "accounts/{accountId}/containers/{containerId}/macros/{macroId}",
-	//   "response": {
-	//     "$ref": "Macro"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/tagmanager.edit.containers",
-	//     "https://www.googleapis.com/auth/tagmanager.readonly"
-	//   ]
-	// }
-
-}
-
-// method id "tagmanager.accounts.containers.macros.list":
-
-type AccountsContainersMacrosListCall struct {
-	s           *Service
-	accountId   string
-	containerId string
-	opt_        map[string]interface{}
-	ctx_        context.Context
-}
-
-// List: Lists all GTM Macros of a Container.
-func (r *AccountsContainersMacrosService) List(accountId string, containerId string) *AccountsContainersMacrosListCall {
-	c := &AccountsContainersMacrosListCall{s: r.s, opt_: make(map[string]interface{})}
-	c.accountId = accountId
-	c.containerId = containerId
-	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 *AccountsContainersMacrosListCall) Fields(s ...googleapi.Field) *AccountsContainersMacrosListCall {
-	c.opt_["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 *AccountsContainersMacrosListCall) IfNoneMatch(entityTag string) *AccountsContainersMacrosListCall {
-	c.opt_["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 *AccountsContainersMacrosListCall) Context(ctx context.Context) *AccountsContainersMacrosListCall {
-	c.ctx_ = ctx
-	return c
-}
-
-func (c *AccountsContainersMacrosListCall) doRequest(alt string) (*http.Response, error) {
-	var body io.Reader = nil
-	params := make(url.Values)
-	params.Set("alt", alt)
-	if v, ok := c.opt_["fields"]; ok {
-		params.Set("fields", fmt.Sprintf("%v", v))
-	}
-	urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/containers/{containerId}/macros")
-	urls += "?" + params.Encode()
-	req, _ := http.NewRequest("GET", urls, body)
-	googleapi.Expand(req.URL, map[string]string{
-		"accountId":   c.accountId,
-		"containerId": c.containerId,
-	})
-	req.Header.Set("User-Agent", c.s.userAgent())
-	if v, ok := c.opt_["ifNoneMatch"]; ok {
-		req.Header.Set("If-None-Match", fmt.Sprintf("%v", v))
-	}
-	if c.ctx_ != nil {
-		return ctxhttp.Do(c.ctx_, c.s.client, req)
-	}
-	return c.s.client.Do(req)
-}
-
-// Do executes the "tagmanager.accounts.containers.macros.list" call.
-// Exactly one of *ListMacrosResponse or error will be non-nil. Any
-// non-2xx status code is an error. Response headers are in either
-// *ListMacrosResponse.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 *AccountsContainersMacrosListCall) Do() (*ListMacrosResponse, error) {
-	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 := &ListMacrosResponse{
-		ServerResponse: googleapi.ServerResponse{
-			Header:         res.Header,
-			HTTPStatusCode: res.StatusCode,
-		},
-	}
-	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Lists all GTM Macros of a Container.",
-	//   "httpMethod": "GET",
-	//   "id": "tagmanager.accounts.containers.macros.list",
-	//   "parameterOrder": [
-	//     "accountId",
-	//     "containerId"
-	//   ],
-	//   "parameters": {
-	//     "accountId": {
-	//       "description": "The GTM Account ID.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "containerId": {
-	//       "description": "The GTM Container ID.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "accounts/{accountId}/containers/{containerId}/macros",
-	//   "response": {
-	//     "$ref": "ListMacrosResponse"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/tagmanager.edit.containers",
-	//     "https://www.googleapis.com/auth/tagmanager.readonly"
-	//   ]
-	// }
-
-}
-
-// method id "tagmanager.accounts.containers.macros.update":
-
-type AccountsContainersMacrosUpdateCall struct {
-	s           *Service
-	accountId   string
-	containerId string
-	macroId     string
-	macro       *Macro
-	opt_        map[string]interface{}
-	ctx_        context.Context
-}
-
-// Update: Updates a GTM Macro.
-func (r *AccountsContainersMacrosService) Update(accountId string, containerId string, macroId string, macro *Macro) *AccountsContainersMacrosUpdateCall {
-	c := &AccountsContainersMacrosUpdateCall{s: r.s, opt_: make(map[string]interface{})}
-	c.accountId = accountId
-	c.containerId = containerId
-	c.macroId = macroId
-	c.macro = macro
-	return c
-}
-
-// Fingerprint sets the optional parameter "fingerprint": When provided,
-// this fingerprint must match the fingerprint of the macro in storage.
-func (c *AccountsContainersMacrosUpdateCall) Fingerprint(fingerprint string) *AccountsContainersMacrosUpdateCall {
-	c.opt_["fingerprint"] = fingerprint
-	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 *AccountsContainersMacrosUpdateCall) Fields(s ...googleapi.Field) *AccountsContainersMacrosUpdateCall {
-	c.opt_["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 *AccountsContainersMacrosUpdateCall) Context(ctx context.Context) *AccountsContainersMacrosUpdateCall {
-	c.ctx_ = ctx
-	return c
-}
-
-func (c *AccountsContainersMacrosUpdateCall) doRequest(alt string) (*http.Response, error) {
-	var body io.Reader = nil
-	body, err := googleapi.WithoutDataWrapper.JSONReader(c.macro)
-	if err != nil {
-		return nil, err
-	}
-	ctype := "application/json"
-	params := make(url.Values)
-	params.Set("alt", alt)
-	if v, ok := c.opt_["fingerprint"]; ok {
-		params.Set("fingerprint", fmt.Sprintf("%v", v))
-	}
-	if v, ok := c.opt_["fields"]; ok {
-		params.Set("fields", fmt.Sprintf("%v", v))
-	}
-	urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/containers/{containerId}/macros/{macroId}")
-	urls += "?" + params.Encode()
-	req, _ := http.NewRequest("PUT", urls, body)
-	googleapi.Expand(req.URL, map[string]string{
-		"accountId":   c.accountId,
-		"containerId": c.containerId,
-		"macroId":     c.macroId,
-	})
-	req.Header.Set("Content-Type", ctype)
-	req.Header.Set("User-Agent", c.s.userAgent())
-	if c.ctx_ != nil {
-		return ctxhttp.Do(c.ctx_, c.s.client, req)
-	}
-	return c.s.client.Do(req)
-}
-
-// Do executes the "tagmanager.accounts.containers.macros.update" call.
-// Exactly one of *Macro or error will be non-nil. Any non-2xx status
-// code is an error. Response headers are in either
-// *Macro.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 *AccountsContainersMacrosUpdateCall) Do() (*Macro, error) {
-	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 := &Macro{
-		ServerResponse: googleapi.ServerResponse{
-			Header:         res.Header,
-			HTTPStatusCode: res.StatusCode,
-		},
-	}
-	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Updates a GTM Macro.",
-	//   "httpMethod": "PUT",
-	//   "id": "tagmanager.accounts.containers.macros.update",
-	//   "parameterOrder": [
-	//     "accountId",
-	//     "containerId",
-	//     "macroId"
-	//   ],
-	//   "parameters": {
-	//     "accountId": {
-	//       "description": "The GTM Account ID.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "containerId": {
-	//       "description": "The GTM Container ID.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "fingerprint": {
-	//       "description": "When provided, this fingerprint must match the fingerprint of the macro in storage.",
-	//       "location": "query",
-	//       "type": "string"
-	//     },
-	//     "macroId": {
-	//       "description": "The GTM Macro ID.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "accounts/{accountId}/containers/{containerId}/macros/{macroId}",
-	//   "request": {
-	//     "$ref": "Macro"
-	//   },
-	//   "response": {
-	//     "$ref": "Macro"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/tagmanager.edit.containers"
-	//   ]
-	// }
-
-}
-
 // method id "tagmanager.accounts.containers.move_folders.update":
 
 type AccountsContainersMoveFoldersUpdateCall struct {
@@ -4214,689 +3456,6 @@
 
 }
 
-// method id "tagmanager.accounts.containers.rules.create":
-
-type AccountsContainersRulesCreateCall struct {
-	s           *Service
-	accountId   string
-	containerId string
-	rule        *Rule
-	opt_        map[string]interface{}
-	ctx_        context.Context
-}
-
-// Create: Creates a GTM Rule.
-func (r *AccountsContainersRulesService) Create(accountId string, containerId string, rule *Rule) *AccountsContainersRulesCreateCall {
-	c := &AccountsContainersRulesCreateCall{s: r.s, opt_: make(map[string]interface{})}
-	c.accountId = accountId
-	c.containerId = containerId
-	c.rule = rule
-	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 *AccountsContainersRulesCreateCall) Fields(s ...googleapi.Field) *AccountsContainersRulesCreateCall {
-	c.opt_["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 *AccountsContainersRulesCreateCall) Context(ctx context.Context) *AccountsContainersRulesCreateCall {
-	c.ctx_ = ctx
-	return c
-}
-
-func (c *AccountsContainersRulesCreateCall) doRequest(alt string) (*http.Response, error) {
-	var body io.Reader = nil
-	body, err := googleapi.WithoutDataWrapper.JSONReader(c.rule)
-	if err != nil {
-		return nil, err
-	}
-	ctype := "application/json"
-	params := make(url.Values)
-	params.Set("alt", alt)
-	if v, ok := c.opt_["fields"]; ok {
-		params.Set("fields", fmt.Sprintf("%v", v))
-	}
-	urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/containers/{containerId}/rules")
-	urls += "?" + params.Encode()
-	req, _ := http.NewRequest("POST", urls, body)
-	googleapi.Expand(req.URL, map[string]string{
-		"accountId":   c.accountId,
-		"containerId": c.containerId,
-	})
-	req.Header.Set("Content-Type", ctype)
-	req.Header.Set("User-Agent", c.s.userAgent())
-	if c.ctx_ != nil {
-		return ctxhttp.Do(c.ctx_, c.s.client, req)
-	}
-	return c.s.client.Do(req)
-}
-
-// Do executes the "tagmanager.accounts.containers.rules.create" call.
-// Exactly one of *Rule or error will be non-nil. Any non-2xx status
-// code is an error. Response headers are in either
-// *Rule.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 *AccountsContainersRulesCreateCall) Do() (*Rule, error) {
-	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 := &Rule{
-		ServerResponse: googleapi.ServerResponse{
-			Header:         res.Header,
-			HTTPStatusCode: res.StatusCode,
-		},
-	}
-	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Creates a GTM Rule.",
-	//   "httpMethod": "POST",
-	//   "id": "tagmanager.accounts.containers.rules.create",
-	//   "parameterOrder": [
-	//     "accountId",
-	//     "containerId"
-	//   ],
-	//   "parameters": {
-	//     "accountId": {
-	//       "description": "The GTM Account ID.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "containerId": {
-	//       "description": "The GTM Container ID.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "accounts/{accountId}/containers/{containerId}/rules",
-	//   "request": {
-	//     "$ref": "Rule"
-	//   },
-	//   "response": {
-	//     "$ref": "Rule"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/tagmanager.edit.containers"
-	//   ]
-	// }
-
-}
-
-// method id "tagmanager.accounts.containers.rules.delete":
-
-type AccountsContainersRulesDeleteCall struct {
-	s           *Service
-	accountId   string
-	containerId string
-	ruleId      string
-	opt_        map[string]interface{}
-	ctx_        context.Context
-}
-
-// Delete: Deletes a GTM Rule.
-func (r *AccountsContainersRulesService) Delete(accountId string, containerId string, ruleId string) *AccountsContainersRulesDeleteCall {
-	c := &AccountsContainersRulesDeleteCall{s: r.s, opt_: make(map[string]interface{})}
-	c.accountId = accountId
-	c.containerId = containerId
-	c.ruleId = ruleId
-	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 *AccountsContainersRulesDeleteCall) Fields(s ...googleapi.Field) *AccountsContainersRulesDeleteCall {
-	c.opt_["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 *AccountsContainersRulesDeleteCall) Context(ctx context.Context) *AccountsContainersRulesDeleteCall {
-	c.ctx_ = ctx
-	return c
-}
-
-func (c *AccountsContainersRulesDeleteCall) doRequest(alt string) (*http.Response, error) {
-	var body io.Reader = nil
-	params := make(url.Values)
-	params.Set("alt", alt)
-	if v, ok := c.opt_["fields"]; ok {
-		params.Set("fields", fmt.Sprintf("%v", v))
-	}
-	urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/containers/{containerId}/rules/{ruleId}")
-	urls += "?" + params.Encode()
-	req, _ := http.NewRequest("DELETE", urls, body)
-	googleapi.Expand(req.URL, map[string]string{
-		"accountId":   c.accountId,
-		"containerId": c.containerId,
-		"ruleId":      c.ruleId,
-	})
-	req.Header.Set("User-Agent", c.s.userAgent())
-	if c.ctx_ != nil {
-		return ctxhttp.Do(c.ctx_, c.s.client, req)
-	}
-	return c.s.client.Do(req)
-}
-
-// Do executes the "tagmanager.accounts.containers.rules.delete" call.
-func (c *AccountsContainersRulesDeleteCall) Do() error {
-	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 a GTM Rule.",
-	//   "httpMethod": "DELETE",
-	//   "id": "tagmanager.accounts.containers.rules.delete",
-	//   "parameterOrder": [
-	//     "accountId",
-	//     "containerId",
-	//     "ruleId"
-	//   ],
-	//   "parameters": {
-	//     "accountId": {
-	//       "description": "The GTM Account ID.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "containerId": {
-	//       "description": "The GTM Container ID.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "ruleId": {
-	//       "description": "The GTM Rule ID.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "accounts/{accountId}/containers/{containerId}/rules/{ruleId}",
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/tagmanager.edit.containers"
-	//   ]
-	// }
-
-}
-
-// method id "tagmanager.accounts.containers.rules.get":
-
-type AccountsContainersRulesGetCall struct {
-	s           *Service
-	accountId   string
-	containerId string
-	ruleId      string
-	opt_        map[string]interface{}
-	ctx_        context.Context
-}
-
-// Get: Gets a GTM Rule.
-func (r *AccountsContainersRulesService) Get(accountId string, containerId string, ruleId string) *AccountsContainersRulesGetCall {
-	c := &AccountsContainersRulesGetCall{s: r.s, opt_: make(map[string]interface{})}
-	c.accountId = accountId
-	c.containerId = containerId
-	c.ruleId = ruleId
-	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 *AccountsContainersRulesGetCall) Fields(s ...googleapi.Field) *AccountsContainersRulesGetCall {
-	c.opt_["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 *AccountsContainersRulesGetCall) IfNoneMatch(entityTag string) *AccountsContainersRulesGetCall {
-	c.opt_["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 *AccountsContainersRulesGetCall) Context(ctx context.Context) *AccountsContainersRulesGetCall {
-	c.ctx_ = ctx
-	return c
-}
-
-func (c *AccountsContainersRulesGetCall) doRequest(alt string) (*http.Response, error) {
-	var body io.Reader = nil
-	params := make(url.Values)
-	params.Set("alt", alt)
-	if v, ok := c.opt_["fields"]; ok {
-		params.Set("fields", fmt.Sprintf("%v", v))
-	}
-	urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/containers/{containerId}/rules/{ruleId}")
-	urls += "?" + params.Encode()
-	req, _ := http.NewRequest("GET", urls, body)
-	googleapi.Expand(req.URL, map[string]string{
-		"accountId":   c.accountId,
-		"containerId": c.containerId,
-		"ruleId":      c.ruleId,
-	})
-	req.Header.Set("User-Agent", c.s.userAgent())
-	if v, ok := c.opt_["ifNoneMatch"]; ok {
-		req.Header.Set("If-None-Match", fmt.Sprintf("%v", v))
-	}
-	if c.ctx_ != nil {
-		return ctxhttp.Do(c.ctx_, c.s.client, req)
-	}
-	return c.s.client.Do(req)
-}
-
-// Do executes the "tagmanager.accounts.containers.rules.get" call.
-// Exactly one of *Rule or error will be non-nil. Any non-2xx status
-// code is an error. Response headers are in either
-// *Rule.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 *AccountsContainersRulesGetCall) Do() (*Rule, error) {
-	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 := &Rule{
-		ServerResponse: googleapi.ServerResponse{
-			Header:         res.Header,
-			HTTPStatusCode: res.StatusCode,
-		},
-	}
-	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Gets a GTM Rule.",
-	//   "httpMethod": "GET",
-	//   "id": "tagmanager.accounts.containers.rules.get",
-	//   "parameterOrder": [
-	//     "accountId",
-	//     "containerId",
-	//     "ruleId"
-	//   ],
-	//   "parameters": {
-	//     "accountId": {
-	//       "description": "The GTM Account ID.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "containerId": {
-	//       "description": "The GTM Container ID.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "ruleId": {
-	//       "description": "The GTM Rule ID.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "accounts/{accountId}/containers/{containerId}/rules/{ruleId}",
-	//   "response": {
-	//     "$ref": "Rule"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/tagmanager.edit.containers",
-	//     "https://www.googleapis.com/auth/tagmanager.readonly"
-	//   ]
-	// }
-
-}
-
-// method id "tagmanager.accounts.containers.rules.list":
-
-type AccountsContainersRulesListCall struct {
-	s           *Service
-	accountId   string
-	containerId string
-	opt_        map[string]interface{}
-	ctx_        context.Context
-}
-
-// List: Lists all GTM Rules of a Container.
-func (r *AccountsContainersRulesService) List(accountId string, containerId string) *AccountsContainersRulesListCall {
-	c := &AccountsContainersRulesListCall{s: r.s, opt_: make(map[string]interface{})}
-	c.accountId = accountId
-	c.containerId = containerId
-	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 *AccountsContainersRulesListCall) Fields(s ...googleapi.Field) *AccountsContainersRulesListCall {
-	c.opt_["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 *AccountsContainersRulesListCall) IfNoneMatch(entityTag string) *AccountsContainersRulesListCall {
-	c.opt_["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 *AccountsContainersRulesListCall) Context(ctx context.Context) *AccountsContainersRulesListCall {
-	c.ctx_ = ctx
-	return c
-}
-
-func (c *AccountsContainersRulesListCall) doRequest(alt string) (*http.Response, error) {
-	var body io.Reader = nil
-	params := make(url.Values)
-	params.Set("alt", alt)
-	if v, ok := c.opt_["fields"]; ok {
-		params.Set("fields", fmt.Sprintf("%v", v))
-	}
-	urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/containers/{containerId}/rules")
-	urls += "?" + params.Encode()
-	req, _ := http.NewRequest("GET", urls, body)
-	googleapi.Expand(req.URL, map[string]string{
-		"accountId":   c.accountId,
-		"containerId": c.containerId,
-	})
-	req.Header.Set("User-Agent", c.s.userAgent())
-	if v, ok := c.opt_["ifNoneMatch"]; ok {
-		req.Header.Set("If-None-Match", fmt.Sprintf("%v", v))
-	}
-	if c.ctx_ != nil {
-		return ctxhttp.Do(c.ctx_, c.s.client, req)
-	}
-	return c.s.client.Do(req)
-}
-
-// Do executes the "tagmanager.accounts.containers.rules.list" call.
-// Exactly one of *ListRulesResponse or error will be non-nil. Any
-// non-2xx status code is an error. Response headers are in either
-// *ListRulesResponse.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 *AccountsContainersRulesListCall) Do() (*ListRulesResponse, error) {
-	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 := &ListRulesResponse{
-		ServerResponse: googleapi.ServerResponse{
-			Header:         res.Header,
-			HTTPStatusCode: res.StatusCode,
-		},
-	}
-	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Lists all GTM Rules of a Container.",
-	//   "httpMethod": "GET",
-	//   "id": "tagmanager.accounts.containers.rules.list",
-	//   "parameterOrder": [
-	//     "accountId",
-	//     "containerId"
-	//   ],
-	//   "parameters": {
-	//     "accountId": {
-	//       "description": "The GTM Account ID.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "containerId": {
-	//       "description": "The GTM Container ID.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "accounts/{accountId}/containers/{containerId}/rules",
-	//   "response": {
-	//     "$ref": "ListRulesResponse"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/tagmanager.edit.containers",
-	//     "https://www.googleapis.com/auth/tagmanager.readonly"
-	//   ]
-	// }
-
-}
-
-// method id "tagmanager.accounts.containers.rules.update":
-
-type AccountsContainersRulesUpdateCall struct {
-	s           *Service
-	accountId   string
-	containerId string
-	ruleId      string
-	rule        *Rule
-	opt_        map[string]interface{}
-	ctx_        context.Context
-}
-
-// Update: Updates a GTM Rule.
-func (r *AccountsContainersRulesService) Update(accountId string, containerId string, ruleId string, rule *Rule) *AccountsContainersRulesUpdateCall {
-	c := &AccountsContainersRulesUpdateCall{s: r.s, opt_: make(map[string]interface{})}
-	c.accountId = accountId
-	c.containerId = containerId
-	c.ruleId = ruleId
-	c.rule = rule
-	return c
-}
-
-// Fingerprint sets the optional parameter "fingerprint": When provided,
-// this fingerprint must match the fingerprint of the rule in storage.
-func (c *AccountsContainersRulesUpdateCall) Fingerprint(fingerprint string) *AccountsContainersRulesUpdateCall {
-	c.opt_["fingerprint"] = fingerprint
-	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 *AccountsContainersRulesUpdateCall) Fields(s ...googleapi.Field) *AccountsContainersRulesUpdateCall {
-	c.opt_["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 *AccountsContainersRulesUpdateCall) Context(ctx context.Context) *AccountsContainersRulesUpdateCall {
-	c.ctx_ = ctx
-	return c
-}
-
-func (c *AccountsContainersRulesUpdateCall) doRequest(alt string) (*http.Response, error) {
-	var body io.Reader = nil
-	body, err := googleapi.WithoutDataWrapper.JSONReader(c.rule)
-	if err != nil {
-		return nil, err
-	}
-	ctype := "application/json"
-	params := make(url.Values)
-	params.Set("alt", alt)
-	if v, ok := c.opt_["fingerprint"]; ok {
-		params.Set("fingerprint", fmt.Sprintf("%v", v))
-	}
-	if v, ok := c.opt_["fields"]; ok {
-		params.Set("fields", fmt.Sprintf("%v", v))
-	}
-	urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/containers/{containerId}/rules/{ruleId}")
-	urls += "?" + params.Encode()
-	req, _ := http.NewRequest("PUT", urls, body)
-	googleapi.Expand(req.URL, map[string]string{
-		"accountId":   c.accountId,
-		"containerId": c.containerId,
-		"ruleId":      c.ruleId,
-	})
-	req.Header.Set("Content-Type", ctype)
-	req.Header.Set("User-Agent", c.s.userAgent())
-	if c.ctx_ != nil {
-		return ctxhttp.Do(c.ctx_, c.s.client, req)
-	}
-	return c.s.client.Do(req)
-}
-
-// Do executes the "tagmanager.accounts.containers.rules.update" call.
-// Exactly one of *Rule or error will be non-nil. Any non-2xx status
-// code is an error. Response headers are in either
-// *Rule.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 *AccountsContainersRulesUpdateCall) Do() (*Rule, error) {
-	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 := &Rule{
-		ServerResponse: googleapi.ServerResponse{
-			Header:         res.Header,
-			HTTPStatusCode: res.StatusCode,
-		},
-	}
-	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Updates a GTM Rule.",
-	//   "httpMethod": "PUT",
-	//   "id": "tagmanager.accounts.containers.rules.update",
-	//   "parameterOrder": [
-	//     "accountId",
-	//     "containerId",
-	//     "ruleId"
-	//   ],
-	//   "parameters": {
-	//     "accountId": {
-	//       "description": "The GTM Account ID.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "containerId": {
-	//       "description": "The GTM Container ID.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "fingerprint": {
-	//       "description": "When provided, this fingerprint must match the fingerprint of the rule in storage.",
-	//       "location": "query",
-	//       "type": "string"
-	//     },
-	//     "ruleId": {
-	//       "description": "The GTM Rule ID.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "accounts/{accountId}/containers/{containerId}/rules/{ruleId}",
-	//   "request": {
-	//     "$ref": "Rule"
-	//   },
-	//   "response": {
-	//     "$ref": "Rule"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/tagmanager.edit.containers"
-	//   ]
-	// }
-
-}
-
 // method id "tagmanager.accounts.containers.tags.create":
 
 type AccountsContainersTagsCreateCall struct {
@@ -7651,9 +6210,9 @@
 }
 
 // Restore: Restores a Container Version. This will overwrite the
-// container's current configuration (including its macros, rules and
-// tags). The operation will not have any effect on the version that is
-// being served (i.e. the published version).
+// container's current configuration (including its variables, triggers
+// and tags). The operation will not have any effect on the version that
+// is being served (i.e. the published version).
 func (r *AccountsContainersVersionsService) Restore(accountId string, containerId string, containerVersionId string) *AccountsContainersVersionsRestoreCall {
 	c := &AccountsContainersVersionsRestoreCall{s: r.s, opt_: make(map[string]interface{})}
 	c.accountId = accountId
@@ -7736,7 +6295,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Restores a Container Version. This will overwrite the container's current configuration (including its macros, rules and tags). The operation will not have any effect on the version that is being served (i.e. the published version).",
+	//   "description": "Restores a Container Version. This will overwrite the container's current configuration (including its variables, triggers and tags). The operation will not have any effect on the version that is being served (i.e. the published version).",
 	//   "httpMethod": "POST",
 	//   "id": "tagmanager.accounts.containers.versions.restore",
 	//   "parameterOrder": [
diff --git a/taskqueue/v1beta1/taskqueue-gen.go b/taskqueue/v1beta1/taskqueue-gen.go
index 2f2c9b4..f619988 100644
--- a/taskqueue/v1beta1/taskqueue-gen.go
+++ b/taskqueue/v1beta1/taskqueue-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "taskqueue:v1beta1"
 const apiName = "taskqueue"
diff --git a/taskqueue/v1beta2/taskqueue-gen.go b/taskqueue/v1beta2/taskqueue-gen.go
index b288c61..8837ec1 100644
--- a/taskqueue/v1beta2/taskqueue-gen.go
+++ b/taskqueue/v1beta2/taskqueue-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "taskqueue:v1beta2"
 const apiName = "taskqueue"
diff --git a/tasks/v1/tasks-gen.go b/tasks/v1/tasks-gen.go
index d387b27..767a215 100644
--- a/tasks/v1/tasks-gen.go
+++ b/tasks/v1/tasks-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "tasks:v1"
 const apiName = "tasks"
diff --git a/translate/v2/translate-gen.go b/translate/v2/translate-gen.go
index e6efa0b..bec27c6 100644
--- a/translate/v2/translate-gen.go
+++ b/translate/v2/translate-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "translate:v2"
 const apiName = "translate"
diff --git a/urlshortener/v1/urlshortener-gen.go b/urlshortener/v1/urlshortener-gen.go
index 3acfe3d..2524540 100644
--- a/urlshortener/v1/urlshortener-gen.go
+++ b/urlshortener/v1/urlshortener-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "urlshortener:v1"
 const apiName = "urlshortener"
diff --git a/webfonts/v1/webfonts-gen.go b/webfonts/v1/webfonts-gen.go
index de87f55..1d86eb3 100644
--- a/webfonts/v1/webfonts-gen.go
+++ b/webfonts/v1/webfonts-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "webfonts:v1"
 const apiName = "webfonts"
diff --git a/webmasters/v3/webmasters-gen.go b/webmasters/v3/webmasters-gen.go
index cc0aee1..e728807 100644
--- a/webmasters/v3/webmasters-gen.go
+++ b/webmasters/v3/webmasters-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "webmasters:v3"
 const apiName = "webmasters"
diff --git a/youtube/v3/youtube-api.json b/youtube/v3/youtube-api.json
index 0eaa47b..34f3806 100644
--- a/youtube/v3/youtube-api.json
+++ b/youtube/v3/youtube-api.json
@@ -1,12 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/OiQFuZaPHLebnRB1awkIEBAme6Q\"",
+ "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/4-0NBGYpnIwmGOtwWyiB-28Ef00\"",
  "discoveryVersion": "v1",
  "id": "youtube:v3",
  "name": "youtube",
  "canonicalName": "YouTube",
  "version": "v3",
- "revision": "20150910",
+ "revision": "20151012",
  "title": "YouTube Data API",
  "description": "Programmatic access to YouTube features.",
  "ownerDomain": "google.com",
@@ -5188,7 +5188,7 @@
    "properties": {
     "ageGating": {
      "$ref": "VideoAgeGating",
-     "description": "Age restriction details related to a video."
+     "description": "Age restriction details related to a video. This data can only be retrieved by the video owner."
     },
     "contentDetails": {
      "$ref": "VideoContentDetails",
diff --git a/youtube/v3/youtube-gen.go b/youtube/v3/youtube-gen.go
index 3f3d876..ead7e65 100644
--- a/youtube/v3/youtube-gen.go
+++ b/youtube/v3/youtube-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "youtube:v3"
 const apiName = "youtube"
@@ -5660,7 +5662,8 @@
 
 // Video: A video resource represents a YouTube video.
 type Video struct {
-	// AgeGating: Age restriction details related to a video.
+	// AgeGating: Age restriction details related to a video. This data can
+	// only be retrieved by the video owner.
 	AgeGating *VideoAgeGating `json:"ageGating,omitempty"`
 
 	// ContentDetails: The contentDetails object contains information about
diff --git a/youtubeanalytics/v1/youtubeanalytics-gen.go b/youtubeanalytics/v1/youtubeanalytics-gen.go
index cacd377..e2b19b2 100644
--- a/youtubeanalytics/v1/youtubeanalytics-gen.go
+++ b/youtubeanalytics/v1/youtubeanalytics-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "youtubeAnalytics:v1"
 const apiName = "youtubeAnalytics"
diff --git a/youtubeanalytics/v1beta1/youtubeanalytics-gen.go b/youtubeanalytics/v1beta1/youtubeanalytics-gen.go
index 3ade9cf..5963956 100644
--- a/youtubeanalytics/v1beta1/youtubeanalytics-gen.go
+++ b/youtubeanalytics/v1beta1/youtubeanalytics-gen.go
@@ -37,6 +37,8 @@
 var _ = errors.New
 var _ = strings.Replace
 var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
 
 const apiId = "youtubeAnalytics:v1beta1"
 const apiName = "youtubeAnalytics"
diff --git a/youtubereporting/v1/youtubereporting-api.json b/youtubereporting/v1/youtubereporting-api.json
new file mode 100644
index 0000000..c6dd6e5
--- /dev/null
+++ b/youtubereporting/v1/youtubereporting-api.json
@@ -0,0 +1,522 @@
+{
+ "kind": "discovery#restDescription",
+ "etag": "\"ye6orv2F-1npMW3u9suM3a7C5Bo/8bskZWHrpgKCT1-uvibNvSv4NtA\"",
+ "discoveryVersion": "v1",
+ "id": "youtubereporting:v1",
+ "name": "youtubereporting",
+ "canonicalName": "YouTube Reporting",
+ "version": "v1",
+ "revision": "20150923",
+ "title": "YouTube Reporting API",
+ "description": "An API to schedule reporting jobs and download the resulting bulk data reports about YouTube channels, videos etc. in the form of CSV files.",
+ "ownerDomain": "google.com",
+ "ownerName": "Google",
+ "icons": {
+  "x16": "http://www.google.com/images/icons/product/search-16.gif",
+  "x32": "http://www.google.com/images/icons/product/search-32.gif"
+ },
+ "documentationLink": "https://developers.google.com/youtube/reporting/v1/reports/",
+ "protocol": "rest",
+ "baseUrl": "https://youtubereporting.googleapis.com/",
+ "basePath": "/",
+ "rootUrl": "https://youtubereporting.googleapis.com/",
+ "servicePath": "",
+ "batchPath": "batch",
+ "parameters": {
+  "access_token": {
+   "type": "string",
+   "description": "OAuth access token.",
+   "location": "query"
+  },
+  "alt": {
+   "type": "string",
+   "description": "Data format for response.",
+   "default": "json",
+   "enumDescriptions": [
+    "Responses with Content-Type of application/json",
+    "Media download with context-dependent Content-Type",
+    "Responses with Content-Type of application/x-protobuf"
+   ],
+   "location": "query"
+  },
+  "bearer_token": {
+   "type": "string",
+   "description": "OAuth bearer token.",
+   "location": "query"
+  },
+  "callback": {
+   "type": "string",
+   "description": "JSONP",
+   "location": "query"
+  },
+  "fields": {
+   "type": "string",
+   "description": "Selector specifying which fields to include in a partial response.",
+   "location": "query"
+  },
+  "key": {
+   "type": "string",
+   "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+   "location": "query"
+  },
+  "oauth_token": {
+   "type": "string",
+   "description": "OAuth 2.0 token for the current user.",
+   "location": "query"
+  },
+  "pp": {
+   "type": "boolean",
+   "description": "Pretty-print response.",
+   "default": "true",
+   "location": "query"
+  },
+  "prettyPrint": {
+   "type": "boolean",
+   "description": "Returns response with indentations and line breaks.",
+   "default": "true",
+   "location": "query"
+  },
+  "quotaUser": {
+   "type": "string",
+   "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+   "location": "query"
+  },
+  "upload_protocol": {
+   "type": "string",
+   "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+   "location": "query"
+  },
+  "uploadType": {
+   "type": "string",
+   "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+   "location": "query"
+  },
+  "$.xgafv": {
+   "type": "string",
+   "description": "V1 error format.",
+   "enumDescriptions": [
+    "v1 error format",
+    "v2 error format"
+   ],
+   "location": "query"
+  }
+ },
+ "auth": {
+  "oauth2": {
+   "scopes": {
+    "https://www.googleapis.com/auth/yt-analytics-monetary.readonly": {
+     "description": "View monetary and non-monetary YouTube Analytics reports for your YouTube content"
+    },
+    "https://www.googleapis.com/auth/yt-analytics.readonly": {
+     "description": "View YouTube Analytics reports for your YouTube content"
+    }
+   }
+  }
+ },
+ "schemas": {
+  "Media": {
+   "id": "Media",
+   "type": "object",
+   "description": "Media resource.",
+   "properties": {
+    "resourceName": {
+     "type": "string",
+     "description": "Name of the media resource."
+    }
+   }
+  },
+  "ListReportTypesResponse": {
+   "id": "ListReportTypesResponse",
+   "type": "object",
+   "description": "Response message for ReportingService.ListReportTypes.",
+   "properties": {
+    "reportTypes": {
+     "type": "array",
+     "description": "The list of report types.",
+     "items": {
+      "$ref": "ReportType"
+     }
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "A token to retrieve next page of results. Pass this value in the ListReportTypesRequest.page_token field in the subsequent call to `ListReportTypes` method to retrieve the next page of results."
+    }
+   }
+  },
+  "ReportType": {
+   "id": "ReportType",
+   "type": "object",
+   "description": "A report type.",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "The ID of the report type (max. 100 characters)."
+    },
+    "name": {
+     "type": "string",
+     "description": "The name of the report type (max. 100 characters)."
+    }
+   }
+  },
+  "Job": {
+   "id": "Job",
+   "type": "object",
+   "description": "A job creating reports of a specific type.",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "The server-generated ID of the job (max. 40 characters)."
+    },
+    "reportTypeId": {
+     "type": "string",
+     "description": "The type of reports this job creates. Corresponds to the ID of a ReportType."
+    },
+    "name": {
+     "type": "string",
+     "description": "The name of the job (max. 100 characters). TODO(lanthaler) Clarify what this will actually be used for"
+    },
+    "createTime": {
+     "type": "string",
+     "description": "The creation date/time of the job."
+    }
+   }
+  },
+  "ListJobsResponse": {
+   "id": "ListJobsResponse",
+   "type": "object",
+   "description": "Response message for ReportingService.ListJobs.",
+   "properties": {
+    "jobs": {
+     "type": "array",
+     "description": "The list of jobs.",
+     "items": {
+      "$ref": "Job"
+     }
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "A token to retrieve next page of results. Pass this value in the ListJobsRequest.page_token field in the subsequent call to `ListJobs` method to retrieve the next page of results."
+    }
+   }
+  },
+  "Empty": {
+   "id": "Empty",
+   "type": "object",
+   "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`."
+  },
+  "ListReportsResponse": {
+   "id": "ListReportsResponse",
+   "type": "object",
+   "description": "Response message for ReportingService.ListReports.",
+   "properties": {
+    "reports": {
+     "type": "array",
+     "description": "The list of report types.",
+     "items": {
+      "$ref": "Report"
+     }
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "A token to retrieve next page of results. Pass this value in the ListReportsRequest.page_token field in the subsequent call to `ListReports` method to retrieve the next page of results."
+    }
+   }
+  },
+  "Report": {
+   "id": "Report",
+   "type": "object",
+   "description": "A report's metadata including the URL from which the report itself can be downloaded.",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "The server-generated ID of the report."
+    },
+    "jobId": {
+     "type": "string",
+     "description": "The ID of the job that created this report."
+    },
+    "startTime": {
+     "type": "string",
+     "description": "The start of the time period that the report instance covers. The value is inclusive."
+    },
+    "endTime": {
+     "type": "string",
+     "description": "The end of the time period that the report instance covers. The value is exclusive."
+    },
+    "createTime": {
+     "type": "string",
+     "description": "The date/time when this report was created."
+    },
+    "downloadUrl": {
+     "type": "string",
+     "description": "The URL from which the report can be downloaded (max. 1000 characters)."
+    }
+   }
+  }
+ },
+ "resources": {
+  "media": {
+   "methods": {
+    "download": {
+     "id": "youtubereporting.media.download",
+     "path": "v1/media/{+resourceName}",
+     "httpMethod": "GET",
+     "description": "Method for media download. Download is supported on the URI `/v1/media/{+name}?alt=media`.",
+     "parameters": {
+      "resourceName": {
+       "type": "string",
+       "description": "Name of the media that is being downloaded. See [][ByteStream.ReadRequest.resource_name].",
+       "required": true,
+       "pattern": "^.*$",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "resourceName"
+     ],
+     "response": {
+      "$ref": "Media"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/yt-analytics-monetary.readonly",
+      "https://www.googleapis.com/auth/yt-analytics.readonly"
+     ],
+     "supportsMediaDownload": true
+    }
+   }
+  },
+  "reportTypes": {
+   "methods": {
+    "list": {
+     "id": "youtubereporting.reportTypes.list",
+     "path": "v1/reportTypes",
+     "httpMethod": "GET",
+     "description": "Lists report types.",
+     "parameters": {
+      "onBehalfOfContentOwner": {
+       "type": "string",
+       "description": "The content owner's external ID on which behalf the user is acting on. If not set, the user is acting for himself (his own channel).",
+       "location": "query"
+      },
+      "pageSize": {
+       "type": "integer",
+       "description": "Requested page size. Server may return fewer report types than requested. If unspecified, server will pick an appropriate default.",
+       "format": "int32",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "A token identifying a page of results the server should return. Typically, this is the value of ListReportTypesResponse.next_page_token returned in response to the previous call to the `ListReportTypes` method.",
+       "location": "query"
+      }
+     },
+     "response": {
+      "$ref": "ListReportTypesResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/yt-analytics-monetary.readonly",
+      "https://www.googleapis.com/auth/yt-analytics.readonly"
+     ]
+    }
+   }
+  },
+  "jobs": {
+   "methods": {
+    "create": {
+     "id": "youtubereporting.jobs.create",
+     "path": "v1/jobs",
+     "httpMethod": "POST",
+     "description": "Creates a job and returns it.",
+     "parameters": {
+      "onBehalfOfContentOwner": {
+       "type": "string",
+       "description": "The content owner's external ID on which behalf the user is acting on. If not set, the user is acting for himself (his own channel).",
+       "location": "query"
+      }
+     },
+     "request": {
+      "$ref": "Job"
+     },
+     "response": {
+      "$ref": "Job"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/yt-analytics-monetary.readonly",
+      "https://www.googleapis.com/auth/yt-analytics.readonly"
+     ]
+    },
+    "list": {
+     "id": "youtubereporting.jobs.list",
+     "path": "v1/jobs",
+     "httpMethod": "GET",
+     "description": "Lists jobs.",
+     "parameters": {
+      "onBehalfOfContentOwner": {
+       "type": "string",
+       "description": "The content owner's external ID on which behalf the user is acting on. If not set, the user is acting for himself (his own channel).",
+       "location": "query"
+      },
+      "pageSize": {
+       "type": "integer",
+       "description": "Requested page size. Server may return fewer jobs than requested. If unspecified, server will pick an appropriate default.",
+       "format": "int32",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "A token identifying a page of results the server should return. Typically, this is the value of ListReportTypesResponse.next_page_token returned in response to the previous call to the `ListJobs` method.",
+       "location": "query"
+      }
+     },
+     "response": {
+      "$ref": "ListJobsResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/yt-analytics-monetary.readonly",
+      "https://www.googleapis.com/auth/yt-analytics.readonly"
+     ]
+    },
+    "get": {
+     "id": "youtubereporting.jobs.get",
+     "path": "v1/jobs/{jobId}",
+     "httpMethod": "GET",
+     "description": "Gets a job.",
+     "parameters": {
+      "jobId": {
+       "type": "string",
+       "description": "The ID of the job to retrieve.",
+       "required": true,
+       "location": "path"
+      },
+      "onBehalfOfContentOwner": {
+       "type": "string",
+       "description": "The content owner's external ID on which behalf the user is acting on. If not set, the user is acting for himself (his own channel).",
+       "location": "query"
+      }
+     },
+     "parameterOrder": [
+      "jobId"
+     ],
+     "response": {
+      "$ref": "Job"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/yt-analytics-monetary.readonly",
+      "https://www.googleapis.com/auth/yt-analytics.readonly"
+     ]
+    },
+    "delete": {
+     "id": "youtubereporting.jobs.delete",
+     "path": "v1/jobs/{jobId}",
+     "httpMethod": "DELETE",
+     "description": "Deletes a job.",
+     "parameters": {
+      "jobId": {
+       "type": "string",
+       "description": "The ID of the job to delete.",
+       "required": true,
+       "location": "path"
+      },
+      "onBehalfOfContentOwner": {
+       "type": "string",
+       "description": "The content owner's external ID on which behalf the user is acting on. If not set, the user is acting for himself (his own channel).",
+       "location": "query"
+      }
+     },
+     "parameterOrder": [
+      "jobId"
+     ],
+     "response": {
+      "$ref": "Empty"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/yt-analytics-monetary.readonly",
+      "https://www.googleapis.com/auth/yt-analytics.readonly"
+     ]
+    }
+   },
+   "resources": {
+    "reports": {
+     "methods": {
+      "list": {
+       "id": "youtubereporting.jobs.reports.list",
+       "path": "v1/jobs/{jobId}/reports",
+       "httpMethod": "GET",
+       "description": "Lists reports created by a specific job. Returns NOT_FOUND if the job does not exist.",
+       "parameters": {
+        "jobId": {
+         "type": "string",
+         "description": "The ID of the job.",
+         "required": true,
+         "location": "path"
+        },
+        "onBehalfOfContentOwner": {
+         "type": "string",
+         "description": "The content owner's external ID on which behalf the user is acting on. If not set, the user is acting for himself (his own channel).",
+         "location": "query"
+        },
+        "pageSize": {
+         "type": "integer",
+         "description": "Requested page size. Server may return fewer report types than requested. If unspecified, server will pick an appropriate default.",
+         "format": "int32",
+         "location": "query"
+        },
+        "pageToken": {
+         "type": "string",
+         "description": "A token identifying a page of results the server should return. Typically, this is the value of ListReportsResponse.next_page_token returned in response to the previous call to the `ListReports` method.",
+         "location": "query"
+        }
+       },
+       "parameterOrder": [
+        "jobId"
+       ],
+       "response": {
+        "$ref": "ListReportsResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/yt-analytics-monetary.readonly",
+        "https://www.googleapis.com/auth/yt-analytics.readonly"
+       ]
+      },
+      "get": {
+       "id": "youtubereporting.jobs.reports.get",
+       "path": "v1/jobs/{jobId}/reports/{reportId}",
+       "httpMethod": "GET",
+       "description": "Gets the metadata of a specific report.",
+       "parameters": {
+        "jobId": {
+         "type": "string",
+         "description": "The ID of the job.",
+         "required": true,
+         "location": "path"
+        },
+        "reportId": {
+         "type": "string",
+         "description": "The ID of the report to retrieve.",
+         "required": true,
+         "location": "path"
+        },
+        "onBehalfOfContentOwner": {
+         "type": "string",
+         "description": "The content owner's external ID on which behalf the user is acting on. If not set, the user is acting for himself (his own channel).",
+         "location": "query"
+        }
+       },
+       "parameterOrder": [
+        "jobId",
+        "reportId"
+       ],
+       "response": {
+        "$ref": "Report"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/yt-analytics-monetary.readonly",
+        "https://www.googleapis.com/auth/yt-analytics.readonly"
+       ]
+      }
+     }
+    }
+   }
+  }
+ }
+}
diff --git a/youtubereporting/v1/youtubereporting-gen.go b/youtubereporting/v1/youtubereporting-gen.go
new file mode 100644
index 0000000..0a8d8fd
--- /dev/null
+++ b/youtubereporting/v1/youtubereporting-gen.go
@@ -0,0 +1,1564 @@
+// Package youtubereporting provides access to the YouTube Reporting API.
+//
+// See https://developers.google.com/youtube/reporting/v1/reports/
+//
+// Usage example:
+//
+//   import "google.golang.org/api/youtubereporting/v1"
+//   ...
+//   youtubereportingService, err := youtubereporting.New(oauthHttpClient)
+package youtubereporting // import "google.golang.org/api/youtubereporting/v1"
+
+import (
+	"bytes"
+	"encoding/json"
+	"errors"
+	"fmt"
+	"golang.org/x/net/context"
+	"golang.org/x/net/context/ctxhttp"
+	"google.golang.org/api/googleapi"
+	"google.golang.org/api/internal"
+	"io"
+	"net/http"
+	"net/url"
+	"strconv"
+	"strings"
+)
+
+// Always reference these packages, just in case the auto-generated code
+// below doesn't.
+var _ = bytes.NewBuffer
+var _ = strconv.Itoa
+var _ = fmt.Sprintf
+var _ = json.NewDecoder
+var _ = io.Copy
+var _ = url.Parse
+var _ = googleapi.Version
+var _ = errors.New
+var _ = strings.Replace
+var _ = internal.MarshalJSON
+var _ = context.Canceled
+var _ = ctxhttp.Do
+
+const apiId = "youtubereporting:v1"
+const apiName = "youtubereporting"
+const apiVersion = "v1"
+const basePath = "https://youtubereporting.googleapis.com/"
+
+// OAuth2 scopes used by this API.
+const (
+	// View monetary and non-monetary YouTube Analytics reports for your
+	// YouTube content
+	YtAnalyticsMonetaryReadonlyScope = "https://www.googleapis.com/auth/yt-analytics-monetary.readonly"
+
+	// View YouTube Analytics reports for your YouTube content
+	YtAnalyticsReadonlyScope = "https://www.googleapis.com/auth/yt-analytics.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.Jobs = NewJobsService(s)
+	s.Media = NewMediaService(s)
+	s.ReportTypes = NewReportTypesService(s)
+	return s, nil
+}
+
+type Service struct {
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
+
+	Jobs *JobsService
+
+	Media *MediaService
+
+	ReportTypes *ReportTypesService
+}
+
+func (s *Service) userAgent() string {
+	if s.UserAgent == "" {
+		return googleapi.UserAgent
+	}
+	return googleapi.UserAgent + " " + s.UserAgent
+}
+
+func NewJobsService(s *Service) *JobsService {
+	rs := &JobsService{s: s}
+	rs.Reports = NewJobsReportsService(s)
+	return rs
+}
+
+type JobsService struct {
+	s *Service
+
+	Reports *JobsReportsService
+}
+
+func NewJobsReportsService(s *Service) *JobsReportsService {
+	rs := &JobsReportsService{s: s}
+	return rs
+}
+
+type JobsReportsService struct {
+	s *Service
+}
+
+func NewMediaService(s *Service) *MediaService {
+	rs := &MediaService{s: s}
+	return rs
+}
+
+type MediaService struct {
+	s *Service
+}
+
+func NewReportTypesService(s *Service) *ReportTypesService {
+	rs := &ReportTypesService{s: s}
+	return rs
+}
+
+type ReportTypesService struct {
+	s *Service
+}
+
+// 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:"-"`
+}
+
+// Job: A job creating reports of a specific type.
+type Job struct {
+	// CreateTime: The creation date/time of the job.
+	CreateTime string `json:"createTime,omitempty"`
+
+	// Id: The server-generated ID of the job (max. 40 characters).
+	Id string `json:"id,omitempty"`
+
+	// Name: The name of the job (max. 100 characters). TODO(lanthaler)
+	// Clarify what this will actually be used for
+	Name string `json:"name,omitempty"`
+
+	// ReportTypeId: The type of reports this job creates. Corresponds to
+	// the ID of a ReportType.
+	ReportTypeId string `json:"reportTypeId,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:"-"`
+}
+
+func (s *Job) MarshalJSON() ([]byte, error) {
+	type noMethod Job
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// ListJobsResponse: Response message for ReportingService.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 ListJobsRequest.page_token field in the subsequent call
+	// to `ListJobs` method to retrieve the next page of results.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "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:"-"`
+}
+
+func (s *ListJobsResponse) MarshalJSON() ([]byte, error) {
+	type noMethod ListJobsResponse
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// ListReportTypesResponse: Response message for
+// ReportingService.ListReportTypes.
+type ListReportTypesResponse struct {
+	// NextPageToken: A token to retrieve next page of results. Pass this
+	// value in the ListReportTypesRequest.page_token field in the
+	// subsequent call to `ListReportTypes` method to retrieve the next page
+	// of results.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// ReportTypes: The list of report types.
+	ReportTypes []*ReportType `json:"reportTypes,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "NextPageToken") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *ListReportTypesResponse) MarshalJSON() ([]byte, error) {
+	type noMethod ListReportTypesResponse
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// ListReportsResponse: Response message for
+// ReportingService.ListReports.
+type ListReportsResponse struct {
+	// NextPageToken: A token to retrieve next page of results. Pass this
+	// value in the ListReportsRequest.page_token field in the subsequent
+	// call to `ListReports` method to retrieve the next page of results.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// Reports: The list of report types.
+	Reports []*Report `json:"reports,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "NextPageToken") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *ListReportsResponse) MarshalJSON() ([]byte, error) {
+	type noMethod ListReportsResponse
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// Media: Media resource.
+type Media struct {
+	// ResourceName: Name of the media resource.
+	ResourceName string `json:"resourceName,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "ResourceName") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *Media) MarshalJSON() ([]byte, error) {
+	type noMethod Media
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// Report: A report's metadata including the URL from which the report
+// itself can be downloaded.
+type Report struct {
+	// CreateTime: The date/time when this report was created.
+	CreateTime string `json:"createTime,omitempty"`
+
+	// DownloadUrl: The URL from which the report can be downloaded (max.
+	// 1000 characters).
+	DownloadUrl string `json:"downloadUrl,omitempty"`
+
+	// EndTime: The end of the time period that the report instance covers.
+	// The value is exclusive.
+	EndTime string `json:"endTime,omitempty"`
+
+	// Id: The server-generated ID of the report.
+	Id string `json:"id,omitempty"`
+
+	// JobId: The ID of the job that created this report.
+	JobId string `json:"jobId,omitempty"`
+
+	// StartTime: The start of the time period that the report instance
+	// covers. The value is inclusive.
+	StartTime string `json:"startTime,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:"-"`
+}
+
+func (s *Report) MarshalJSON() ([]byte, error) {
+	type noMethod Report
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// ReportType: A report type.
+type ReportType struct {
+	// Id: The ID of the report type (max. 100 characters).
+	Id string `json:"id,omitempty"`
+
+	// Name: The name of the report type (max. 100 characters).
+	Name string `json:"name,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Id") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+}
+
+func (s *ReportType) MarshalJSON() ([]byte, error) {
+	type noMethod ReportType
+	raw := noMethod(*s)
+	return internal.MarshalJSON(raw, s.ForceSendFields)
+}
+
+// method id "youtubereporting.jobs.create":
+
+type JobsCreateCall struct {
+	s    *Service
+	job  *Job
+	opt_ map[string]interface{}
+	ctx_ context.Context
+}
+
+// Create: Creates a job and returns it.
+func (r *JobsService) Create(job *Job) *JobsCreateCall {
+	c := &JobsCreateCall{s: r.s, opt_: make(map[string]interface{})}
+	c.job = job
+	return c
+}
+
+// OnBehalfOfContentOwner sets the optional parameter
+// "onBehalfOfContentOwner": The content owner's external ID on which
+// behalf the user is acting on. If not set, the user is acting for
+// himself (his own channel).
+func (c *JobsCreateCall) OnBehalfOfContentOwner(onBehalfOfContentOwner string) *JobsCreateCall {
+	c.opt_["onBehalfOfContentOwner"] = onBehalfOfContentOwner
+	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 *JobsCreateCall) Fields(s ...googleapi.Field) *JobsCreateCall {
+	c.opt_["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 *JobsCreateCall) Context(ctx context.Context) *JobsCreateCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *JobsCreateCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.job)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["onBehalfOfContentOwner"]; ok {
+		params.Set("onBehalfOfContentOwner", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/jobs")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "youtubereporting.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 *JobsCreateCall) Do() (*Job, error) {
+	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,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Creates a job and returns it.",
+	//   "httpMethod": "POST",
+	//   "id": "youtubereporting.jobs.create",
+	//   "parameters": {
+	//     "onBehalfOfContentOwner": {
+	//       "description": "The content owner's external ID on which behalf the user is acting on. If not set, the user is acting for himself (his own channel).",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/jobs",
+	//   "request": {
+	//     "$ref": "Job"
+	//   },
+	//   "response": {
+	//     "$ref": "Job"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/yt-analytics-monetary.readonly",
+	//     "https://www.googleapis.com/auth/yt-analytics.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "youtubereporting.jobs.delete":
+
+type JobsDeleteCall struct {
+	s     *Service
+	jobId string
+	opt_  map[string]interface{}
+	ctx_  context.Context
+}
+
+// Delete: Deletes a job.
+func (r *JobsService) Delete(jobId string) *JobsDeleteCall {
+	c := &JobsDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.jobId = jobId
+	return c
+}
+
+// OnBehalfOfContentOwner sets the optional parameter
+// "onBehalfOfContentOwner": The content owner's external ID on which
+// behalf the user is acting on. If not set, the user is acting for
+// himself (his own channel).
+func (c *JobsDeleteCall) OnBehalfOfContentOwner(onBehalfOfContentOwner string) *JobsDeleteCall {
+	c.opt_["onBehalfOfContentOwner"] = onBehalfOfContentOwner
+	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 *JobsDeleteCall) Fields(s ...googleapi.Field) *JobsDeleteCall {
+	c.opt_["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 *JobsDeleteCall) Context(ctx context.Context) *JobsDeleteCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *JobsDeleteCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["onBehalfOfContentOwner"]; ok {
+		params.Set("onBehalfOfContentOwner", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/jobs/{jobId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"jobId": c.jobId,
+	})
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "youtubereporting.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 *JobsDeleteCall) Do() (*Empty, error) {
+	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,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Deletes a job.",
+	//   "httpMethod": "DELETE",
+	//   "id": "youtubereporting.jobs.delete",
+	//   "parameterOrder": [
+	//     "jobId"
+	//   ],
+	//   "parameters": {
+	//     "jobId": {
+	//       "description": "The ID of the job to delete.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "onBehalfOfContentOwner": {
+	//       "description": "The content owner's external ID on which behalf the user is acting on. If not set, the user is acting for himself (his own channel).",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/jobs/{jobId}",
+	//   "response": {
+	//     "$ref": "Empty"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/yt-analytics-monetary.readonly",
+	//     "https://www.googleapis.com/auth/yt-analytics.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "youtubereporting.jobs.get":
+
+type JobsGetCall struct {
+	s     *Service
+	jobId string
+	opt_  map[string]interface{}
+	ctx_  context.Context
+}
+
+// Get: Gets a job.
+func (r *JobsService) Get(jobId string) *JobsGetCall {
+	c := &JobsGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.jobId = jobId
+	return c
+}
+
+// OnBehalfOfContentOwner sets the optional parameter
+// "onBehalfOfContentOwner": The content owner's external ID on which
+// behalf the user is acting on. If not set, the user is acting for
+// himself (his own channel).
+func (c *JobsGetCall) OnBehalfOfContentOwner(onBehalfOfContentOwner string) *JobsGetCall {
+	c.opt_["onBehalfOfContentOwner"] = onBehalfOfContentOwner
+	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 *JobsGetCall) Fields(s ...googleapi.Field) *JobsGetCall {
+	c.opt_["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 *JobsGetCall) IfNoneMatch(entityTag string) *JobsGetCall {
+	c.opt_["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 *JobsGetCall) Context(ctx context.Context) *JobsGetCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *JobsGetCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["onBehalfOfContentOwner"]; ok {
+		params.Set("onBehalfOfContentOwner", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/jobs/{jobId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"jobId": c.jobId,
+	})
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if v, ok := c.opt_["ifNoneMatch"]; ok {
+		req.Header.Set("If-None-Match", fmt.Sprintf("%v", v))
+	}
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "youtubereporting.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 *JobsGetCall) Do() (*Job, error) {
+	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,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets a job.",
+	//   "httpMethod": "GET",
+	//   "id": "youtubereporting.jobs.get",
+	//   "parameterOrder": [
+	//     "jobId"
+	//   ],
+	//   "parameters": {
+	//     "jobId": {
+	//       "description": "The ID of the job to retrieve.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "onBehalfOfContentOwner": {
+	//       "description": "The content owner's external ID on which behalf the user is acting on. If not set, the user is acting for himself (his own channel).",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/jobs/{jobId}",
+	//   "response": {
+	//     "$ref": "Job"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/yt-analytics-monetary.readonly",
+	//     "https://www.googleapis.com/auth/yt-analytics.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "youtubereporting.jobs.list":
+
+type JobsListCall struct {
+	s    *Service
+	opt_ map[string]interface{}
+	ctx_ context.Context
+}
+
+// List: Lists jobs.
+func (r *JobsService) List() *JobsListCall {
+	c := &JobsListCall{s: r.s, opt_: make(map[string]interface{})}
+	return c
+}
+
+// OnBehalfOfContentOwner sets the optional parameter
+// "onBehalfOfContentOwner": The content owner's external ID on which
+// behalf the user is acting on. If not set, the user is acting for
+// himself (his own channel).
+func (c *JobsListCall) OnBehalfOfContentOwner(onBehalfOfContentOwner string) *JobsListCall {
+	c.opt_["onBehalfOfContentOwner"] = onBehalfOfContentOwner
+	return c
+}
+
+// PageSize sets the optional parameter "pageSize": Requested page size.
+// Server may return fewer jobs than requested. If unspecified, server
+// will pick an appropriate default.
+func (c *JobsListCall) PageSize(pageSize int64) *JobsListCall {
+	c.opt_["pageSize"] = pageSize
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": A token
+// identifying a page of results the server should return. Typically,
+// this is the value of ListReportTypesResponse.next_page_token returned
+// in response to the previous call to the `ListJobs` method.
+func (c *JobsListCall) PageToken(pageToken string) *JobsListCall {
+	c.opt_["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 *JobsListCall) Fields(s ...googleapi.Field) *JobsListCall {
+	c.opt_["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 *JobsListCall) IfNoneMatch(entityTag string) *JobsListCall {
+	c.opt_["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 *JobsListCall) Context(ctx context.Context) *JobsListCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *JobsListCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["onBehalfOfContentOwner"]; ok {
+		params.Set("onBehalfOfContentOwner", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["pageSize"]; ok {
+		params.Set("pageSize", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["pageToken"]; ok {
+		params.Set("pageToken", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/jobs")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if v, ok := c.opt_["ifNoneMatch"]; ok {
+		req.Header.Set("If-None-Match", fmt.Sprintf("%v", v))
+	}
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "youtubereporting.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 *JobsListCall) Do() (*ListJobsResponse, error) {
+	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,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists jobs.",
+	//   "httpMethod": "GET",
+	//   "id": "youtubereporting.jobs.list",
+	//   "parameters": {
+	//     "onBehalfOfContentOwner": {
+	//       "description": "The content owner's external ID on which behalf the user is acting on. If not set, the user is acting for himself (his own channel).",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "pageSize": {
+	//       "description": "Requested page size. Server may return fewer jobs than requested. If unspecified, server will pick an appropriate default.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "A token identifying a page of results the server should return. Typically, this is the value of ListReportTypesResponse.next_page_token returned in response to the previous call to the `ListJobs` method.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/jobs",
+	//   "response": {
+	//     "$ref": "ListJobsResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/yt-analytics-monetary.readonly",
+	//     "https://www.googleapis.com/auth/yt-analytics.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "youtubereporting.jobs.reports.get":
+
+type JobsReportsGetCall struct {
+	s        *Service
+	jobId    string
+	reportId string
+	opt_     map[string]interface{}
+	ctx_     context.Context
+}
+
+// Get: Gets the metadata of a specific report.
+func (r *JobsReportsService) Get(jobId string, reportId string) *JobsReportsGetCall {
+	c := &JobsReportsGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.jobId = jobId
+	c.reportId = reportId
+	return c
+}
+
+// OnBehalfOfContentOwner sets the optional parameter
+// "onBehalfOfContentOwner": The content owner's external ID on which
+// behalf the user is acting on. If not set, the user is acting for
+// himself (his own channel).
+func (c *JobsReportsGetCall) OnBehalfOfContentOwner(onBehalfOfContentOwner string) *JobsReportsGetCall {
+	c.opt_["onBehalfOfContentOwner"] = onBehalfOfContentOwner
+	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 *JobsReportsGetCall) Fields(s ...googleapi.Field) *JobsReportsGetCall {
+	c.opt_["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 *JobsReportsGetCall) IfNoneMatch(entityTag string) *JobsReportsGetCall {
+	c.opt_["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 *JobsReportsGetCall) Context(ctx context.Context) *JobsReportsGetCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *JobsReportsGetCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["onBehalfOfContentOwner"]; ok {
+		params.Set("onBehalfOfContentOwner", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/jobs/{jobId}/reports/{reportId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"jobId":    c.jobId,
+		"reportId": c.reportId,
+	})
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if v, ok := c.opt_["ifNoneMatch"]; ok {
+		req.Header.Set("If-None-Match", fmt.Sprintf("%v", v))
+	}
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "youtubereporting.jobs.reports.get" call.
+// Exactly one of *Report or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Report.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 *JobsReportsGetCall) Do() (*Report, error) {
+	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 := &Report{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets the metadata of a specific report.",
+	//   "httpMethod": "GET",
+	//   "id": "youtubereporting.jobs.reports.get",
+	//   "parameterOrder": [
+	//     "jobId",
+	//     "reportId"
+	//   ],
+	//   "parameters": {
+	//     "jobId": {
+	//       "description": "The ID of the job.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "onBehalfOfContentOwner": {
+	//       "description": "The content owner's external ID on which behalf the user is acting on. If not set, the user is acting for himself (his own channel).",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "reportId": {
+	//       "description": "The ID of the report to retrieve.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/jobs/{jobId}/reports/{reportId}",
+	//   "response": {
+	//     "$ref": "Report"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/yt-analytics-monetary.readonly",
+	//     "https://www.googleapis.com/auth/yt-analytics.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "youtubereporting.jobs.reports.list":
+
+type JobsReportsListCall struct {
+	s     *Service
+	jobId string
+	opt_  map[string]interface{}
+	ctx_  context.Context
+}
+
+// List: Lists reports created by a specific job. Returns NOT_FOUND if
+// the job does not exist.
+func (r *JobsReportsService) List(jobId string) *JobsReportsListCall {
+	c := &JobsReportsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.jobId = jobId
+	return c
+}
+
+// OnBehalfOfContentOwner sets the optional parameter
+// "onBehalfOfContentOwner": The content owner's external ID on which
+// behalf the user is acting on. If not set, the user is acting for
+// himself (his own channel).
+func (c *JobsReportsListCall) OnBehalfOfContentOwner(onBehalfOfContentOwner string) *JobsReportsListCall {
+	c.opt_["onBehalfOfContentOwner"] = onBehalfOfContentOwner
+	return c
+}
+
+// PageSize sets the optional parameter "pageSize": Requested page size.
+// Server may return fewer report types than requested. If unspecified,
+// server will pick an appropriate default.
+func (c *JobsReportsListCall) PageSize(pageSize int64) *JobsReportsListCall {
+	c.opt_["pageSize"] = pageSize
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": A token
+// identifying a page of results the server should return. Typically,
+// this is the value of ListReportsResponse.next_page_token returned in
+// response to the previous call to the `ListReports` method.
+func (c *JobsReportsListCall) PageToken(pageToken string) *JobsReportsListCall {
+	c.opt_["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 *JobsReportsListCall) Fields(s ...googleapi.Field) *JobsReportsListCall {
+	c.opt_["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 *JobsReportsListCall) IfNoneMatch(entityTag string) *JobsReportsListCall {
+	c.opt_["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 *JobsReportsListCall) Context(ctx context.Context) *JobsReportsListCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *JobsReportsListCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["onBehalfOfContentOwner"]; ok {
+		params.Set("onBehalfOfContentOwner", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["pageSize"]; ok {
+		params.Set("pageSize", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["pageToken"]; ok {
+		params.Set("pageToken", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/jobs/{jobId}/reports")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"jobId": c.jobId,
+	})
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if v, ok := c.opt_["ifNoneMatch"]; ok {
+		req.Header.Set("If-None-Match", fmt.Sprintf("%v", v))
+	}
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "youtubereporting.jobs.reports.list" call.
+// Exactly one of *ListReportsResponse or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *ListReportsResponse.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 *JobsReportsListCall) Do() (*ListReportsResponse, error) {
+	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 := &ListReportsResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists reports created by a specific job. Returns NOT_FOUND if the job does not exist.",
+	//   "httpMethod": "GET",
+	//   "id": "youtubereporting.jobs.reports.list",
+	//   "parameterOrder": [
+	//     "jobId"
+	//   ],
+	//   "parameters": {
+	//     "jobId": {
+	//       "description": "The ID of the job.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "onBehalfOfContentOwner": {
+	//       "description": "The content owner's external ID on which behalf the user is acting on. If not set, the user is acting for himself (his own channel).",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "pageSize": {
+	//       "description": "Requested page size. Server may return fewer report types than requested. If unspecified, server will pick an appropriate default.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "A token identifying a page of results the server should return. Typically, this is the value of ListReportsResponse.next_page_token returned in response to the previous call to the `ListReports` method.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/jobs/{jobId}/reports",
+	//   "response": {
+	//     "$ref": "ListReportsResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/yt-analytics-monetary.readonly",
+	//     "https://www.googleapis.com/auth/yt-analytics.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "youtubereporting.media.download":
+
+type MediaDownloadCall struct {
+	s            *Service
+	resourceName string
+	opt_         map[string]interface{}
+	ctx_         context.Context
+}
+
+// Download: Method for media download. Download is supported on the URI
+// `/v1/media/{+name}?alt=media`.
+func (r *MediaService) Download(resourceName string) *MediaDownloadCall {
+	c := &MediaDownloadCall{s: r.s, opt_: make(map[string]interface{})}
+	c.resourceName = resourceName
+	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 *MediaDownloadCall) Fields(s ...googleapi.Field) *MediaDownloadCall {
+	c.opt_["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 *MediaDownloadCall) IfNoneMatch(entityTag string) *MediaDownloadCall {
+	c.opt_["ifNoneMatch"] = entityTag
+	return c
+}
+
+// Context sets the context to be used in this call's Do and Download methods.
+// Any pending HTTP request will be aborted if the provided context
+// is canceled.
+func (c *MediaDownloadCall) Context(ctx context.Context) *MediaDownloadCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *MediaDownloadCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/media/{+resourceName}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"resourceName": c.resourceName,
+	})
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if v, ok := c.opt_["ifNoneMatch"]; ok {
+		req.Header.Set("If-None-Match", fmt.Sprintf("%v", v))
+	}
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Download fetches the API endpoint's "media" value, instead of the normal
+// API response value. If the returned error is nil, the Response is guaranteed to
+// have a 2xx status code. Callers must close the Response.Body as usual.
+func (c *MediaDownloadCall) Download() (*http.Response, error) {
+	res, err := c.doRequest("media")
+	if err != nil {
+		return nil, err
+	}
+	if err := googleapi.CheckMediaResponse(res); err != nil {
+		res.Body.Close()
+		return nil, err
+	}
+	return res, nil
+}
+
+// Do executes the "youtubereporting.media.download" call.
+// Exactly one of *Media or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Media.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 *MediaDownloadCall) Do() (*Media, error) {
+	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 := &Media{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Method for media download. Download is supported on the URI `/v1/media/{+name}?alt=media`.",
+	//   "httpMethod": "GET",
+	//   "id": "youtubereporting.media.download",
+	//   "parameterOrder": [
+	//     "resourceName"
+	//   ],
+	//   "parameters": {
+	//     "resourceName": {
+	//       "description": "Name of the media that is being downloaded. See [][ByteStream.ReadRequest.resource_name].",
+	//       "location": "path",
+	//       "pattern": "^.*$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/media/{+resourceName}",
+	//   "response": {
+	//     "$ref": "Media"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/yt-analytics-monetary.readonly",
+	//     "https://www.googleapis.com/auth/yt-analytics.readonly"
+	//   ],
+	//   "supportsMediaDownload": true
+	// }
+
+}
+
+// method id "youtubereporting.reportTypes.list":
+
+type ReportTypesListCall struct {
+	s    *Service
+	opt_ map[string]interface{}
+	ctx_ context.Context
+}
+
+// List: Lists report types.
+func (r *ReportTypesService) List() *ReportTypesListCall {
+	c := &ReportTypesListCall{s: r.s, opt_: make(map[string]interface{})}
+	return c
+}
+
+// OnBehalfOfContentOwner sets the optional parameter
+// "onBehalfOfContentOwner": The content owner's external ID on which
+// behalf the user is acting on. If not set, the user is acting for
+// himself (his own channel).
+func (c *ReportTypesListCall) OnBehalfOfContentOwner(onBehalfOfContentOwner string) *ReportTypesListCall {
+	c.opt_["onBehalfOfContentOwner"] = onBehalfOfContentOwner
+	return c
+}
+
+// PageSize sets the optional parameter "pageSize": Requested page size.
+// Server may return fewer report types than requested. If unspecified,
+// server will pick an appropriate default.
+func (c *ReportTypesListCall) PageSize(pageSize int64) *ReportTypesListCall {
+	c.opt_["pageSize"] = pageSize
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": A token
+// identifying a page of results the server should return. Typically,
+// this is the value of ListReportTypesResponse.next_page_token returned
+// in response to the previous call to the `ListReportTypes` method.
+func (c *ReportTypesListCall) PageToken(pageToken string) *ReportTypesListCall {
+	c.opt_["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 *ReportTypesListCall) Fields(s ...googleapi.Field) *ReportTypesListCall {
+	c.opt_["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 *ReportTypesListCall) IfNoneMatch(entityTag string) *ReportTypesListCall {
+	c.opt_["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 *ReportTypesListCall) Context(ctx context.Context) *ReportTypesListCall {
+	c.ctx_ = ctx
+	return c
+}
+
+func (c *ReportTypesListCall) doRequest(alt string) (*http.Response, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", alt)
+	if v, ok := c.opt_["onBehalfOfContentOwner"]; ok {
+		params.Set("onBehalfOfContentOwner", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["pageSize"]; ok {
+		params.Set("pageSize", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["pageToken"]; ok {
+		params.Set("pageToken", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["fields"]; ok {
+		params.Set("fields", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/reportTypes")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", c.s.userAgent())
+	if v, ok := c.opt_["ifNoneMatch"]; ok {
+		req.Header.Set("If-None-Match", fmt.Sprintf("%v", v))
+	}
+	if c.ctx_ != nil {
+		return ctxhttp.Do(c.ctx_, c.s.client, req)
+	}
+	return c.s.client.Do(req)
+}
+
+// Do executes the "youtubereporting.reportTypes.list" call.
+// Exactly one of *ListReportTypesResponse or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *ListReportTypesResponse.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 *ReportTypesListCall) Do() (*ListReportTypesResponse, error) {
+	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 := &ListReportTypesResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists report types.",
+	//   "httpMethod": "GET",
+	//   "id": "youtubereporting.reportTypes.list",
+	//   "parameters": {
+	//     "onBehalfOfContentOwner": {
+	//       "description": "The content owner's external ID on which behalf the user is acting on. If not set, the user is acting for himself (his own channel).",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "pageSize": {
+	//       "description": "Requested page size. Server may return fewer report types than requested. If unspecified, server will pick an appropriate default.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "A token identifying a page of results the server should return. Typically, this is the value of ListReportTypesResponse.next_page_token returned in response to the previous call to the `ListReportTypes` method.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/reportTypes",
+	//   "response": {
+	//     "$ref": "ListReportTypesResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/yt-analytics-monetary.readonly",
+	//     "https://www.googleapis.com/auth/yt-analytics.readonly"
+	//   ]
+	// }
+
+}