all: new and updated APIs

R=golang-dev
CC=golang-dev
https://codereview.appspot.com/42850043
diff --git a/adexchangebuyer/v1.1/adexchangebuyer-api.json b/adexchangebuyer/v1.1/adexchangebuyer-api.json
index 4bec9bc..ea597bd 100644
--- a/adexchangebuyer/v1.1/adexchangebuyer-api.json
+++ b/adexchangebuyer/v1.1/adexchangebuyer-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/1UCG4CqfTBrxPN0MRjUm7GaLJ7Y\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/1UCG4CqfTBrxPN0MRjUm7GaLJ7Y\"",
  "discoveryVersion": "v1",
  "id": "adexchangebuyer:v1.1",
  "name": "adexchangebuyer",
diff --git a/adexchangebuyer/v1.2/adexchangebuyer-api.json b/adexchangebuyer/v1.2/adexchangebuyer-api.json
index 7366d86..37c1e11 100644
--- a/adexchangebuyer/v1.2/adexchangebuyer-api.json
+++ b/adexchangebuyer/v1.2/adexchangebuyer-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/FxhARD4JOsHMcAGQZjSyDYmF74M\"",
+ "etag": "\"qMhxoRFWKZK4K3KdZJuqms1o3fc/FxhARD4JOsHMcAGQZjSyDYmF74M\"",
  "discoveryVersion": "v1",
  "id": "adexchangebuyer:v1.2",
  "name": "adexchangebuyer",
diff --git a/adexchangebuyer/v1.3/adexchangebuyer-api.json b/adexchangebuyer/v1.3/adexchangebuyer-api.json
index 6c3ee1b..4c93c84 100644
--- a/adexchangebuyer/v1.3/adexchangebuyer-api.json
+++ b/adexchangebuyer/v1.3/adexchangebuyer-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/sOPwg9Wsqeozwe8JfCsRGGLpwIc\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/sOPwg9Wsqeozwe8JfCsRGGLpwIc\"",
  "discoveryVersion": "v1",
  "id": "adexchangebuyer:v1.3",
  "name": "adexchangebuyer",
diff --git a/adexchangebuyer/v1/adexchangebuyer-api.json b/adexchangebuyer/v1/adexchangebuyer-api.json
index d699fb5..247a8fd 100644
--- a/adexchangebuyer/v1/adexchangebuyer-api.json
+++ b/adexchangebuyer/v1/adexchangebuyer-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/vKGqC21J29Bm6tbUCD1ghF4NHj8\"",
+ "etag": "\"qMhxoRFWKZK4K3KdZJuqms1o3fc/vKGqC21J29Bm6tbUCD1ghF4NHj8\"",
  "discoveryVersion": "v1",
  "id": "adexchangebuyer:v1",
  "name": "adexchangebuyer",
diff --git a/adexchangeseller/v1.1/adexchangeseller-api.json b/adexchangeseller/v1.1/adexchangeseller-api.json
index 7c78d5c..abb5649 100644
--- a/adexchangeseller/v1.1/adexchangeseller-api.json
+++ b/adexchangeseller/v1.1/adexchangeseller-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/3EQR4lRf6lcuqfLSrQwX_Pd7DO4\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/3EQR4lRf6lcuqfLSrQwX_Pd7DO4\"",
  "discoveryVersion": "v1",
  "id": "adexchangeseller:v1.1",
  "name": "adexchangeseller",
diff --git a/adexchangeseller/v1/adexchangeseller-api.json b/adexchangeseller/v1/adexchangeseller-api.json
index 673549d..6eb2bb4 100644
--- a/adexchangeseller/v1/adexchangeseller-api.json
+++ b/adexchangeseller/v1/adexchangeseller-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/DBzogMXklHlpaUtDkk7y5cL4j58\"",
+ "etag": "\"qMhxoRFWKZK4K3KdZJuqms1o3fc/DBzogMXklHlpaUtDkk7y5cL4j58\"",
  "discoveryVersion": "v1",
  "id": "adexchangeseller:v1",
  "name": "adexchangeseller",
diff --git a/admin/directory_v1/admin-api.json b/admin/directory_v1/admin-api.json
index 28434f7..0d99848 100644
--- a/admin/directory_v1/admin-api.json
+++ b/admin/directory_v1/admin-api.json
@@ -1,13 +1,13 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/L5o_B_5kDsa-PgAadzS19oUK1yk\"",
+ "etag": "\"qMhxoRFWKZK4K3KdZJuqms1o3fc/5P1YmzFHnPBs8JGSWb_ROKPzJTc\"",
  "discoveryVersion": "v1",
  "id": "admin:directory_v1",
  "name": "admin",
  "canonicalName": "directory",
  "version": "directory_v1",
  "title": "Admin Directory API",
- "description": "Apps Directory API lets you view and manage enterprise resources like user, groups, OrgUnit, devices.",
+ "description": "Apps Directory API lets you view and manage enterprise resources like user, groups, OrgUnit, devices, tokens, asps, verification codes.",
  "ownerDomain": "google.com",
  "ownerName": "Google",
  "packagePath": "admin",
@@ -97,6 +97,9 @@
     "https://www.googleapis.com/auth/admin.directory.group.readonly": {
      "description": "View groups on your domain"
     },
+    "https://www.googleapis.com/auth/admin.directory.notifications": {
+     "description": "View and manage notifications received on your domain"
+    },
     "https://www.googleapis.com/auth/admin.directory.orgunit": {
      "description": "View and manage organization units on your domain"
     },
@@ -114,6 +117,9 @@
     },
     "https://www.googleapis.com/auth/admin.directory.user.readonly": {
      "description": "View users on your domain"
+    },
+    "https://www.googleapis.com/auth/admin.directory.user.security": {
+     "description": "Manage data access permissions for users on your domain"
     }
    }
   }
@@ -170,6 +176,67 @@
     }
    }
   },
+  "Asp": {
+   "id": "Asp",
+   "type": "object",
+   "description": "The template that returns individual ASP (Access Code) data.",
+   "properties": {
+    "codeId": {
+     "type": "integer",
+     "description": "Code Id of the Access code.",
+     "format": "int32"
+    },
+    "creationTime": {
+     "type": "string",
+     "description": "Time when the ASP was created.",
+     "format": "int64"
+    },
+    "etag": {
+     "type": "string",
+     "description": "ETag of the resource."
+    },
+    "kind": {
+     "type": "string",
+     "description": "The type of the resource.",
+     "default": "admin#directory#asp"
+    },
+    "lastTimeUsed": {
+     "type": "string",
+     "description": "Time when the ASP was last used.",
+     "format": "int64"
+    },
+    "name": {
+     "type": "string",
+     "description": "Name of the application."
+    },
+    "userKey": {
+     "type": "string",
+     "description": "User who has issued the ASP."
+    }
+   }
+  },
+  "Asps": {
+   "id": "Asps",
+   "type": "object",
+   "properties": {
+    "etag": {
+     "type": "string",
+     "description": "ETag of the resource."
+    },
+    "items": {
+     "type": "array",
+     "description": "Asps resource.",
+     "items": {
+      "$ref": "Asp"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "The type of the resource.",
+     "default": "admin#directory#aspList"
+    }
+   }
+  },
   "ChromeOsDevice": {
    "id": "ChromeOsDevice",
    "type": "object",
@@ -586,6 +653,78 @@
     }
    }
   },
+  "Notification": {
+   "id": "Notification",
+   "type": "object",
+   "description": "Template for a notification resource.",
+   "properties": {
+    "body": {
+     "type": "string",
+     "description": "Body of the notification (Read-only)"
+    },
+    "etag": {
+     "type": "string",
+     "description": "ETag of the resource."
+    },
+    "fromAddress": {
+     "type": "string",
+     "description": "Address from which the notification is received (Read-only)"
+    },
+    "isUnread": {
+     "type": "boolean",
+     "description": "Boolean indicating whether the notification is unread or not."
+    },
+    "kind": {
+     "type": "string",
+     "description": "The type of the resource.",
+     "default": "admin#directory#notification"
+    },
+    "notificationId": {
+     "type": "string"
+    },
+    "sendTime": {
+     "type": "string",
+     "description": "Time at which notification was sent (Read-only)",
+     "format": "date-time"
+    },
+    "subject": {
+     "type": "string",
+     "description": "Subject of the notification (Read-only)"
+    }
+   }
+  },
+  "Notifications": {
+   "id": "Notifications",
+   "type": "object",
+   "description": "Template for notifications list response.",
+   "properties": {
+    "etag": {
+     "type": "string",
+     "description": "ETag of the resource."
+    },
+    "items": {
+     "type": "array",
+     "description": "List of notifications in this page.",
+     "items": {
+      "$ref": "Notification"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "The type of the resource.",
+     "default": "admin#directory#notifications"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "Token for fetching the next page of notifications."
+    },
+    "unreadNotificationsCount": {
+     "type": "integer",
+     "description": "Number of unread notification for the domain.",
+     "format": "int32"
+    }
+   }
+  },
   "OrgUnit": {
    "id": "OrgUnit",
    "type": "object",
@@ -655,6 +794,72 @@
     }
    }
   },
+  "Token": {
+   "id": "Token",
+   "type": "object",
+   "description": "JSON template for token resource in Apps Directory API.",
+   "properties": {
+    "anonymous": {
+     "type": "boolean",
+     "description": "Is the token anonymous?"
+    },
+    "clientId": {
+     "type": "string",
+     "description": "Domain to which the token is issued."
+    },
+    "displayText": {
+     "type": "string",
+     "description": "Displayable name of Domain to which the token is issued."
+    },
+    "etag": {
+     "type": "string",
+     "description": "ETag of the resource."
+    },
+    "kind": {
+     "type": "string",
+     "description": "The type of the resource.",
+     "default": "admin#directory#token"
+    },
+    "nativeApp": {
+     "type": "boolean",
+     "description": "Is the token for native app?"
+    },
+    "scopes": {
+     "type": "array",
+     "description": "List of scopes.",
+     "items": {
+      "type": "string"
+     }
+    },
+    "userKey": {
+     "type": "string",
+     "description": "Obfuscated user_id of the user who has issued the token."
+    }
+   }
+  },
+  "Tokens": {
+   "id": "Tokens",
+   "type": "object",
+   "description": "JSON response template for List tokens operation in Apps Directory API.",
+   "properties": {
+    "etag": {
+     "type": "string",
+     "description": "ETag of the resource."
+    },
+    "items": {
+     "type": "array",
+     "description": "Tokens resource.",
+     "items": {
+      "$ref": "Token"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "The type of the resource.",
+     "default": "admin#directory#tokenList"
+    }
+   }
+  },
   "User": {
    "id": "User",
    "type": "object",
@@ -1190,9 +1395,142 @@
      }
     }
    }
+  },
+  "VerificationCode": {
+   "id": "VerificationCode",
+   "type": "object",
+   "description": "JSON template for verification codes in Apps Directory API.",
+   "properties": {
+    "etag": {
+     "type": "string",
+     "description": "ETag of the resource."
+    },
+    "kind": {
+     "type": "string",
+     "description": "The type of the resource.",
+     "default": "admin#directory#verificationCode"
+    },
+    "userId": {
+     "type": "string",
+     "description": "Obfuscated user_id of the account holder."
+    },
+    "verificationCode": {
+     "type": "string",
+     "description": "A verification code for that user"
+    }
+   }
+  },
+  "VerificationCodes": {
+   "id": "VerificationCodes",
+   "type": "object",
+   "description": "JSON response template for List verification codes operation in Apps Directory API.",
+   "properties": {
+    "etag": {
+     "type": "string",
+     "description": "ETag of the resource."
+    },
+    "items": {
+     "type": "array",
+     "description": "verification codes resource.",
+     "items": {
+      "$ref": "VerificationCode"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "The type of the resource.",
+     "default": "admin#directory#verificationCodesList"
+    }
+   }
   }
  },
  "resources": {
+  "asps": {
+   "methods": {
+    "delete": {
+     "id": "directory.asps.delete",
+     "path": "users/{userKey}/asps/{codeId}",
+     "httpMethod": "DELETE",
+     "description": "Delete the application specific password issued by the user for a codeId.",
+     "parameters": {
+      "codeId": {
+       "type": "integer",
+       "description": "The codeId.",
+       "required": true,
+       "format": "int32",
+       "location": "path"
+      },
+      "userKey": {
+       "type": "string",
+       "description": "Email or immutable Id of the user",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "userKey",
+      "codeId"
+     ],
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.user.security"
+     ]
+    },
+    "get": {
+     "id": "directory.asps.get",
+     "path": "users/{userKey}/asps/{codeId}",
+     "httpMethod": "GET",
+     "description": "Get the application specific password issued by the user for a codeId.",
+     "parameters": {
+      "codeId": {
+       "type": "integer",
+       "description": "The codeid.",
+       "required": true,
+       "format": "int32",
+       "location": "path"
+      },
+      "userKey": {
+       "type": "string",
+       "description": "Email or immutable Id of the user",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "userKey",
+      "codeId"
+     ],
+     "response": {
+      "$ref": "Asp"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.user.security"
+     ]
+    },
+    "list": {
+     "id": "directory.asps.list",
+     "path": "users/{userKey}/asps",
+     "httpMethod": "GET",
+     "description": "List the application specific passwords issued by the user.",
+     "parameters": {
+      "userKey": {
+       "type": "string",
+       "description": "Email or immutable Id of the user",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "userKey"
+     ],
+     "response": {
+      "$ref": "Asps"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.user.security"
+     ]
+    }
+   }
+  },
   "chromeosdevices": {
    "methods": {
     "get": {
@@ -2066,6 +2404,172 @@
     }
    }
   },
+  "notifications": {
+   "methods": {
+    "delete": {
+     "id": "directory.notifications.delete",
+     "path": "customer/{customer}/notifications/{notificationId}",
+     "httpMethod": "DELETE",
+     "description": "Deletes a notification",
+     "parameters": {
+      "customer": {
+       "type": "string",
+       "description": "Obfuscated customer ID of the domain for which notification is to be deleted",
+       "required": true,
+       "location": "path"
+      },
+      "notificationId": {
+       "type": "string",
+       "description": "Id of the notification to be deleted.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "customer",
+      "notificationId"
+     ],
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.notifications"
+     ]
+    },
+    "get": {
+     "id": "directory.notifications.get",
+     "path": "customer/{customer}/notifications/{notificationId}",
+     "httpMethod": "GET",
+     "description": "Retrieves a notification",
+     "parameters": {
+      "customer": {
+       "type": "string",
+       "description": "Obfuscated customer ID of the domain for which notification is to be retrieved",
+       "required": true,
+       "location": "path"
+      },
+      "notificationId": {
+       "type": "string",
+       "description": "Id of the notification to be retrieved.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "customer",
+      "notificationId"
+     ],
+     "response": {
+      "$ref": "Notification"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.notifications"
+     ]
+    },
+    "list": {
+     "id": "directory.notifications.list",
+     "path": "customer/{customer}/notifications",
+     "httpMethod": "GET",
+     "description": "Retrieves a list of notifications.",
+     "parameters": {
+      "customer": {
+       "type": "string",
+       "description": "Obfuscated customer ID of the domain for which notifications are to be retrieved",
+       "required": true,
+       "location": "path"
+      },
+      "language": {
+       "type": "string",
+       "description": "Code of the language in which the notifications are to be retrieved. Notifications will be returned in English by default",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "Number of notifications to be retrieved. Default is 100",
+       "format": "uint32",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "Token for the page to be retrieved",
+       "location": "query"
+      }
+     },
+     "parameterOrder": [
+      "customer"
+     ],
+     "response": {
+      "$ref": "Notifications"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.notifications"
+     ]
+    },
+    "patch": {
+     "id": "directory.notifications.patch",
+     "path": "customer/{customer}/notifications/{notificationId}",
+     "httpMethod": "PATCH",
+     "description": "Updates a notification. This method supports patch semantics.",
+     "parameters": {
+      "customer": {
+       "type": "string",
+       "description": "Obfuscated customer ID of the domain for which notification is to be updated",
+       "required": true,
+       "location": "path"
+      },
+      "notificationId": {
+       "type": "string",
+       "description": "Id of the notification to be updated.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "customer",
+      "notificationId"
+     ],
+     "request": {
+      "$ref": "Notification"
+     },
+     "response": {
+      "$ref": "Notification"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.notifications"
+     ]
+    },
+    "update": {
+     "id": "directory.notifications.update",
+     "path": "customer/{customer}/notifications/{notificationId}",
+     "httpMethod": "PUT",
+     "description": "Updates a notification",
+     "parameters": {
+      "customer": {
+       "type": "string",
+       "description": "Obfuscated customer ID of the domain for which notification is to be updated",
+       "required": true,
+       "location": "path"
+      },
+      "notificationId": {
+       "type": "string",
+       "description": "Id of the notification to be updated.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "customer",
+      "notificationId"
+     ],
+     "request": {
+      "$ref": "Notification"
+     },
+     "response": {
+      "$ref": "Notification"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.notifications"
+     ]
+    }
+   }
+  },
   "orgunits": {
    "methods": {
     "delete": {
@@ -2267,6 +2771,90 @@
     }
    }
   },
+  "tokens": {
+   "methods": {
+    "delete": {
+     "id": "directory.tokens.delete",
+     "path": "users/{userKey}/tokens/{clientId}",
+     "httpMethod": "DELETE",
+     "description": "Delete all OAuth tokens issued by the user for an app domain.",
+     "parameters": {
+      "clientId": {
+       "type": "string",
+       "description": "The app domain.",
+       "required": true,
+       "location": "path"
+      },
+      "userKey": {
+       "type": "string",
+       "description": "Email or immutable Id of the user",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "userKey",
+      "clientId"
+     ],
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.user.security"
+     ]
+    },
+    "get": {
+     "id": "directory.tokens.get",
+     "path": "users/{userKey}/tokens/{clientId}",
+     "httpMethod": "GET",
+     "description": "Get the OAuth token issued by the user for an app domain.",
+     "parameters": {
+      "clientId": {
+       "type": "string",
+       "description": "The app domain.",
+       "required": true,
+       "location": "path"
+      },
+      "userKey": {
+       "type": "string",
+       "description": "Email or immutable Id of the user",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "userKey",
+      "clientId"
+     ],
+     "response": {
+      "$ref": "Token"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.user.security"
+     ]
+    },
+    "list": {
+     "id": "directory.tokens.list",
+     "path": "users/{userKey}/tokens",
+     "httpMethod": "GET",
+     "description": "List the OAuth tokens issued by the user.",
+     "parameters": {
+      "userKey": {
+       "type": "string",
+       "description": "Email or immutable Id of the user",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "userKey"
+     ],
+     "response": {
+      "$ref": "Tokens"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.user.security"
+     ]
+    }
+   }
+  },
   "users": {
    "methods": {
     "delete": {
@@ -2690,6 +3278,73 @@
      }
     }
    }
+  },
+  "verificationCodes": {
+   "methods": {
+    "generate": {
+     "id": "directory.verificationCodes.generate",
+     "path": "users/{userKey}/verificationCodes/generate",
+     "httpMethod": "POST",
+     "description": "Generate new backup verification codes for the user.",
+     "parameters": {
+      "userKey": {
+       "type": "string",
+       "description": "Email or immutable Id of the user",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "userKey"
+     ],
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.user.security"
+     ]
+    },
+    "invalidate": {
+     "id": "directory.verificationCodes.invalidate",
+     "path": "users/{userKey}/verificationCodes/invalidate",
+     "httpMethod": "POST",
+     "description": "Invalidate the backup verification codes for the user.",
+     "parameters": {
+      "userKey": {
+       "type": "string",
+       "description": "Email or immutable Id of the user",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "userKey"
+     ],
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.user.security"
+     ]
+    },
+    "list": {
+     "id": "directory.verificationCodes.list",
+     "path": "users/{userKey}/verificationCodes",
+     "httpMethod": "GET",
+     "description": "List the backup verification codes for the user.",
+     "parameters": {
+      "userKey": {
+       "type": "string",
+       "description": "Email or immutable Id of the user",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "userKey"
+     ],
+     "response": {
+      "$ref": "VerificationCodes"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/admin.directory.user.security"
+     ]
+    }
+   }
   }
  }
 }
diff --git a/admin/directory_v1/admin-gen.go b/admin/directory_v1/admin-gen.go
index e114c3c..7fb4737 100644
--- a/admin/directory_v1/admin-gen.go
+++ b/admin/directory_v1/admin-gen.go
@@ -68,6 +68,9 @@
 	// View groups on your domain
 	AdminDirectoryGroupReadonlyScope = "https://www.googleapis.com/auth/admin.directory.group.readonly"
 
+	// View and manage notifications received on your domain
+	AdminDirectoryNotificationsScope = "https://www.googleapis.com/auth/admin.directory.notifications"
+
 	// View and manage organization units on your domain
 	AdminDirectoryOrgunitScope = "https://www.googleapis.com/auth/admin.directory.orgunit"
 
@@ -85,6 +88,9 @@
 
 	// View users on your domain
 	AdminDirectoryUserReadonlyScope = "https://www.googleapis.com/auth/admin.directory.user.readonly"
+
+	// Manage data access permissions for users on your domain
+	AdminDirectoryUserSecurityScope = "https://www.googleapis.com/auth/admin.directory.user.security"
 )
 
 func New(client *http.Client) (*Service, error) {
@@ -92,18 +98,24 @@
 		return nil, errors.New("client is nil")
 	}
 	s := &Service{client: client}
+	s.Asps = NewAspsService(s)
 	s.Chromeosdevices = NewChromeosdevicesService(s)
 	s.Groups = NewGroupsService(s)
 	s.Members = NewMembersService(s)
 	s.Mobiledevices = NewMobiledevicesService(s)
+	s.Notifications = NewNotificationsService(s)
 	s.Orgunits = NewOrgunitsService(s)
+	s.Tokens = NewTokensService(s)
 	s.Users = NewUsersService(s)
+	s.VerificationCodes = NewVerificationCodesService(s)
 	return s, nil
 }
 
 type Service struct {
 	client *http.Client
 
+	Asps *AspsService
+
 	Chromeosdevices *ChromeosdevicesService
 
 	Groups *GroupsService
@@ -112,9 +124,24 @@
 
 	Mobiledevices *MobiledevicesService
 
+	Notifications *NotificationsService
+
 	Orgunits *OrgunitsService
 
+	Tokens *TokensService
+
 	Users *UsersService
+
+	VerificationCodes *VerificationCodesService
+}
+
+func NewAspsService(s *Service) *AspsService {
+	rs := &AspsService{s: s}
+	return rs
+}
+
+type AspsService struct {
+	s *Service
 }
 
 func NewChromeosdevicesService(s *Service) *ChromeosdevicesService {
@@ -165,6 +192,15 @@
 	s *Service
 }
 
+func NewNotificationsService(s *Service) *NotificationsService {
+	rs := &NotificationsService{s: s}
+	return rs
+}
+
+type NotificationsService struct {
+	s *Service
+}
+
 func NewOrgunitsService(s *Service) *OrgunitsService {
 	rs := &OrgunitsService{s: s}
 	return rs
@@ -174,6 +210,15 @@
 	s *Service
 }
 
+func NewTokensService(s *Service) *TokensService {
+	rs := &TokensService{s: s}
+	return rs
+}
+
+type TokensService struct {
+	s *Service
+}
+
 func NewUsersService(s *Service) *UsersService {
 	rs := &UsersService{s: s}
 	rs.Aliases = NewUsersAliasesService(s)
@@ -207,6 +252,15 @@
 	s *Service
 }
 
+func NewVerificationCodesService(s *Service) *VerificationCodesService {
+	rs := &VerificationCodesService{s: s}
+	return rs
+}
+
+type VerificationCodesService struct {
+	s *Service
+}
+
 type Alias struct {
 	// Alias: A alias email
 	Alias string `json:"alias,omitempty"`
@@ -237,6 +291,40 @@
 	Kind string `json:"kind,omitempty"`
 }
 
+type Asp struct {
+	// CodeId: Code Id of the Access code.
+	CodeId int64 `json:"codeId,omitempty"`
+
+	// CreationTime: Time when the ASP was created.
+	CreationTime int64 `json:"creationTime,omitempty,string"`
+
+	// Etag: ETag of the resource.
+	Etag string `json:"etag,omitempty"`
+
+	// Kind: The type of the resource.
+	Kind string `json:"kind,omitempty"`
+
+	// LastTimeUsed: Time when the ASP was last used.
+	LastTimeUsed int64 `json:"lastTimeUsed,omitempty,string"`
+
+	// Name: Name of the application.
+	Name string `json:"name,omitempty"`
+
+	// UserKey: User who has issued the ASP.
+	UserKey string `json:"userKey,omitempty"`
+}
+
+type Asps struct {
+	// Etag: ETag of the resource.
+	Etag string `json:"etag,omitempty"`
+
+	// Items: Asps resource.
+	Items []*Asp `json:"items,omitempty"`
+
+	// Kind: The type of the resource.
+	Kind string `json:"kind,omitempty"`
+}
+
 type ChromeOsDevice struct {
 	// AnnotatedLocation: Address or location of the device as noted by the
 	// administrator
@@ -491,6 +579,51 @@
 	NextPageToken string `json:"nextPageToken,omitempty"`
 }
 
+type Notification struct {
+	// Body: Body of the notification (Read-only)
+	Body string `json:"body,omitempty"`
+
+	// Etag: ETag of the resource.
+	Etag string `json:"etag,omitempty"`
+
+	// FromAddress: Address from which the notification is received
+	// (Read-only)
+	FromAddress string `json:"fromAddress,omitempty"`
+
+	// IsUnread: Boolean indicating whether the notification is unread or
+	// not.
+	IsUnread bool `json:"isUnread,omitempty"`
+
+	// Kind: The type of the resource.
+	Kind string `json:"kind,omitempty"`
+
+	NotificationId string `json:"notificationId,omitempty"`
+
+	// SendTime: Time at which notification was sent (Read-only)
+	SendTime string `json:"sendTime,omitempty"`
+
+	// Subject: Subject of the notification (Read-only)
+	Subject string `json:"subject,omitempty"`
+}
+
+type Notifications struct {
+	// Etag: ETag of the resource.
+	Etag string `json:"etag,omitempty"`
+
+	// Items: List of notifications in this page.
+	Items []*Notification `json:"items,omitempty"`
+
+	// Kind: The type of the resource.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: Token for fetching the next page of notifications.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// UnreadNotificationsCount: Number of unread notification for the
+	// domain.
+	UnreadNotificationsCount int64 `json:"unreadNotificationsCount,omitempty"`
+}
+
 type OrgUnit struct {
 	// BlockInheritance: Should block inheritance
 	BlockInheritance bool `json:"blockInheritance,omitempty"`
@@ -525,6 +658,43 @@
 	OrganizationUnits []*OrgUnit `json:"organizationUnits,omitempty"`
 }
 
+type Token struct {
+	// Anonymous: Is the token anonymous?
+	Anonymous bool `json:"anonymous,omitempty"`
+
+	// ClientId: Domain to which the token is issued.
+	ClientId string `json:"clientId,omitempty"`
+
+	// DisplayText: Displayable name of Domain to which the token is issued.
+	DisplayText string `json:"displayText,omitempty"`
+
+	// Etag: ETag of the resource.
+	Etag string `json:"etag,omitempty"`
+
+	// Kind: The type of the resource.
+	Kind string `json:"kind,omitempty"`
+
+	// NativeApp: Is the token for native app?
+	NativeApp bool `json:"nativeApp,omitempty"`
+
+	// Scopes: List of scopes.
+	Scopes []string `json:"scopes,omitempty"`
+
+	// UserKey: Obfuscated user_id of the user who has issued the token.
+	UserKey string `json:"userKey,omitempty"`
+}
+
+type Tokens struct {
+	// Etag: ETag of the resource.
+	Etag string `json:"etag,omitempty"`
+
+	// Items: Tokens resource.
+	Items []*Token `json:"items,omitempty"`
+
+	// Kind: The type of the resource.
+	Kind string `json:"kind,omitempty"`
+}
+
 type User struct {
 	// Addresses: Addresses of User
 	Addresses []*UserAddress `json:"addresses,omitempty"`
@@ -863,6 +1033,240 @@
 	Users []*User `json:"users,omitempty"`
 }
 
+type VerificationCode struct {
+	// Etag: ETag of the resource.
+	Etag string `json:"etag,omitempty"`
+
+	// Kind: The type of the resource.
+	Kind string `json:"kind,omitempty"`
+
+	// UserId: Obfuscated user_id of the account holder.
+	UserId string `json:"userId,omitempty"`
+
+	// VerificationCode: A verification code for that user
+	VerificationCode string `json:"verificationCode,omitempty"`
+}
+
+type VerificationCodes struct {
+	// Etag: ETag of the resource.
+	Etag string `json:"etag,omitempty"`
+
+	// Items: verification codes resource.
+	Items []*VerificationCode `json:"items,omitempty"`
+
+	// Kind: The type of the resource.
+	Kind string `json:"kind,omitempty"`
+}
+
+// method id "directory.asps.delete":
+
+type AspsDeleteCall struct {
+	s       *Service
+	userKey string
+	codeId  int64
+	opt_    map[string]interface{}
+}
+
+// Delete: Delete the application specific password issued by the user
+// for a codeId.
+func (r *AspsService) Delete(userKey string, codeId int64) *AspsDeleteCall {
+	c := &AspsDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.userKey = userKey
+	c.codeId = codeId
+	return c
+}
+
+func (c *AspsDeleteCall) Do() error {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/admin/directory/v1/", "users/{userKey}/asps/{codeId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{codeId}", strconv.FormatInt(c.codeId, 10), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return err
+	}
+	return nil
+	// {
+	//   "description": "Delete the application specific password issued by the user for a codeId.",
+	//   "httpMethod": "DELETE",
+	//   "id": "directory.asps.delete",
+	//   "parameterOrder": [
+	//     "userKey",
+	//     "codeId"
+	//   ],
+	//   "parameters": {
+	//     "codeId": {
+	//       "description": "The codeId.",
+	//       "format": "int32",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "integer"
+	//     },
+	//     "userKey": {
+	//       "description": "Email or immutable Id of the user",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "users/{userKey}/asps/{codeId}",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.user.security"
+	//   ]
+	// }
+
+}
+
+// method id "directory.asps.get":
+
+type AspsGetCall struct {
+	s       *Service
+	userKey string
+	codeId  int64
+	opt_    map[string]interface{}
+}
+
+// Get: Get the application specific password issued by the user for a
+// codeId.
+func (r *AspsService) Get(userKey string, codeId int64) *AspsGetCall {
+	c := &AspsGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.userKey = userKey
+	c.codeId = codeId
+	return c
+}
+
+func (c *AspsGetCall) Do() (*Asp, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/admin/directory/v1/", "users/{userKey}/asps/{codeId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{codeId}", strconv.FormatInt(c.codeId, 10), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Asp)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Get the application specific password issued by the user for a codeId.",
+	//   "httpMethod": "GET",
+	//   "id": "directory.asps.get",
+	//   "parameterOrder": [
+	//     "userKey",
+	//     "codeId"
+	//   ],
+	//   "parameters": {
+	//     "codeId": {
+	//       "description": "The codeid.",
+	//       "format": "int32",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "integer"
+	//     },
+	//     "userKey": {
+	//       "description": "Email or immutable Id of the user",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "users/{userKey}/asps/{codeId}",
+	//   "response": {
+	//     "$ref": "Asp"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.user.security"
+	//   ]
+	// }
+
+}
+
+// method id "directory.asps.list":
+
+type AspsListCall struct {
+	s       *Service
+	userKey string
+	opt_    map[string]interface{}
+}
+
+// List: List the application specific passwords issued by the user.
+func (r *AspsService) List(userKey string) *AspsListCall {
+	c := &AspsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.userKey = userKey
+	return c
+}
+
+func (c *AspsListCall) Do() (*Asps, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/admin/directory/v1/", "users/{userKey}/asps")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Asps)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "List the application specific passwords issued by the user.",
+	//   "httpMethod": "GET",
+	//   "id": "directory.asps.list",
+	//   "parameterOrder": [
+	//     "userKey"
+	//   ],
+	//   "parameters": {
+	//     "userKey": {
+	//       "description": "Email or immutable Id of the user",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "users/{userKey}/asps",
+	//   "response": {
+	//     "$ref": "Asps"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.user.security"
+	//   ]
+	// }
+
+}
+
 // method id "directory.chromeosdevices.get":
 
 type ChromeosdevicesGetCall struct {
@@ -2993,6 +3397,428 @@
 
 }
 
+// method id "directory.notifications.delete":
+
+type NotificationsDeleteCall struct {
+	s              *Service
+	customer       string
+	notificationId string
+	opt_           map[string]interface{}
+}
+
+// Delete: Deletes a notification
+func (r *NotificationsService) Delete(customer string, notificationId string) *NotificationsDeleteCall {
+	c := &NotificationsDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.customer = customer
+	c.notificationId = notificationId
+	return c
+}
+
+func (c *NotificationsDeleteCall) Do() error {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/admin/directory/v1/", "customer/{customer}/notifications/{notificationId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{customer}", url.QueryEscape(c.customer), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{notificationId}", url.QueryEscape(c.notificationId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return err
+	}
+	return nil
+	// {
+	//   "description": "Deletes a notification",
+	//   "httpMethod": "DELETE",
+	//   "id": "directory.notifications.delete",
+	//   "parameterOrder": [
+	//     "customer",
+	//     "notificationId"
+	//   ],
+	//   "parameters": {
+	//     "customer": {
+	//       "description": "Obfuscated customer ID of the domain for which notification is to be deleted",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "notificationId": {
+	//       "description": "Id of the notification to be deleted.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "customer/{customer}/notifications/{notificationId}",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.notifications"
+	//   ]
+	// }
+
+}
+
+// method id "directory.notifications.get":
+
+type NotificationsGetCall struct {
+	s              *Service
+	customer       string
+	notificationId string
+	opt_           map[string]interface{}
+}
+
+// Get: Retrieves a notification
+func (r *NotificationsService) Get(customer string, notificationId string) *NotificationsGetCall {
+	c := &NotificationsGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.customer = customer
+	c.notificationId = notificationId
+	return c
+}
+
+func (c *NotificationsGetCall) Do() (*Notification, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/admin/directory/v1/", "customer/{customer}/notifications/{notificationId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{customer}", url.QueryEscape(c.customer), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{notificationId}", url.QueryEscape(c.notificationId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Notification)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves a notification",
+	//   "httpMethod": "GET",
+	//   "id": "directory.notifications.get",
+	//   "parameterOrder": [
+	//     "customer",
+	//     "notificationId"
+	//   ],
+	//   "parameters": {
+	//     "customer": {
+	//       "description": "Obfuscated customer ID of the domain for which notification is to be retrieved",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "notificationId": {
+	//       "description": "Id of the notification to be retrieved.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "customer/{customer}/notifications/{notificationId}",
+	//   "response": {
+	//     "$ref": "Notification"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.notifications"
+	//   ]
+	// }
+
+}
+
+// method id "directory.notifications.list":
+
+type NotificationsListCall struct {
+	s        *Service
+	customer string
+	opt_     map[string]interface{}
+}
+
+// List: Retrieves a list of notifications.
+func (r *NotificationsService) List(customer string) *NotificationsListCall {
+	c := &NotificationsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.customer = customer
+	return c
+}
+
+// Language sets the optional parameter "language": Code of the language
+// in which the notifications are to be retrieved. Notifications will be
+// returned in English by default
+func (c *NotificationsListCall) Language(language string) *NotificationsListCall {
+	c.opt_["language"] = language
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": Number of
+// notifications to be retrieved. Default is 100
+func (c *NotificationsListCall) MaxResults(maxResults int64) *NotificationsListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Token for the page
+// to be retrieved
+func (c *NotificationsListCall) PageToken(pageToken string) *NotificationsListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *NotificationsListCall) Do() (*Notifications, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	if v, ok := c.opt_["language"]; ok {
+		params.Set("language", 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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/admin/directory/v1/", "customer/{customer}/notifications")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{customer}", url.QueryEscape(c.customer), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Notifications)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves a list of notifications.",
+	//   "httpMethod": "GET",
+	//   "id": "directory.notifications.list",
+	//   "parameterOrder": [
+	//     "customer"
+	//   ],
+	//   "parameters": {
+	//     "customer": {
+	//       "description": "Obfuscated customer ID of the domain for which notifications are to be retrieved",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "language": {
+	//       "description": "Code of the language in which the notifications are to be retrieved. Notifications will be returned in English by default",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "description": "Number of notifications to be retrieved. Default is 100",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Token for the page to be retrieved",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "customer/{customer}/notifications",
+	//   "response": {
+	//     "$ref": "Notifications"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.notifications"
+	//   ]
+	// }
+
+}
+
+// method id "directory.notifications.patch":
+
+type NotificationsPatchCall struct {
+	s              *Service
+	customer       string
+	notificationId string
+	notification   *Notification
+	opt_           map[string]interface{}
+}
+
+// Patch: Updates a notification. This method supports patch semantics.
+func (r *NotificationsService) Patch(customer string, notificationId string, notification *Notification) *NotificationsPatchCall {
+	c := &NotificationsPatchCall{s: r.s, opt_: make(map[string]interface{})}
+	c.customer = customer
+	c.notificationId = notificationId
+	c.notification = notification
+	return c
+}
+
+func (c *NotificationsPatchCall) Do() (*Notification, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.notification)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/admin/directory/v1/", "customer/{customer}/notifications/{notificationId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("PATCH", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{customer}", url.QueryEscape(c.customer), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{notificationId}", url.QueryEscape(c.notificationId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Notification)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates a notification. This method supports patch semantics.",
+	//   "httpMethod": "PATCH",
+	//   "id": "directory.notifications.patch",
+	//   "parameterOrder": [
+	//     "customer",
+	//     "notificationId"
+	//   ],
+	//   "parameters": {
+	//     "customer": {
+	//       "description": "Obfuscated customer ID of the domain for which notification is to be updated",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "notificationId": {
+	//       "description": "Id of the notification to be updated.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "customer/{customer}/notifications/{notificationId}",
+	//   "request": {
+	//     "$ref": "Notification"
+	//   },
+	//   "response": {
+	//     "$ref": "Notification"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.notifications"
+	//   ]
+	// }
+
+}
+
+// method id "directory.notifications.update":
+
+type NotificationsUpdateCall struct {
+	s              *Service
+	customer       string
+	notificationId string
+	notification   *Notification
+	opt_           map[string]interface{}
+}
+
+// Update: Updates a notification
+func (r *NotificationsService) Update(customer string, notificationId string, notification *Notification) *NotificationsUpdateCall {
+	c := &NotificationsUpdateCall{s: r.s, opt_: make(map[string]interface{})}
+	c.customer = customer
+	c.notificationId = notificationId
+	c.notification = notification
+	return c
+}
+
+func (c *NotificationsUpdateCall) Do() (*Notification, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.notification)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/admin/directory/v1/", "customer/{customer}/notifications/{notificationId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("PUT", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{customer}", url.QueryEscape(c.customer), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{notificationId}", url.QueryEscape(c.notificationId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Notification)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates a notification",
+	//   "httpMethod": "PUT",
+	//   "id": "directory.notifications.update",
+	//   "parameterOrder": [
+	//     "customer",
+	//     "notificationId"
+	//   ],
+	//   "parameters": {
+	//     "customer": {
+	//       "description": "Obfuscated customer ID of the domain for which notification is to be updated",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "notificationId": {
+	//       "description": "Id of the notification to be updated.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "customer/{customer}/notifications/{notificationId}",
+	//   "request": {
+	//     "$ref": "Notification"
+	//   },
+	//   "response": {
+	//     "$ref": "Notification"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.notifications"
+	//   ]
+	// }
+
+}
+
 // method id "directory.orgunits.delete":
 
 type OrgunitsDeleteCall struct {
@@ -3489,6 +4315,211 @@
 
 }
 
+// method id "directory.tokens.delete":
+
+type TokensDeleteCall struct {
+	s        *Service
+	userKey  string
+	clientId string
+	opt_     map[string]interface{}
+}
+
+// Delete: Delete all OAuth tokens issued by the user for an app domain.
+func (r *TokensService) Delete(userKey string, clientId string) *TokensDeleteCall {
+	c := &TokensDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.userKey = userKey
+	c.clientId = clientId
+	return c
+}
+
+func (c *TokensDeleteCall) Do() error {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/admin/directory/v1/", "users/{userKey}/tokens/{clientId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{clientId}", url.QueryEscape(c.clientId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return err
+	}
+	return nil
+	// {
+	//   "description": "Delete all OAuth tokens issued by the user for an app domain.",
+	//   "httpMethod": "DELETE",
+	//   "id": "directory.tokens.delete",
+	//   "parameterOrder": [
+	//     "userKey",
+	//     "clientId"
+	//   ],
+	//   "parameters": {
+	//     "clientId": {
+	//       "description": "The app domain.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "userKey": {
+	//       "description": "Email or immutable Id of the user",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "users/{userKey}/tokens/{clientId}",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.user.security"
+	//   ]
+	// }
+
+}
+
+// method id "directory.tokens.get":
+
+type TokensGetCall struct {
+	s        *Service
+	userKey  string
+	clientId string
+	opt_     map[string]interface{}
+}
+
+// Get: Get the OAuth token issued by the user for an app domain.
+func (r *TokensService) Get(userKey string, clientId string) *TokensGetCall {
+	c := &TokensGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.userKey = userKey
+	c.clientId = clientId
+	return c
+}
+
+func (c *TokensGetCall) Do() (*Token, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/admin/directory/v1/", "users/{userKey}/tokens/{clientId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{clientId}", url.QueryEscape(c.clientId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Token)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Get the OAuth token issued by the user for an app domain.",
+	//   "httpMethod": "GET",
+	//   "id": "directory.tokens.get",
+	//   "parameterOrder": [
+	//     "userKey",
+	//     "clientId"
+	//   ],
+	//   "parameters": {
+	//     "clientId": {
+	//       "description": "The app domain.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "userKey": {
+	//       "description": "Email or immutable Id of the user",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "users/{userKey}/tokens/{clientId}",
+	//   "response": {
+	//     "$ref": "Token"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.user.security"
+	//   ]
+	// }
+
+}
+
+// method id "directory.tokens.list":
+
+type TokensListCall struct {
+	s       *Service
+	userKey string
+	opt_    map[string]interface{}
+}
+
+// List: List the OAuth tokens issued by the user.
+func (r *TokensService) List(userKey string) *TokensListCall {
+	c := &TokensListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.userKey = userKey
+	return c
+}
+
+func (c *TokensListCall) Do() (*Tokens, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/admin/directory/v1/", "users/{userKey}/tokens")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Tokens)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "List the OAuth tokens issued by the user.",
+	//   "httpMethod": "GET",
+	//   "id": "directory.tokens.list",
+	//   "parameterOrder": [
+	//     "userKey"
+	//   ],
+	//   "parameters": {
+	//     "userKey": {
+	//       "description": "Email or immutable Id of the user",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "users/{userKey}/tokens",
+	//   "response": {
+	//     "$ref": "Tokens"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.user.security"
+	//   ]
+	// }
+
+}
+
 // method id "directory.users.delete":
 
 type UsersDeleteCall struct {
@@ -4640,3 +5671,181 @@
 	// }
 
 }
+
+// method id "directory.verificationCodes.generate":
+
+type VerificationCodesGenerateCall struct {
+	s       *Service
+	userKey string
+	opt_    map[string]interface{}
+}
+
+// Generate: Generate new backup verification codes for the user.
+func (r *VerificationCodesService) Generate(userKey string) *VerificationCodesGenerateCall {
+	c := &VerificationCodesGenerateCall{s: r.s, opt_: make(map[string]interface{})}
+	c.userKey = userKey
+	return c
+}
+
+func (c *VerificationCodesGenerateCall) Do() error {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/admin/directory/v1/", "users/{userKey}/verificationCodes/generate")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return err
+	}
+	return nil
+	// {
+	//   "description": "Generate new backup verification codes for the user.",
+	//   "httpMethod": "POST",
+	//   "id": "directory.verificationCodes.generate",
+	//   "parameterOrder": [
+	//     "userKey"
+	//   ],
+	//   "parameters": {
+	//     "userKey": {
+	//       "description": "Email or immutable Id of the user",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "users/{userKey}/verificationCodes/generate",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.user.security"
+	//   ]
+	// }
+
+}
+
+// method id "directory.verificationCodes.invalidate":
+
+type VerificationCodesInvalidateCall struct {
+	s       *Service
+	userKey string
+	opt_    map[string]interface{}
+}
+
+// Invalidate: Invalidate the backup verification codes for the user.
+func (r *VerificationCodesService) Invalidate(userKey string) *VerificationCodesInvalidateCall {
+	c := &VerificationCodesInvalidateCall{s: r.s, opt_: make(map[string]interface{})}
+	c.userKey = userKey
+	return c
+}
+
+func (c *VerificationCodesInvalidateCall) Do() error {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/admin/directory/v1/", "users/{userKey}/verificationCodes/invalidate")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return err
+	}
+	return nil
+	// {
+	//   "description": "Invalidate the backup verification codes for the user.",
+	//   "httpMethod": "POST",
+	//   "id": "directory.verificationCodes.invalidate",
+	//   "parameterOrder": [
+	//     "userKey"
+	//   ],
+	//   "parameters": {
+	//     "userKey": {
+	//       "description": "Email or immutable Id of the user",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "users/{userKey}/verificationCodes/invalidate",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.user.security"
+	//   ]
+	// }
+
+}
+
+// method id "directory.verificationCodes.list":
+
+type VerificationCodesListCall struct {
+	s       *Service
+	userKey string
+	opt_    map[string]interface{}
+}
+
+// List: List the backup verification codes for the user.
+func (r *VerificationCodesService) List(userKey string) *VerificationCodesListCall {
+	c := &VerificationCodesListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.userKey = userKey
+	return c
+}
+
+func (c *VerificationCodesListCall) Do() (*VerificationCodes, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/admin/directory/v1/", "users/{userKey}/verificationCodes")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(VerificationCodes)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "List the backup verification codes for the user.",
+	//   "httpMethod": "GET",
+	//   "id": "directory.verificationCodes.list",
+	//   "parameterOrder": [
+	//     "userKey"
+	//   ],
+	//   "parameters": {
+	//     "userKey": {
+	//       "description": "Email or immutable Id of the user",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "users/{userKey}/verificationCodes",
+	//   "response": {
+	//     "$ref": "VerificationCodes"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/admin.directory.user.security"
+	//   ]
+	// }
+
+}
diff --git a/admin/email_migration_v2/admin-api.json b/admin/email_migration_v2/admin-api.json
index b21f188..84ed546 100644
--- a/admin/email_migration_v2/admin-api.json
+++ b/admin/email_migration_v2/admin-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/5IR4qYAEytuHObETjxcLeQt8rDQ\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/5IR4qYAEytuHObETjxcLeQt8rDQ\"",
  "discoveryVersion": "v1",
  "id": "admin:email_migration_v2",
  "name": "admin",
diff --git a/admin/reports_v1/admin-api.json b/admin/reports_v1/admin-api.json
index 107188e..914f5d1 100644
--- a/admin/reports_v1/admin-api.json
+++ b/admin/reports_v1/admin-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/6FzIjb3cw0Qsdcp3XA94i-UbOwo\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/mEYgw6O3EBvI53Fi0qdjFR-O7ck\"",
  "discoveryVersion": "v1",
  "id": "admin:reports_v1",
  "name": "admin",
@@ -398,6 +398,12 @@
        "pattern": "(admin)|(docs)|(login)",
        "location": "path"
       },
+      "customerId": {
+       "type": "string",
+       "description": "Represents the customer for which the data is to be fetched.",
+       "pattern": "C.+",
+       "location": "query"
+      },
       "endTime": {
        "type": "string",
        "description": "Return events which occured at or before this time.",
@@ -462,6 +468,12 @@
      "httpMethod": "GET",
      "description": "Retrieves a report which is a collection of properties / statistics for a specific customer.",
      "parameters": {
+      "customerId": {
+       "type": "string",
+       "description": "Represents the customer for which the data is to be fetched.",
+       "pattern": "C.+",
+       "location": "query"
+      },
       "date": {
        "type": "string",
        "description": "Represents the date in yyyy-mm-dd format for which the data is to be fetched.",
@@ -501,6 +513,12 @@
      "httpMethod": "GET",
      "description": "Retrieves a report which is a collection of properties / statistics for a set of users.",
      "parameters": {
+      "customerId": {
+       "type": "string",
+       "description": "Represents the customer for which the data is to be fetched.",
+       "pattern": "C.+",
+       "location": "query"
+      },
       "date": {
        "type": "string",
        "description": "Represents the date in yyyy-mm-dd format for which the data is to be fetched.",
diff --git a/admin/reports_v1/admin-gen.go b/admin/reports_v1/admin-gen.go
index 93d1a6e..0428ba5 100644
--- a/admin/reports_v1/admin-gen.go
+++ b/admin/reports_v1/admin-gen.go
@@ -305,6 +305,13 @@
 	return c
 }
 
+// CustomerId sets the optional parameter "customerId": Represents the
+// customer for which the data is to be fetched.
+func (c *ActivitiesListCall) CustomerId(customerId string) *ActivitiesListCall {
+	c.opt_["customerId"] = customerId
+	return c
+}
+
 // EndTime sets the optional parameter "endTime": Return events which
 // occured at or before this time.
 func (c *ActivitiesListCall) EndTime(endTime string) *ActivitiesListCall {
@@ -355,6 +362,9 @@
 	if v, ok := c.opt_["actorIpAddress"]; ok {
 		params.Set("actorIpAddress", fmt.Sprintf("%v", v))
 	}
+	if v, ok := c.opt_["customerId"]; ok {
+		params.Set("customerId", fmt.Sprintf("%v", v))
+	}
 	if v, ok := c.opt_["endTime"]; ok {
 		params.Set("endTime", fmt.Sprintf("%v", v))
 	}
@@ -414,6 +424,12 @@
 	//       "required": true,
 	//       "type": "string"
 	//     },
+	//     "customerId": {
+	//       "description": "Represents the customer for which the data is to be fetched.",
+	//       "location": "query",
+	//       "pattern": "C.+",
+	//       "type": "string"
+	//     },
 	//     "endTime": {
 	//       "description": "Return events which occured at or before this time.",
 	//       "location": "query",
@@ -484,6 +500,13 @@
 	return c
 }
 
+// CustomerId sets the optional parameter "customerId": Represents the
+// customer for which the data is to be fetched.
+func (c *CustomerUsageReportsGetCall) CustomerId(customerId string) *CustomerUsageReportsGetCall {
+	c.opt_["customerId"] = customerId
+	return c
+}
+
 // PageToken sets the optional parameter "pageToken": Token to specify
 // next page.
 func (c *CustomerUsageReportsGetCall) PageToken(pageToken string) *CustomerUsageReportsGetCall {
@@ -503,6 +526,9 @@
 	var body io.Reader = nil
 	params := make(url.Values)
 	params.Set("alt", "json")
+	if v, ok := c.opt_["customerId"]; ok {
+		params.Set("customerId", fmt.Sprintf("%v", v))
+	}
 	if v, ok := c.opt_["pageToken"]; ok {
 		params.Set("pageToken", fmt.Sprintf("%v", v))
 	}
@@ -536,6 +562,12 @@
 	//     "date"
 	//   ],
 	//   "parameters": {
+	//     "customerId": {
+	//       "description": "Represents the customer for which the data is to be fetched.",
+	//       "location": "query",
+	//       "pattern": "C.+",
+	//       "type": "string"
+	//     },
 	//     "date": {
 	//       "description": "Represents the date in yyyy-mm-dd format for which the data is to be fetched.",
 	//       "location": "path",
@@ -584,6 +616,13 @@
 	return c
 }
 
+// CustomerId sets the optional parameter "customerId": Represents the
+// customer for which the data is to be fetched.
+func (c *UserUsageReportGetCall) CustomerId(customerId string) *UserUsageReportGetCall {
+	c.opt_["customerId"] = customerId
+	return c
+}
+
 // Filters sets the optional parameter "filters": Represents the set of
 // filters including parameter operator value.
 func (c *UserUsageReportGetCall) Filters(filters string) *UserUsageReportGetCall {
@@ -617,6 +656,9 @@
 	var body io.Reader = nil
 	params := make(url.Values)
 	params.Set("alt", "json")
+	if v, ok := c.opt_["customerId"]; ok {
+		params.Set("customerId", fmt.Sprintf("%v", v))
+	}
 	if v, ok := c.opt_["filters"]; ok {
 		params.Set("filters", fmt.Sprintf("%v", v))
 	}
@@ -658,6 +700,12 @@
 	//     "date"
 	//   ],
 	//   "parameters": {
+	//     "customerId": {
+	//       "description": "Represents the customer for which the data is to be fetched.",
+	//       "location": "query",
+	//       "pattern": "C.+",
+	//       "type": "string"
+	//     },
 	//     "date": {
 	//       "description": "Represents the date in yyyy-mm-dd format for which the data is to be fetched.",
 	//       "location": "path",
diff --git a/adsense/v1.2/adsense-api.json b/adsense/v1.2/adsense-api.json
index 975c7e4..693ad4d 100644
--- a/adsense/v1.2/adsense-api.json
+++ b/adsense/v1.2/adsense-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/uNS-sRnMSxAt1EBDty8pGLlbuVU\"",
+ "etag": "\"qMhxoRFWKZK4K3KdZJuqms1o3fc/uNS-sRnMSxAt1EBDty8pGLlbuVU\"",
  "discoveryVersion": "v1",
  "id": "adsense:v1.2",
  "name": "adsense",
diff --git a/adsense/v1.3/adsense-api.json b/adsense/v1.3/adsense-api.json
index 4d52663..66dd424 100644
--- a/adsense/v1.3/adsense-api.json
+++ b/adsense/v1.3/adsense-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/GMMSkluNoDAGt0gsfXn8i9R5LMk\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/GMMSkluNoDAGt0gsfXn8i9R5LMk\"",
  "discoveryVersion": "v1",
  "id": "adsense:v1.3",
  "name": "adsense",
diff --git a/adsense/v1.4/adsense-api.json b/adsense/v1.4/adsense-api.json
new file mode 100644
index 0000000..5f6452a
--- /dev/null
+++ b/adsense/v1.4/adsense-api.json
@@ -0,0 +1,2406 @@
+{
+ "kind": "discovery#restDescription",
+ "etag": "\"qMhxoRFWKZK4K3KdZJuqms1o3fc/uMVHKJ4n_qcpz4oUX9kxQGD7l-A\"",
+ "discoveryVersion": "v1",
+ "id": "adsense:v1.4",
+ "name": "adsense",
+ "canonicalName": "AdSense",
+ "version": "v1.4",
+ "title": "AdSense Management API",
+ "description": "Gives AdSense publishers access to their inventory and the ability to generate reports",
+ "ownerDomain": "google.com",
+ "ownerName": "Google",
+ "icons": {
+  "x16": "http://www.google.com/images/icons/product/adsense-16.png",
+  "x32": "http://www.google.com/images/icons/product/adsense-32.png"
+ },
+ "documentationLink": "https://developers.google.com/adsense/management/",
+ "protocol": "rest",
+ "baseUrl": "https://www.googleapis.com/adsense/v1.4/",
+ "basePath": "/adsense/v1.4/",
+ "rootUrl": "https://www.googleapis.com/",
+ "servicePath": "adsense/v1.4/",
+ "batchPath": "batch",
+ "parameters": {
+  "alt": {
+   "type": "string",
+   "description": "Data format for the response.",
+   "default": "json",
+   "enum": [
+    "csv",
+    "json"
+   ],
+   "enumDescriptions": [
+    "Responses with Content-Type of text/csv",
+    "Responses with Content-Type of application/json"
+   ],
+   "location": "query"
+  },
+  "fields": {
+   "type": "string",
+   "description": "Selector specifying which fields to include in a partial response.",
+   "location": "query"
+  },
+  "key": {
+   "type": "string",
+   "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+   "location": "query"
+  },
+  "oauth_token": {
+   "type": "string",
+   "description": "OAuth 2.0 token for the current user.",
+   "location": "query"
+  },
+  "prettyPrint": {
+   "type": "boolean",
+   "description": "Returns response with indentations and line breaks.",
+   "default": "true",
+   "location": "query"
+  },
+  "quotaUser": {
+   "type": "string",
+   "description": "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. Overrides userIp if both are provided.",
+   "location": "query"
+  },
+  "userIp": {
+   "type": "string",
+   "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.",
+   "location": "query"
+  }
+ },
+ "auth": {
+  "oauth2": {
+   "scopes": {
+    "https://www.googleapis.com/auth/adsense": {
+     "description": "View and manage your AdSense data"
+    },
+    "https://www.googleapis.com/auth/adsense.readonly": {
+     "description": "View your AdSense data"
+    }
+   }
+  }
+ },
+ "schemas": {
+  "Account": {
+   "id": "Account",
+   "type": "object",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "Unique identifier of this account."
+    },
+    "kind": {
+     "type": "string",
+     "description": "Kind of resource this is, in this case adsense#account.",
+     "default": "adsense#account"
+    },
+    "name": {
+     "type": "string",
+     "description": "Name of this account."
+    },
+    "premium": {
+     "type": "boolean",
+     "description": "Whether this account is premium."
+    },
+    "subAccounts": {
+     "type": "array",
+     "description": "Sub accounts of the this account.",
+     "items": {
+      "$ref": "Account"
+     }
+    },
+    "timezone": {
+     "type": "string",
+     "description": "AdSense timezone of this account."
+    }
+   }
+  },
+  "Accounts": {
+   "id": "Accounts",
+   "type": "object",
+   "properties": {
+    "etag": {
+     "type": "string",
+     "description": "ETag of this response for caching purposes."
+    },
+    "items": {
+     "type": "array",
+     "description": "The accounts returned in this list response.",
+     "items": {
+      "$ref": "Account"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Kind of list this is, in this case adsense#accounts.",
+     "default": "adsense#accounts"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "Continuation token used to page through accounts. To retrieve the next page of results, set the next request's \"pageToken\" value to this."
+    }
+   }
+  },
+  "AdClient": {
+   "id": "AdClient",
+   "type": "object",
+   "properties": {
+    "arcOptIn": {
+     "type": "boolean",
+     "description": "Whether this ad client is opted in to ARC."
+    },
+    "arcReviewMode": {
+     "type": "string",
+     "description": "ARC review mode this ad client is in. Empty if the client is not opted in to ARC. Possible values: POST_REVIEW, AUTOMATIC_PRE_REVIEW."
+    },
+    "id": {
+     "type": "string",
+     "description": "Unique identifier of this ad client."
+    },
+    "kind": {
+     "type": "string",
+     "description": "Kind of resource this is, in this case adsense#adClient.",
+     "default": "adsense#adClient"
+    },
+    "productCode": {
+     "type": "string",
+     "description": "This ad client's product code, which corresponds to the PRODUCT_CODE report dimension."
+    },
+    "supportsReporting": {
+     "type": "boolean",
+     "description": "Whether this ad client supports being reported on."
+    }
+   }
+  },
+  "AdClients": {
+   "id": "AdClients",
+   "type": "object",
+   "properties": {
+    "etag": {
+     "type": "string",
+     "description": "ETag of this response for caching purposes."
+    },
+    "items": {
+     "type": "array",
+     "description": "The ad clients returned in this list response.",
+     "items": {
+      "$ref": "AdClient"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Kind of list this is, in this case adsense#adClients.",
+     "default": "adsense#adClients"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "Continuation token used to page through ad clients. To retrieve the next page of results, set the next request's \"pageToken\" value to this."
+    }
+   }
+  },
+  "AdCode": {
+   "id": "AdCode",
+   "type": "object",
+   "properties": {
+    "adCode": {
+     "type": "string",
+     "description": "The ad code snippet."
+    },
+    "kind": {
+     "type": "string",
+     "description": "Kind this is, in this case adsense#adCode.",
+     "default": "adsense#adCode"
+    }
+   }
+  },
+  "AdStyle": {
+   "id": "AdStyle",
+   "type": "object",
+   "properties": {
+    "colors": {
+     "type": "object",
+     "description": "The colors which are included in the style. These are represented as six hexadecimal characters, similar to HTML color codes, but without the leading hash.",
+     "properties": {
+      "background": {
+       "type": "string",
+       "description": "The color of the ad background."
+      },
+      "border": {
+       "type": "string",
+       "description": "The color of the ad border."
+      },
+      "text": {
+       "type": "string",
+       "description": "The color of the ad text."
+      },
+      "title": {
+       "type": "string",
+       "description": "The color of the ad title."
+      },
+      "url": {
+       "type": "string",
+       "description": "The color of the ad url."
+      }
+     }
+    },
+    "corners": {
+     "type": "string",
+     "description": "The style of the corners in the ad."
+    },
+    "font": {
+     "type": "object",
+     "description": "The font which is included in the style.",
+     "properties": {
+      "family": {
+       "type": "string",
+       "description": "The family of the font."
+      },
+      "size": {
+       "type": "string",
+       "description": "The size of the font."
+      }
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Kind this is, in this case adsense#adStyle.",
+     "default": "adsense#adStyle"
+    }
+   }
+  },
+  "AdUnit": {
+   "id": "AdUnit",
+   "type": "object",
+   "properties": {
+    "code": {
+     "type": "string",
+     "description": "Identity code of this ad unit, not necessarily unique across ad clients."
+    },
+    "contentAdsSettings": {
+     "type": "object",
+     "description": "Settings specific to content ads (AFC) and highend mobile content ads (AFMC).",
+     "properties": {
+      "backupOption": {
+       "type": "object",
+       "description": "The backup option to be used in instances where no ad is available.",
+       "properties": {
+        "color": {
+         "type": "string",
+         "description": "Color to use when type is set to COLOR."
+        },
+        "type": {
+         "type": "string",
+         "description": "Type of the backup option. Possible values are BLANK, COLOR and URL."
+        },
+        "url": {
+         "type": "string",
+         "description": "URL to use when type is set to URL."
+        }
+       }
+      },
+      "size": {
+       "type": "string",
+       "description": "Size of this ad unit."
+      },
+      "type": {
+       "type": "string",
+       "description": "Type of this ad unit."
+      }
+     }
+    },
+    "customStyle": {
+     "$ref": "AdStyle",
+     "description": "Custom style information specific to this ad unit."
+    },
+    "feedAdsSettings": {
+     "type": "object",
+     "description": "Settings specific to feed ads (AFF).",
+     "properties": {
+      "adPosition": {
+       "type": "string",
+       "description": "The position of the ads relative to the feed entries."
+      },
+      "frequency": {
+       "type": "integer",
+       "description": "The frequency at which ads should appear in the feed (i.e. every N entries).",
+       "format": "int32"
+      },
+      "minimumWordCount": {
+       "type": "integer",
+       "description": "The minimum length an entry should be in order to have attached ads.",
+       "format": "int32"
+      },
+      "type": {
+       "type": "string",
+       "description": "The type of ads which should appear."
+      }
+     }
+    },
+    "id": {
+     "type": "string",
+     "description": "Unique identifier of this ad unit. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format."
+    },
+    "kind": {
+     "type": "string",
+     "description": "Kind of resource this is, in this case adsense#adUnit.",
+     "default": "adsense#adUnit"
+    },
+    "mobileContentAdsSettings": {
+     "type": "object",
+     "description": "Settings specific to WAP mobile content ads (AFMC).",
+     "properties": {
+      "markupLanguage": {
+       "type": "string",
+       "description": "The markup language to use for this ad unit."
+      },
+      "scriptingLanguage": {
+       "type": "string",
+       "description": "The scripting language to use for this ad unit."
+      },
+      "size": {
+       "type": "string",
+       "description": "Size of this ad unit."
+      },
+      "type": {
+       "type": "string",
+       "description": "Type of this ad unit."
+      }
+     }
+    },
+    "name": {
+     "type": "string",
+     "description": "Name of this ad unit."
+    },
+    "savedStyleId": {
+     "type": "string",
+     "description": "ID of the saved ad style which holds this ad unit's style information."
+    },
+    "status": {
+     "type": "string",
+     "description": "Status of this ad unit. Possible values are:\nNEW: Indicates that the ad unit was created within the last seven days and does not yet have any activity associated with it.\n\nACTIVE: Indicates that there has been activity on this ad unit in the last seven days.\n\nINACTIVE: Indicates that there has been no activity on this ad unit in the last seven days."
+    }
+   }
+  },
+  "AdUnits": {
+   "id": "AdUnits",
+   "type": "object",
+   "properties": {
+    "etag": {
+     "type": "string",
+     "description": "ETag of this response for caching purposes."
+    },
+    "items": {
+     "type": "array",
+     "description": "The ad units returned in this list response.",
+     "items": {
+      "$ref": "AdUnit"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Kind of list this is, in this case adsense#adUnits.",
+     "default": "adsense#adUnits"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "Continuation token used to page through ad units. To retrieve the next page of results, set the next request's \"pageToken\" value to this."
+    }
+   }
+  },
+  "AdsenseReportsGenerateResponse": {
+   "id": "AdsenseReportsGenerateResponse",
+   "type": "object",
+   "properties": {
+    "averages": {
+     "type": "array",
+     "description": "The averages of the report. This is the same length as any other row in the report; cells corresponding to dimension columns are empty.",
+     "items": {
+      "type": "string"
+     }
+    },
+    "endDate": {
+     "type": "string",
+     "description": "The requested end date in yyyy-mm-dd format."
+    },
+    "headers": {
+     "type": "array",
+     "description": "The header information of the columns requested in the report. This is a list of headers; one for each dimension in the request, followed by one for each metric in the request.",
+     "items": {
+      "type": "object",
+      "properties": {
+       "currency": {
+        "type": "string",
+        "description": "The currency of this column. Only present if the header type is METRIC_CURRENCY."
+       },
+       "name": {
+        "type": "string",
+        "description": "The name of the header."
+       },
+       "type": {
+        "type": "string",
+        "description": "The type of the header; one of DIMENSION, METRIC_TALLY, METRIC_RATIO, or METRIC_CURRENCY."
+       }
+      }
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Kind this is, in this case adsense#report.",
+     "default": "adsense#report"
+    },
+    "rows": {
+     "type": "array",
+     "description": "The output rows of the report. Each row is a list of cells; one for each dimension in the request, followed by one for each metric in the request. The dimension cells contain strings, and the metric cells contain numbers.",
+     "items": {
+      "type": "array",
+      "items": {
+       "type": "string"
+      }
+     }
+    },
+    "startDate": {
+     "type": "string",
+     "description": "The requested start date in yyyy-mm-dd format."
+    },
+    "totalMatchedRows": {
+     "type": "string",
+     "description": "The total number of rows matched by the report request. Fewer rows may be returned in the response due to being limited by the row count requested or the report row limit.",
+     "format": "int64"
+    },
+    "totals": {
+     "type": "array",
+     "description": "The totals of the report. This is the same length as any other row in the report; cells corresponding to dimension columns are empty.",
+     "items": {
+      "type": "string"
+     }
+    },
+    "warnings": {
+     "type": "array",
+     "description": "Any warnings associated with generation of the report.",
+     "items": {
+      "type": "string"
+     }
+    }
+   }
+  },
+  "Alert": {
+   "id": "Alert",
+   "type": "object",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "Unique identifier of this alert. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format."
+    },
+    "isDismissible": {
+     "type": "boolean",
+     "description": "Whether this alert can be dismissed."
+    },
+    "kind": {
+     "type": "string",
+     "description": "Kind of resource this is, in this case adsense#alert.",
+     "default": "adsense#alert"
+    },
+    "message": {
+     "type": "string",
+     "description": "The localized alert message."
+    },
+    "severity": {
+     "type": "string",
+     "description": "Severity of this alert. Possible values: INFO, WARNING, SEVERE."
+    },
+    "type": {
+     "type": "string",
+     "description": "Type of this alert. Possible values: SELF_HOLD, MIGRATED_TO_BILLING3, ADDRESS_PIN_VERIFICATION, PHONE_PIN_VERIFICATION, CORPORATE_ENTITY, GRAYLISTED_PUBLISHER, API_HOLD."
+    }
+   }
+  },
+  "Alerts": {
+   "id": "Alerts",
+   "type": "object",
+   "properties": {
+    "items": {
+     "type": "array",
+     "description": "The alerts returned in this list response.",
+     "items": {
+      "$ref": "Alert"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Kind of list this is, in this case adsense#alerts.",
+     "default": "adsense#alerts"
+    }
+   }
+  },
+  "CustomChannel": {
+   "id": "CustomChannel",
+   "type": "object",
+   "properties": {
+    "code": {
+     "type": "string",
+     "description": "Code of this custom channel, not necessarily unique across ad clients."
+    },
+    "id": {
+     "type": "string",
+     "description": "Unique identifier of this custom channel. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format."
+    },
+    "kind": {
+     "type": "string",
+     "description": "Kind of resource this is, in this case adsense#customChannel.",
+     "default": "adsense#customChannel"
+    },
+    "name": {
+     "type": "string",
+     "description": "Name of this custom channel."
+    },
+    "targetingInfo": {
+     "type": "object",
+     "description": "The targeting information of this custom channel, if activated.",
+     "properties": {
+      "adsAppearOn": {
+       "type": "string",
+       "description": "The name used to describe this channel externally."
+      },
+      "description": {
+       "type": "string",
+       "description": "The external description of the channel."
+      },
+      "location": {
+       "type": "string",
+       "description": "The locations in which ads appear. (Only valid for content and mobile content ads). Acceptable values for content ads are: TOP_LEFT, TOP_CENTER, TOP_RIGHT, MIDDLE_LEFT, MIDDLE_CENTER, MIDDLE_RIGHT, BOTTOM_LEFT, BOTTOM_CENTER, BOTTOM_RIGHT, MULTIPLE_LOCATIONS. Acceptable values for mobile content ads are: TOP, MIDDLE, BOTTOM, MULTIPLE_LOCATIONS."
+      },
+      "siteLanguage": {
+       "type": "string",
+       "description": "The language of the sites ads will be displayed on."
+      }
+     }
+    }
+   }
+  },
+  "CustomChannels": {
+   "id": "CustomChannels",
+   "type": "object",
+   "properties": {
+    "etag": {
+     "type": "string",
+     "description": "ETag of this response for caching purposes."
+    },
+    "items": {
+     "type": "array",
+     "description": "The custom channels returned in this list response.",
+     "items": {
+      "$ref": "CustomChannel"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Kind of list this is, in this case adsense#customChannels.",
+     "default": "adsense#customChannels"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "Continuation token used to page through custom channels. To retrieve the next page of results, set the next request's \"pageToken\" value to this."
+    }
+   }
+  },
+  "Metadata": {
+   "id": "Metadata",
+   "type": "object",
+   "properties": {
+    "items": {
+     "type": "array",
+     "items": {
+      "$ref": "ReportingMetadataEntry"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Kind of list this is, in this case adsense#metadata.",
+     "default": "adsense#metadata"
+    }
+   }
+  },
+  "Payment": {
+   "id": "Payment",
+   "type": "object",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "Unique identifier of this Payment."
+    },
+    "kind": {
+     "type": "string",
+     "description": "Kind of resource this is, in this case adsense#payment.",
+     "default": "adsense#payment"
+    },
+    "paymentAmount": {
+     "type": "string",
+     "description": "The amount to be paid."
+    },
+    "paymentAmountCurrencyCode": {
+     "type": "string",
+     "description": "The currency code for the amount to be paid."
+    },
+    "paymentDate": {
+     "type": "string",
+     "description": "The date this payment was/will be credited to the user, or none if the payment threshold has not been met."
+    }
+   }
+  },
+  "Payments": {
+   "id": "Payments",
+   "type": "object",
+   "properties": {
+    "items": {
+     "type": "array",
+     "description": "The list of Payments for the account. One or both of a) the account's most recent payment; and b) the account's upcoming payment.",
+     "items": {
+      "$ref": "Payment"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Kind of list this is, in this case adsense#payments.",
+     "default": "adsense#payments"
+    }
+   }
+  },
+  "ReportingMetadataEntry": {
+   "id": "ReportingMetadataEntry",
+   "type": "object",
+   "properties": {
+    "compatibleDimensions": {
+     "type": "array",
+     "description": "For metrics this is a list of dimension IDs which the metric is compatible with, for dimensions it is a list of compatibility groups the dimension belongs to.",
+     "items": {
+      "type": "string"
+     }
+    },
+    "compatibleMetrics": {
+     "type": "array",
+     "description": "The names of the metrics the dimension or metric this reporting metadata entry describes is compatible with.",
+     "items": {
+      "type": "string"
+     }
+    },
+    "id": {
+     "type": "string",
+     "description": "Unique identifier of this reporting metadata entry, corresponding to the name of the appropriate dimension or metric."
+    },
+    "kind": {
+     "type": "string",
+     "description": "Kind of resource this is, in this case adsense#reportingMetadataEntry.",
+     "default": "adsense#reportingMetadataEntry"
+    },
+    "requiredDimensions": {
+     "type": "array",
+     "description": "The names of the dimensions which the dimension or metric this reporting metadata entry describes requires to also be present in order for the report to be valid. Omitting these will not cause an error or warning, but may result in data which cannot be correctly interpreted.",
+     "items": {
+      "type": "string"
+     }
+    },
+    "requiredMetrics": {
+     "type": "array",
+     "description": "The names of the metrics which the dimension or metric this reporting metadata entry describes requires to also be present in order for the report to be valid. Omitting these will not cause an error or warning, but may result in data which cannot be correctly interpreted.",
+     "items": {
+      "type": "string"
+     }
+    },
+    "supportedProducts": {
+     "type": "array",
+     "description": "The codes of the projects supported by the dimension or metric this reporting metadata entry describes.",
+     "items": {
+      "type": "string"
+     }
+    }
+   }
+  },
+  "SavedAdStyle": {
+   "id": "SavedAdStyle",
+   "type": "object",
+   "properties": {
+    "adStyle": {
+     "$ref": "AdStyle",
+     "description": "The AdStyle itself."
+    },
+    "id": {
+     "type": "string",
+     "description": "Unique identifier of this saved ad style. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format."
+    },
+    "kind": {
+     "type": "string",
+     "description": "Kind of resource this is, in this case adsense#savedAdStyle.",
+     "default": "adsense#savedAdStyle"
+    },
+    "name": {
+     "type": "string",
+     "description": "The user selected name of this SavedAdStyle."
+    }
+   }
+  },
+  "SavedAdStyles": {
+   "id": "SavedAdStyles",
+   "type": "object",
+   "properties": {
+    "etag": {
+     "type": "string",
+     "description": "ETag of this response for caching purposes."
+    },
+    "items": {
+     "type": "array",
+     "description": "The saved ad styles returned in this list response.",
+     "items": {
+      "$ref": "SavedAdStyle"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Kind of list this is, in this case adsense#savedAdStyles.",
+     "default": "adsense#savedAdStyles"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "Continuation token used to page through ad units. To retrieve the next page of results, set the next request's \"pageToken\" value to this."
+    }
+   }
+  },
+  "SavedReport": {
+   "id": "SavedReport",
+   "type": "object",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "Unique identifier of this saved report."
+    },
+    "kind": {
+     "type": "string",
+     "description": "Kind of resource this is, in this case adsense#savedReport.",
+     "default": "adsense#savedReport"
+    },
+    "name": {
+     "type": "string",
+     "description": "This saved report's name."
+    }
+   }
+  },
+  "SavedReports": {
+   "id": "SavedReports",
+   "type": "object",
+   "properties": {
+    "etag": {
+     "type": "string",
+     "description": "ETag of this response for caching purposes."
+    },
+    "items": {
+     "type": "array",
+     "description": "The saved reports returned in this list response.",
+     "items": {
+      "$ref": "SavedReport"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Kind of list this is, in this case adsense#savedReports.",
+     "default": "adsense#savedReports"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "Continuation token used to page through saved reports. To retrieve the next page of results, set the next request's \"pageToken\" value to this."
+    }
+   }
+  },
+  "UrlChannel": {
+   "id": "UrlChannel",
+   "type": "object",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "Unique identifier of this URL channel. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format."
+    },
+    "kind": {
+     "type": "string",
+     "description": "Kind of resource this is, in this case adsense#urlChannel.",
+     "default": "adsense#urlChannel"
+    },
+    "urlPattern": {
+     "type": "string",
+     "description": "URL Pattern of this URL channel. Does not include \"http://\" or \"https://\". Example: www.example.com/home"
+    }
+   }
+  },
+  "UrlChannels": {
+   "id": "UrlChannels",
+   "type": "object",
+   "properties": {
+    "etag": {
+     "type": "string",
+     "description": "ETag of this response for caching purposes."
+    },
+    "items": {
+     "type": "array",
+     "description": "The URL channels returned in this list response.",
+     "items": {
+      "$ref": "UrlChannel"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Kind of list this is, in this case adsense#urlChannels.",
+     "default": "adsense#urlChannels"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "Continuation token used to page through URL channels. To retrieve the next page of results, set the next request's \"pageToken\" value to this."
+    }
+   }
+  }
+ },
+ "resources": {
+  "accounts": {
+   "methods": {
+    "get": {
+     "id": "adsense.accounts.get",
+     "path": "accounts/{accountId}",
+     "httpMethod": "GET",
+     "description": "Get information about the selected AdSense account.",
+     "parameters": {
+      "accountId": {
+       "type": "string",
+       "description": "Account to get information about.",
+       "required": true,
+       "location": "path"
+      },
+      "tree": {
+       "type": "boolean",
+       "description": "Whether the tree of sub accounts should be returned.",
+       "location": "query"
+      }
+     },
+     "parameterOrder": [
+      "accountId"
+     ],
+     "response": {
+      "$ref": "Account"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/adsense",
+      "https://www.googleapis.com/auth/adsense.readonly"
+     ]
+    },
+    "list": {
+     "id": "adsense.accounts.list",
+     "path": "accounts",
+     "httpMethod": "GET",
+     "description": "List all accounts available to this AdSense account.",
+     "parameters": {
+      "maxResults": {
+       "type": "integer",
+       "description": "The maximum number of accounts to include in the response, used for paging.",
+       "format": "int32",
+       "minimum": "0",
+       "maximum": "10000",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "A continuation token, used to page through accounts. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.",
+       "location": "query"
+      }
+     },
+     "response": {
+      "$ref": "Accounts"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/adsense",
+      "https://www.googleapis.com/auth/adsense.readonly"
+     ]
+    }
+   },
+   "resources": {
+    "adclients": {
+     "methods": {
+      "list": {
+       "id": "adsense.accounts.adclients.list",
+       "path": "accounts/{accountId}/adclients",
+       "httpMethod": "GET",
+       "description": "List all ad clients in the specified account.",
+       "parameters": {
+        "accountId": {
+         "type": "string",
+         "description": "Account for which to list ad clients.",
+         "required": true,
+         "location": "path"
+        },
+        "maxResults": {
+         "type": "integer",
+         "description": "The maximum number of ad clients to include in the response, used for paging.",
+         "format": "int32",
+         "minimum": "0",
+         "maximum": "10000",
+         "location": "query"
+        },
+        "pageToken": {
+         "type": "string",
+         "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.",
+         "location": "query"
+        }
+       },
+       "parameterOrder": [
+        "accountId"
+       ],
+       "response": {
+        "$ref": "AdClients"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/adsense",
+        "https://www.googleapis.com/auth/adsense.readonly"
+       ]
+      }
+     }
+    },
+    "adunits": {
+     "methods": {
+      "get": {
+       "id": "adsense.accounts.adunits.get",
+       "path": "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}",
+       "httpMethod": "GET",
+       "description": "Gets the specified ad unit in the specified ad client for the specified account.",
+       "parameters": {
+        "accountId": {
+         "type": "string",
+         "description": "Account to which the ad client belongs.",
+         "required": true,
+         "location": "path"
+        },
+        "adClientId": {
+         "type": "string",
+         "description": "Ad client for which to get the ad unit.",
+         "required": true,
+         "location": "path"
+        },
+        "adUnitId": {
+         "type": "string",
+         "description": "Ad unit to retrieve.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "accountId",
+        "adClientId",
+        "adUnitId"
+       ],
+       "response": {
+        "$ref": "AdUnit"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/adsense",
+        "https://www.googleapis.com/auth/adsense.readonly"
+       ]
+      },
+      "getAdCode": {
+       "id": "adsense.accounts.adunits.getAdCode",
+       "path": "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}/adcode",
+       "httpMethod": "GET",
+       "description": "Get ad code for the specified ad unit.",
+       "parameters": {
+        "accountId": {
+         "type": "string",
+         "description": "Account which contains the ad client.",
+         "required": true,
+         "location": "path"
+        },
+        "adClientId": {
+         "type": "string",
+         "description": "Ad client with contains the ad unit.",
+         "required": true,
+         "location": "path"
+        },
+        "adUnitId": {
+         "type": "string",
+         "description": "Ad unit to get the code for.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "accountId",
+        "adClientId",
+        "adUnitId"
+       ],
+       "response": {
+        "$ref": "AdCode"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/adsense",
+        "https://www.googleapis.com/auth/adsense.readonly"
+       ]
+      },
+      "list": {
+       "id": "adsense.accounts.adunits.list",
+       "path": "accounts/{accountId}/adclients/{adClientId}/adunits",
+       "httpMethod": "GET",
+       "description": "List all ad units in the specified ad client for the specified account.",
+       "parameters": {
+        "accountId": {
+         "type": "string",
+         "description": "Account to which the ad client belongs.",
+         "required": true,
+         "location": "path"
+        },
+        "adClientId": {
+         "type": "string",
+         "description": "Ad client for which to list ad units.",
+         "required": true,
+         "location": "path"
+        },
+        "includeInactive": {
+         "type": "boolean",
+         "description": "Whether to include inactive ad units. Default: true.",
+         "location": "query"
+        },
+        "maxResults": {
+         "type": "integer",
+         "description": "The maximum number of ad units to include in the response, used for paging.",
+         "format": "int32",
+         "minimum": "0",
+         "maximum": "10000",
+         "location": "query"
+        },
+        "pageToken": {
+         "type": "string",
+         "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.",
+         "location": "query"
+        }
+       },
+       "parameterOrder": [
+        "accountId",
+        "adClientId"
+       ],
+       "response": {
+        "$ref": "AdUnits"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/adsense",
+        "https://www.googleapis.com/auth/adsense.readonly"
+       ]
+      }
+     },
+     "resources": {
+      "customchannels": {
+       "methods": {
+        "list": {
+         "id": "adsense.accounts.adunits.customchannels.list",
+         "path": "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}/customchannels",
+         "httpMethod": "GET",
+         "description": "List all custom channels which the specified ad unit belongs to.",
+         "parameters": {
+          "accountId": {
+           "type": "string",
+           "description": "Account to which the ad client belongs.",
+           "required": true,
+           "location": "path"
+          },
+          "adClientId": {
+           "type": "string",
+           "description": "Ad client which contains the ad unit.",
+           "required": true,
+           "location": "path"
+          },
+          "adUnitId": {
+           "type": "string",
+           "description": "Ad unit for which to list custom channels.",
+           "required": true,
+           "location": "path"
+          },
+          "maxResults": {
+           "type": "integer",
+           "description": "The maximum number of custom channels to include in the response, used for paging.",
+           "format": "int32",
+           "minimum": "0",
+           "maximum": "10000",
+           "location": "query"
+          },
+          "pageToken": {
+           "type": "string",
+           "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.",
+           "location": "query"
+          }
+         },
+         "parameterOrder": [
+          "accountId",
+          "adClientId",
+          "adUnitId"
+         ],
+         "response": {
+          "$ref": "CustomChannels"
+         },
+         "scopes": [
+          "https://www.googleapis.com/auth/adsense",
+          "https://www.googleapis.com/auth/adsense.readonly"
+         ]
+        }
+       }
+      }
+     }
+    },
+    "alerts": {
+     "methods": {
+      "delete": {
+       "id": "adsense.accounts.alerts.delete",
+       "path": "accounts/{accountId}/alerts/{alertId}",
+       "httpMethod": "DELETE",
+       "description": "Dismiss (delete) the specified alert from the specified publisher AdSense account.",
+       "parameters": {
+        "accountId": {
+         "type": "string",
+         "description": "Account which contains the ad unit.",
+         "required": true,
+         "location": "path"
+        },
+        "alertId": {
+         "type": "string",
+         "description": "Alert to delete.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "accountId",
+        "alertId"
+       ],
+       "scopes": [
+        "https://www.googleapis.com/auth/adsense"
+       ]
+      },
+      "list": {
+       "id": "adsense.accounts.alerts.list",
+       "path": "accounts/{accountId}/alerts",
+       "httpMethod": "GET",
+       "description": "List the alerts for the specified AdSense account.",
+       "parameters": {
+        "accountId": {
+         "type": "string",
+         "description": "Account for which to retrieve the alerts.",
+         "required": true,
+         "location": "path"
+        },
+        "locale": {
+         "type": "string",
+         "description": "The locale to use for translating alert messages. The account locale will be used if this is not supplied. The AdSense default (English) will be used if the supplied locale is invalid or unsupported.",
+         "location": "query"
+        }
+       },
+       "parameterOrder": [
+        "accountId"
+       ],
+       "response": {
+        "$ref": "Alerts"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/adsense",
+        "https://www.googleapis.com/auth/adsense.readonly"
+       ]
+      }
+     }
+    },
+    "customchannels": {
+     "methods": {
+      "get": {
+       "id": "adsense.accounts.customchannels.get",
+       "path": "accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}",
+       "httpMethod": "GET",
+       "description": "Get the specified custom channel from the specified ad client for the specified account.",
+       "parameters": {
+        "accountId": {
+         "type": "string",
+         "description": "Account to which the ad client belongs.",
+         "required": true,
+         "location": "path"
+        },
+        "adClientId": {
+         "type": "string",
+         "description": "Ad client which contains the custom channel.",
+         "required": true,
+         "location": "path"
+        },
+        "customChannelId": {
+         "type": "string",
+         "description": "Custom channel to retrieve.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "accountId",
+        "adClientId",
+        "customChannelId"
+       ],
+       "response": {
+        "$ref": "CustomChannel"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/adsense",
+        "https://www.googleapis.com/auth/adsense.readonly"
+       ]
+      },
+      "list": {
+       "id": "adsense.accounts.customchannels.list",
+       "path": "accounts/{accountId}/adclients/{adClientId}/customchannels",
+       "httpMethod": "GET",
+       "description": "List all custom channels in the specified ad client for the specified account.",
+       "parameters": {
+        "accountId": {
+         "type": "string",
+         "description": "Account to which the ad client belongs.",
+         "required": true,
+         "location": "path"
+        },
+        "adClientId": {
+         "type": "string",
+         "description": "Ad client for which to list custom channels.",
+         "required": true,
+         "location": "path"
+        },
+        "maxResults": {
+         "type": "integer",
+         "description": "The maximum number of custom channels to include in the response, used for paging.",
+         "format": "int32",
+         "minimum": "0",
+         "maximum": "10000",
+         "location": "query"
+        },
+        "pageToken": {
+         "type": "string",
+         "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.",
+         "location": "query"
+        }
+       },
+       "parameterOrder": [
+        "accountId",
+        "adClientId"
+       ],
+       "response": {
+        "$ref": "CustomChannels"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/adsense",
+        "https://www.googleapis.com/auth/adsense.readonly"
+       ]
+      }
+     },
+     "resources": {
+      "adunits": {
+       "methods": {
+        "list": {
+         "id": "adsense.accounts.customchannels.adunits.list",
+         "path": "accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}/adunits",
+         "httpMethod": "GET",
+         "description": "List all ad units in the specified custom channel.",
+         "parameters": {
+          "accountId": {
+           "type": "string",
+           "description": "Account to which the ad client belongs.",
+           "required": true,
+           "location": "path"
+          },
+          "adClientId": {
+           "type": "string",
+           "description": "Ad client which contains the custom channel.",
+           "required": true,
+           "location": "path"
+          },
+          "customChannelId": {
+           "type": "string",
+           "description": "Custom channel for which to list ad units.",
+           "required": true,
+           "location": "path"
+          },
+          "includeInactive": {
+           "type": "boolean",
+           "description": "Whether to include inactive ad units. Default: true.",
+           "location": "query"
+          },
+          "maxResults": {
+           "type": "integer",
+           "description": "The maximum number of ad units to include in the response, used for paging.",
+           "format": "int32",
+           "minimum": "0",
+           "maximum": "10000",
+           "location": "query"
+          },
+          "pageToken": {
+           "type": "string",
+           "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.",
+           "location": "query"
+          }
+         },
+         "parameterOrder": [
+          "accountId",
+          "adClientId",
+          "customChannelId"
+         ],
+         "response": {
+          "$ref": "AdUnits"
+         },
+         "scopes": [
+          "https://www.googleapis.com/auth/adsense",
+          "https://www.googleapis.com/auth/adsense.readonly"
+         ]
+        }
+       }
+      }
+     }
+    },
+    "payments": {
+     "methods": {
+      "list": {
+       "id": "adsense.accounts.payments.list",
+       "path": "accounts/{accountId}/payments",
+       "httpMethod": "GET",
+       "description": "List the payments for the specified AdSense account.",
+       "parameters": {
+        "accountId": {
+         "type": "string",
+         "description": "Account for which to retrieve the payments.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "accountId"
+       ],
+       "response": {
+        "$ref": "Payments"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/adsense",
+        "https://www.googleapis.com/auth/adsense.readonly"
+       ]
+      }
+     }
+    },
+    "reports": {
+     "methods": {
+      "generate": {
+       "id": "adsense.accounts.reports.generate",
+       "path": "accounts/{accountId}/reports",
+       "httpMethod": "GET",
+       "description": "Generate an AdSense report based on the report request sent in the query parameters. Returns the result as JSON; to retrieve output in CSV format specify \"alt=csv\" as a query parameter.",
+       "parameters": {
+        "accountId": {
+         "type": "string",
+         "description": "Account upon which to report.",
+         "required": true,
+         "location": "path"
+        },
+        "currency": {
+         "type": "string",
+         "description": "Optional currency to use when reporting on monetary metrics. Defaults to the account's currency if not set.",
+         "pattern": "[a-zA-Z]+",
+         "location": "query"
+        },
+        "dimension": {
+         "type": "string",
+         "description": "Dimensions to base the report on.",
+         "pattern": "[a-zA-Z_]+",
+         "repeated": true,
+         "location": "query"
+        },
+        "endDate": {
+         "type": "string",
+         "description": "End of the date range to report on in \"YYYY-MM-DD\" format, inclusive.",
+         "required": true,
+         "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,2}?)",
+         "location": "query"
+        },
+        "filter": {
+         "type": "string",
+         "description": "Filters to be run on the report.",
+         "pattern": "[a-zA-Z_]+(==|=@).+",
+         "repeated": true,
+         "location": "query"
+        },
+        "locale": {
+         "type": "string",
+         "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.",
+         "pattern": "[a-zA-Z_]+",
+         "location": "query"
+        },
+        "maxResults": {
+         "type": "integer",
+         "description": "The maximum number of rows of report data to return.",
+         "format": "int32",
+         "minimum": "0",
+         "maximum": "50000",
+         "location": "query"
+        },
+        "metric": {
+         "type": "string",
+         "description": "Numeric columns to include in the report.",
+         "pattern": "[a-zA-Z_]+",
+         "repeated": true,
+         "location": "query"
+        },
+        "sort": {
+         "type": "string",
+         "description": "The name of a dimension or metric to sort the resulting report on, optionally prefixed with \"+\" to sort ascending or \"-\" to sort descending. If no prefix is specified, the column is sorted ascending.",
+         "pattern": "(\\+|-)?[a-zA-Z_]+",
+         "repeated": true,
+         "location": "query"
+        },
+        "startDate": {
+         "type": "string",
+         "description": "Start of the date range to report on in \"YYYY-MM-DD\" format, inclusive.",
+         "required": true,
+         "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,2}?)",
+         "location": "query"
+        },
+        "startIndex": {
+         "type": "integer",
+         "description": "Index of the first row of report data to return.",
+         "format": "int32",
+         "minimum": "0",
+         "maximum": "5000",
+         "location": "query"
+        },
+        "useTimezoneReporting": {
+         "type": "boolean",
+         "description": "Whether the report should be generated in the AdSense account's local timezone. If false default PST/PDT timezone will be used.",
+         "location": "query"
+        }
+       },
+       "parameterOrder": [
+        "accountId",
+        "startDate",
+        "endDate"
+       ],
+       "response": {
+        "$ref": "AdsenseReportsGenerateResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/adsense",
+        "https://www.googleapis.com/auth/adsense.readonly"
+       ],
+       "supportsMediaDownload": true
+      }
+     },
+     "resources": {
+      "saved": {
+       "methods": {
+        "generate": {
+         "id": "adsense.accounts.reports.saved.generate",
+         "path": "accounts/{accountId}/reports/{savedReportId}",
+         "httpMethod": "GET",
+         "description": "Generate an AdSense report based on the saved report ID sent in the query parameters.",
+         "parameters": {
+          "accountId": {
+           "type": "string",
+           "description": "Account to which the saved reports belong.",
+           "required": true,
+           "location": "path"
+          },
+          "locale": {
+           "type": "string",
+           "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.",
+           "pattern": "[a-zA-Z_]+",
+           "location": "query"
+          },
+          "maxResults": {
+           "type": "integer",
+           "description": "The maximum number of rows of report data to return.",
+           "format": "int32",
+           "minimum": "0",
+           "maximum": "50000",
+           "location": "query"
+          },
+          "savedReportId": {
+           "type": "string",
+           "description": "The saved report to retrieve.",
+           "required": true,
+           "location": "path"
+          },
+          "startIndex": {
+           "type": "integer",
+           "description": "Index of the first row of report data to return.",
+           "format": "int32",
+           "minimum": "0",
+           "maximum": "5000",
+           "location": "query"
+          }
+         },
+         "parameterOrder": [
+          "accountId",
+          "savedReportId"
+         ],
+         "response": {
+          "$ref": "AdsenseReportsGenerateResponse"
+         },
+         "scopes": [
+          "https://www.googleapis.com/auth/adsense",
+          "https://www.googleapis.com/auth/adsense.readonly"
+         ]
+        },
+        "list": {
+         "id": "adsense.accounts.reports.saved.list",
+         "path": "accounts/{accountId}/reports/saved",
+         "httpMethod": "GET",
+         "description": "List all saved reports in the specified AdSense account.",
+         "parameters": {
+          "accountId": {
+           "type": "string",
+           "description": "Account to which the saved reports belong.",
+           "required": true,
+           "location": "path"
+          },
+          "maxResults": {
+           "type": "integer",
+           "description": "The maximum number of saved reports to include in the response, used for paging.",
+           "format": "int32",
+           "minimum": "0",
+           "maximum": "100",
+           "location": "query"
+          },
+          "pageToken": {
+           "type": "string",
+           "description": "A continuation token, used to page through saved reports. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.",
+           "location": "query"
+          }
+         },
+         "parameterOrder": [
+          "accountId"
+         ],
+         "response": {
+          "$ref": "SavedReports"
+         },
+         "scopes": [
+          "https://www.googleapis.com/auth/adsense",
+          "https://www.googleapis.com/auth/adsense.readonly"
+         ]
+        }
+       }
+      }
+     }
+    },
+    "savedadstyles": {
+     "methods": {
+      "get": {
+       "id": "adsense.accounts.savedadstyles.get",
+       "path": "accounts/{accountId}/savedadstyles/{savedAdStyleId}",
+       "httpMethod": "GET",
+       "description": "List a specific saved ad style for the specified account.",
+       "parameters": {
+        "accountId": {
+         "type": "string",
+         "description": "Account for which to get the saved ad style.",
+         "required": true,
+         "location": "path"
+        },
+        "savedAdStyleId": {
+         "type": "string",
+         "description": "Saved ad style to retrieve.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "accountId",
+        "savedAdStyleId"
+       ],
+       "response": {
+        "$ref": "SavedAdStyle"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/adsense",
+        "https://www.googleapis.com/auth/adsense.readonly"
+       ]
+      },
+      "list": {
+       "id": "adsense.accounts.savedadstyles.list",
+       "path": "accounts/{accountId}/savedadstyles",
+       "httpMethod": "GET",
+       "description": "List all saved ad styles in the specified account.",
+       "parameters": {
+        "accountId": {
+         "type": "string",
+         "description": "Account for which to list saved ad styles.",
+         "required": true,
+         "location": "path"
+        },
+        "maxResults": {
+         "type": "integer",
+         "description": "The maximum number of saved ad styles to include in the response, used for paging.",
+         "format": "int32",
+         "minimum": "0",
+         "maximum": "10000",
+         "location": "query"
+        },
+        "pageToken": {
+         "type": "string",
+         "description": "A continuation token, used to page through saved ad styles. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.",
+         "location": "query"
+        }
+       },
+       "parameterOrder": [
+        "accountId"
+       ],
+       "response": {
+        "$ref": "SavedAdStyles"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/adsense",
+        "https://www.googleapis.com/auth/adsense.readonly"
+       ]
+      }
+     }
+    },
+    "urlchannels": {
+     "methods": {
+      "list": {
+       "id": "adsense.accounts.urlchannels.list",
+       "path": "accounts/{accountId}/adclients/{adClientId}/urlchannels",
+       "httpMethod": "GET",
+       "description": "List all URL channels in the specified ad client for the specified account.",
+       "parameters": {
+        "accountId": {
+         "type": "string",
+         "description": "Account to which the ad client belongs.",
+         "required": true,
+         "location": "path"
+        },
+        "adClientId": {
+         "type": "string",
+         "description": "Ad client for which to list URL channels.",
+         "required": true,
+         "location": "path"
+        },
+        "maxResults": {
+         "type": "integer",
+         "description": "The maximum number of URL channels to include in the response, used for paging.",
+         "format": "int32",
+         "minimum": "0",
+         "maximum": "10000",
+         "location": "query"
+        },
+        "pageToken": {
+         "type": "string",
+         "description": "A continuation token, used to page through URL channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.",
+         "location": "query"
+        }
+       },
+       "parameterOrder": [
+        "accountId",
+        "adClientId"
+       ],
+       "response": {
+        "$ref": "UrlChannels"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/adsense",
+        "https://www.googleapis.com/auth/adsense.readonly"
+       ]
+      }
+     }
+    }
+   }
+  },
+  "adclients": {
+   "methods": {
+    "list": {
+     "id": "adsense.adclients.list",
+     "path": "adclients",
+     "httpMethod": "GET",
+     "description": "List all ad clients in this AdSense account.",
+     "parameters": {
+      "maxResults": {
+       "type": "integer",
+       "description": "The maximum number of ad clients to include in the response, used for paging.",
+       "format": "int32",
+       "minimum": "0",
+       "maximum": "10000",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.",
+       "location": "query"
+      }
+     },
+     "response": {
+      "$ref": "AdClients"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/adsense",
+      "https://www.googleapis.com/auth/adsense.readonly"
+     ]
+    }
+   }
+  },
+  "adunits": {
+   "methods": {
+    "get": {
+     "id": "adsense.adunits.get",
+     "path": "adclients/{adClientId}/adunits/{adUnitId}",
+     "httpMethod": "GET",
+     "description": "Gets the specified ad unit in the specified ad client.",
+     "parameters": {
+      "adClientId": {
+       "type": "string",
+       "description": "Ad client for which to get the ad unit.",
+       "required": true,
+       "location": "path"
+      },
+      "adUnitId": {
+       "type": "string",
+       "description": "Ad unit to retrieve.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "adClientId",
+      "adUnitId"
+     ],
+     "response": {
+      "$ref": "AdUnit"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/adsense",
+      "https://www.googleapis.com/auth/adsense.readonly"
+     ]
+    },
+    "getAdCode": {
+     "id": "adsense.adunits.getAdCode",
+     "path": "adclients/{adClientId}/adunits/{adUnitId}/adcode",
+     "httpMethod": "GET",
+     "description": "Get ad code for the specified ad unit.",
+     "parameters": {
+      "adClientId": {
+       "type": "string",
+       "description": "Ad client with contains the ad unit.",
+       "required": true,
+       "location": "path"
+      },
+      "adUnitId": {
+       "type": "string",
+       "description": "Ad unit to get the code for.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "adClientId",
+      "adUnitId"
+     ],
+     "response": {
+      "$ref": "AdCode"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/adsense",
+      "https://www.googleapis.com/auth/adsense.readonly"
+     ]
+    },
+    "list": {
+     "id": "adsense.adunits.list",
+     "path": "adclients/{adClientId}/adunits",
+     "httpMethod": "GET",
+     "description": "List all ad units in the specified ad client for this AdSense account.",
+     "parameters": {
+      "adClientId": {
+       "type": "string",
+       "description": "Ad client for which to list ad units.",
+       "required": true,
+       "location": "path"
+      },
+      "includeInactive": {
+       "type": "boolean",
+       "description": "Whether to include inactive ad units. Default: true.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "The maximum number of ad units to include in the response, used for paging.",
+       "format": "int32",
+       "minimum": "0",
+       "maximum": "10000",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.",
+       "location": "query"
+      }
+     },
+     "parameterOrder": [
+      "adClientId"
+     ],
+     "response": {
+      "$ref": "AdUnits"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/adsense",
+      "https://www.googleapis.com/auth/adsense.readonly"
+     ]
+    }
+   },
+   "resources": {
+    "customchannels": {
+     "methods": {
+      "list": {
+       "id": "adsense.adunits.customchannels.list",
+       "path": "adclients/{adClientId}/adunits/{adUnitId}/customchannels",
+       "httpMethod": "GET",
+       "description": "List all custom channels which the specified ad unit belongs to.",
+       "parameters": {
+        "adClientId": {
+         "type": "string",
+         "description": "Ad client which contains the ad unit.",
+         "required": true,
+         "location": "path"
+        },
+        "adUnitId": {
+         "type": "string",
+         "description": "Ad unit for which to list custom channels.",
+         "required": true,
+         "location": "path"
+        },
+        "maxResults": {
+         "type": "integer",
+         "description": "The maximum number of custom channels to include in the response, used for paging.",
+         "format": "int32",
+         "minimum": "0",
+         "maximum": "10000",
+         "location": "query"
+        },
+        "pageToken": {
+         "type": "string",
+         "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.",
+         "location": "query"
+        }
+       },
+       "parameterOrder": [
+        "adClientId",
+        "adUnitId"
+       ],
+       "response": {
+        "$ref": "CustomChannels"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/adsense",
+        "https://www.googleapis.com/auth/adsense.readonly"
+       ]
+      }
+     }
+    }
+   }
+  },
+  "alerts": {
+   "methods": {
+    "delete": {
+     "id": "adsense.alerts.delete",
+     "path": "alerts/{alertId}",
+     "httpMethod": "DELETE",
+     "description": "Dismiss (delete) the specified alert from the publisher's AdSense account.",
+     "parameters": {
+      "alertId": {
+       "type": "string",
+       "description": "Alert to delete.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "alertId"
+     ],
+     "scopes": [
+      "https://www.googleapis.com/auth/adsense"
+     ]
+    },
+    "list": {
+     "id": "adsense.alerts.list",
+     "path": "alerts",
+     "httpMethod": "GET",
+     "description": "List the alerts for this AdSense account.",
+     "parameters": {
+      "locale": {
+       "type": "string",
+       "description": "The locale to use for translating alert messages. The account locale will be used if this is not supplied. The AdSense default (English) will be used if the supplied locale is invalid or unsupported.",
+       "location": "query"
+      }
+     },
+     "response": {
+      "$ref": "Alerts"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/adsense",
+      "https://www.googleapis.com/auth/adsense.readonly"
+     ]
+    }
+   }
+  },
+  "customchannels": {
+   "methods": {
+    "get": {
+     "id": "adsense.customchannels.get",
+     "path": "adclients/{adClientId}/customchannels/{customChannelId}",
+     "httpMethod": "GET",
+     "description": "Get the specified custom channel from the specified ad client.",
+     "parameters": {
+      "adClientId": {
+       "type": "string",
+       "description": "Ad client which contains the custom channel.",
+       "required": true,
+       "location": "path"
+      },
+      "customChannelId": {
+       "type": "string",
+       "description": "Custom channel to retrieve.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "adClientId",
+      "customChannelId"
+     ],
+     "response": {
+      "$ref": "CustomChannel"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/adsense",
+      "https://www.googleapis.com/auth/adsense.readonly"
+     ]
+    },
+    "list": {
+     "id": "adsense.customchannels.list",
+     "path": "adclients/{adClientId}/customchannels",
+     "httpMethod": "GET",
+     "description": "List all custom channels in the specified ad client for this AdSense account.",
+     "parameters": {
+      "adClientId": {
+       "type": "string",
+       "description": "Ad client for which to list custom channels.",
+       "required": true,
+       "location": "path"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "The maximum number of custom channels to include in the response, used for paging.",
+       "format": "int32",
+       "minimum": "0",
+       "maximum": "10000",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.",
+       "location": "query"
+      }
+     },
+     "parameterOrder": [
+      "adClientId"
+     ],
+     "response": {
+      "$ref": "CustomChannels"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/adsense",
+      "https://www.googleapis.com/auth/adsense.readonly"
+     ]
+    }
+   },
+   "resources": {
+    "adunits": {
+     "methods": {
+      "list": {
+       "id": "adsense.customchannels.adunits.list",
+       "path": "adclients/{adClientId}/customchannels/{customChannelId}/adunits",
+       "httpMethod": "GET",
+       "description": "List all ad units in the specified custom channel.",
+       "parameters": {
+        "adClientId": {
+         "type": "string",
+         "description": "Ad client which contains the custom channel.",
+         "required": true,
+         "location": "path"
+        },
+        "customChannelId": {
+         "type": "string",
+         "description": "Custom channel for which to list ad units.",
+         "required": true,
+         "location": "path"
+        },
+        "includeInactive": {
+         "type": "boolean",
+         "description": "Whether to include inactive ad units. Default: true.",
+         "location": "query"
+        },
+        "maxResults": {
+         "type": "integer",
+         "description": "The maximum number of ad units to include in the response, used for paging.",
+         "format": "int32",
+         "minimum": "0",
+         "maximum": "10000",
+         "location": "query"
+        },
+        "pageToken": {
+         "type": "string",
+         "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.",
+         "location": "query"
+        }
+       },
+       "parameterOrder": [
+        "adClientId",
+        "customChannelId"
+       ],
+       "response": {
+        "$ref": "AdUnits"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/adsense",
+        "https://www.googleapis.com/auth/adsense.readonly"
+       ]
+      }
+     }
+    }
+   }
+  },
+  "metadata": {
+   "resources": {
+    "dimensions": {
+     "methods": {
+      "list": {
+       "id": "adsense.metadata.dimensions.list",
+       "path": "metadata/dimensions",
+       "httpMethod": "GET",
+       "description": "List the metadata for the dimensions available to this AdSense account.",
+       "response": {
+        "$ref": "Metadata"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/adsense",
+        "https://www.googleapis.com/auth/adsense.readonly"
+       ]
+      }
+     }
+    },
+    "metrics": {
+     "methods": {
+      "list": {
+       "id": "adsense.metadata.metrics.list",
+       "path": "metadata/metrics",
+       "httpMethod": "GET",
+       "description": "List the metadata for the metrics available to this AdSense account.",
+       "response": {
+        "$ref": "Metadata"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/adsense",
+        "https://www.googleapis.com/auth/adsense.readonly"
+       ]
+      }
+     }
+    }
+   }
+  },
+  "payments": {
+   "methods": {
+    "list": {
+     "id": "adsense.payments.list",
+     "path": "payments",
+     "httpMethod": "GET",
+     "description": "List the payments for this AdSense account.",
+     "response": {
+      "$ref": "Payments"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/adsense",
+      "https://www.googleapis.com/auth/adsense.readonly"
+     ]
+    }
+   }
+  },
+  "reports": {
+   "methods": {
+    "generate": {
+     "id": "adsense.reports.generate",
+     "path": "reports",
+     "httpMethod": "GET",
+     "description": "Generate an AdSense report based on the report request sent in the query parameters. Returns the result as JSON; to retrieve output in CSV format specify \"alt=csv\" as a query parameter.",
+     "parameters": {
+      "accountId": {
+       "type": "string",
+       "description": "Accounts upon which to report.",
+       "repeated": true,
+       "location": "query"
+      },
+      "currency": {
+       "type": "string",
+       "description": "Optional currency to use when reporting on monetary metrics. Defaults to the account's currency if not set.",
+       "pattern": "[a-zA-Z]+",
+       "location": "query"
+      },
+      "dimension": {
+       "type": "string",
+       "description": "Dimensions to base the report on.",
+       "pattern": "[a-zA-Z_]+",
+       "repeated": true,
+       "location": "query"
+      },
+      "endDate": {
+       "type": "string",
+       "description": "End of the date range to report on in \"YYYY-MM-DD\" format, inclusive.",
+       "required": true,
+       "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,2}?)",
+       "location": "query"
+      },
+      "filter": {
+       "type": "string",
+       "description": "Filters to be run on the report.",
+       "pattern": "[a-zA-Z_]+(==|=@).+",
+       "repeated": true,
+       "location": "query"
+      },
+      "locale": {
+       "type": "string",
+       "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.",
+       "pattern": "[a-zA-Z_]+",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "The maximum number of rows of report data to return.",
+       "format": "int32",
+       "minimum": "0",
+       "maximum": "50000",
+       "location": "query"
+      },
+      "metric": {
+       "type": "string",
+       "description": "Numeric columns to include in the report.",
+       "pattern": "[a-zA-Z_]+",
+       "repeated": true,
+       "location": "query"
+      },
+      "sort": {
+       "type": "string",
+       "description": "The name of a dimension or metric to sort the resulting report on, optionally prefixed with \"+\" to sort ascending or \"-\" to sort descending. If no prefix is specified, the column is sorted ascending.",
+       "pattern": "(\\+|-)?[a-zA-Z_]+",
+       "repeated": true,
+       "location": "query"
+      },
+      "startDate": {
+       "type": "string",
+       "description": "Start of the date range to report on in \"YYYY-MM-DD\" format, inclusive.",
+       "required": true,
+       "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,2}?)",
+       "location": "query"
+      },
+      "startIndex": {
+       "type": "integer",
+       "description": "Index of the first row of report data to return.",
+       "format": "int32",
+       "minimum": "0",
+       "maximum": "5000",
+       "location": "query"
+      },
+      "useTimezoneReporting": {
+       "type": "boolean",
+       "description": "Whether the report should be generated in the AdSense account's local timezone. If false default PST/PDT timezone will be used.",
+       "location": "query"
+      }
+     },
+     "parameterOrder": [
+      "startDate",
+      "endDate"
+     ],
+     "response": {
+      "$ref": "AdsenseReportsGenerateResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/adsense",
+      "https://www.googleapis.com/auth/adsense.readonly"
+     ],
+     "supportsMediaDownload": true
+    }
+   },
+   "resources": {
+    "saved": {
+     "methods": {
+      "generate": {
+       "id": "adsense.reports.saved.generate",
+       "path": "reports/{savedReportId}",
+       "httpMethod": "GET",
+       "description": "Generate an AdSense report based on the saved report ID sent in the query parameters.",
+       "parameters": {
+        "locale": {
+         "type": "string",
+         "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.",
+         "pattern": "[a-zA-Z_]+",
+         "location": "query"
+        },
+        "maxResults": {
+         "type": "integer",
+         "description": "The maximum number of rows of report data to return.",
+         "format": "int32",
+         "minimum": "0",
+         "maximum": "50000",
+         "location": "query"
+        },
+        "savedReportId": {
+         "type": "string",
+         "description": "The saved report to retrieve.",
+         "required": true,
+         "location": "path"
+        },
+        "startIndex": {
+         "type": "integer",
+         "description": "Index of the first row of report data to return.",
+         "format": "int32",
+         "minimum": "0",
+         "maximum": "5000",
+         "location": "query"
+        }
+       },
+       "parameterOrder": [
+        "savedReportId"
+       ],
+       "response": {
+        "$ref": "AdsenseReportsGenerateResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/adsense",
+        "https://www.googleapis.com/auth/adsense.readonly"
+       ]
+      },
+      "list": {
+       "id": "adsense.reports.saved.list",
+       "path": "reports/saved",
+       "httpMethod": "GET",
+       "description": "List all saved reports in this AdSense account.",
+       "parameters": {
+        "maxResults": {
+         "type": "integer",
+         "description": "The maximum number of saved reports to include in the response, used for paging.",
+         "format": "int32",
+         "minimum": "0",
+         "maximum": "100",
+         "location": "query"
+        },
+        "pageToken": {
+         "type": "string",
+         "description": "A continuation token, used to page through saved reports. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.",
+         "location": "query"
+        }
+       },
+       "response": {
+        "$ref": "SavedReports"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/adsense",
+        "https://www.googleapis.com/auth/adsense.readonly"
+       ]
+      }
+     }
+    }
+   }
+  },
+  "savedadstyles": {
+   "methods": {
+    "get": {
+     "id": "adsense.savedadstyles.get",
+     "path": "savedadstyles/{savedAdStyleId}",
+     "httpMethod": "GET",
+     "description": "Get a specific saved ad style from the user's account.",
+     "parameters": {
+      "savedAdStyleId": {
+       "type": "string",
+       "description": "Saved ad style to retrieve.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "savedAdStyleId"
+     ],
+     "response": {
+      "$ref": "SavedAdStyle"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/adsense",
+      "https://www.googleapis.com/auth/adsense.readonly"
+     ]
+    },
+    "list": {
+     "id": "adsense.savedadstyles.list",
+     "path": "savedadstyles",
+     "httpMethod": "GET",
+     "description": "List all saved ad styles in the user's account.",
+     "parameters": {
+      "maxResults": {
+       "type": "integer",
+       "description": "The maximum number of saved ad styles to include in the response, used for paging.",
+       "format": "int32",
+       "minimum": "0",
+       "maximum": "10000",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "A continuation token, used to page through saved ad styles. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.",
+       "location": "query"
+      }
+     },
+     "response": {
+      "$ref": "SavedAdStyles"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/adsense",
+      "https://www.googleapis.com/auth/adsense.readonly"
+     ]
+    }
+   }
+  },
+  "urlchannels": {
+   "methods": {
+    "list": {
+     "id": "adsense.urlchannels.list",
+     "path": "adclients/{adClientId}/urlchannels",
+     "httpMethod": "GET",
+     "description": "List all URL channels in the specified ad client for this AdSense account.",
+     "parameters": {
+      "adClientId": {
+       "type": "string",
+       "description": "Ad client for which to list URL channels.",
+       "required": true,
+       "location": "path"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "The maximum number of URL channels to include in the response, used for paging.",
+       "format": "int32",
+       "minimum": "0",
+       "maximum": "10000",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "A continuation token, used to page through URL channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.",
+       "location": "query"
+      }
+     },
+     "parameterOrder": [
+      "adClientId"
+     ],
+     "response": {
+      "$ref": "UrlChannels"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/adsense",
+      "https://www.googleapis.com/auth/adsense.readonly"
+     ]
+    }
+   }
+  }
+ }
+}
diff --git a/adsense/v1.4/adsense-gen.go b/adsense/v1.4/adsense-gen.go
new file mode 100644
index 0000000..7250c69
--- /dev/null
+++ b/adsense/v1.4/adsense-gen.go
@@ -0,0 +1,4683 @@
+// Package adsense provides access to the AdSense Management API.
+//
+// See https://developers.google.com/adsense/management/
+//
+// Usage example:
+//
+//   import "code.google.com/p/google-api-go-client/adsense/v1.4"
+//   ...
+//   adsenseService, err := adsense.New(oauthHttpClient)
+package adsense
+
+import (
+	"bytes"
+	"code.google.com/p/google-api-go-client/googleapi"
+	"encoding/json"
+	"errors"
+	"fmt"
+	"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
+
+const apiId = "adsense:v1.4"
+const apiName = "adsense"
+const apiVersion = "v1.4"
+const basePath = "https://www.googleapis.com/adsense/v1.4/"
+
+// OAuth2 scopes used by this API.
+const (
+	// View and manage your AdSense data
+	AdsenseScope = "https://www.googleapis.com/auth/adsense"
+
+	// View your AdSense data
+	AdsenseReadonlyScope = "https://www.googleapis.com/auth/adsense.readonly"
+)
+
+func New(client *http.Client) (*Service, error) {
+	if client == nil {
+		return nil, errors.New("client is nil")
+	}
+	s := &Service{client: client}
+	s.Accounts = NewAccountsService(s)
+	s.Adclients = NewAdclientsService(s)
+	s.Adunits = NewAdunitsService(s)
+	s.Alerts = NewAlertsService(s)
+	s.Customchannels = NewCustomchannelsService(s)
+	s.Metadata = NewMetadataService(s)
+	s.Payments = NewPaymentsService(s)
+	s.Reports = NewReportsService(s)
+	s.Savedadstyles = NewSavedadstylesService(s)
+	s.Urlchannels = NewUrlchannelsService(s)
+	return s, nil
+}
+
+type Service struct {
+	client *http.Client
+
+	Accounts *AccountsService
+
+	Adclients *AdclientsService
+
+	Adunits *AdunitsService
+
+	Alerts *AlertsService
+
+	Customchannels *CustomchannelsService
+
+	Metadata *MetadataService
+
+	Payments *PaymentsService
+
+	Reports *ReportsService
+
+	Savedadstyles *SavedadstylesService
+
+	Urlchannels *UrlchannelsService
+}
+
+func NewAccountsService(s *Service) *AccountsService {
+	rs := &AccountsService{s: s}
+	rs.Adclients = NewAccountsAdclientsService(s)
+	rs.Adunits = NewAccountsAdunitsService(s)
+	rs.Alerts = NewAccountsAlertsService(s)
+	rs.Customchannels = NewAccountsCustomchannelsService(s)
+	rs.Payments = NewAccountsPaymentsService(s)
+	rs.Reports = NewAccountsReportsService(s)
+	rs.Savedadstyles = NewAccountsSavedadstylesService(s)
+	rs.Urlchannels = NewAccountsUrlchannelsService(s)
+	return rs
+}
+
+type AccountsService struct {
+	s *Service
+
+	Adclients *AccountsAdclientsService
+
+	Adunits *AccountsAdunitsService
+
+	Alerts *AccountsAlertsService
+
+	Customchannels *AccountsCustomchannelsService
+
+	Payments *AccountsPaymentsService
+
+	Reports *AccountsReportsService
+
+	Savedadstyles *AccountsSavedadstylesService
+
+	Urlchannels *AccountsUrlchannelsService
+}
+
+func NewAccountsAdclientsService(s *Service) *AccountsAdclientsService {
+	rs := &AccountsAdclientsService{s: s}
+	return rs
+}
+
+type AccountsAdclientsService struct {
+	s *Service
+}
+
+func NewAccountsAdunitsService(s *Service) *AccountsAdunitsService {
+	rs := &AccountsAdunitsService{s: s}
+	rs.Customchannels = NewAccountsAdunitsCustomchannelsService(s)
+	return rs
+}
+
+type AccountsAdunitsService struct {
+	s *Service
+
+	Customchannels *AccountsAdunitsCustomchannelsService
+}
+
+func NewAccountsAdunitsCustomchannelsService(s *Service) *AccountsAdunitsCustomchannelsService {
+	rs := &AccountsAdunitsCustomchannelsService{s: s}
+	return rs
+}
+
+type AccountsAdunitsCustomchannelsService struct {
+	s *Service
+}
+
+func NewAccountsAlertsService(s *Service) *AccountsAlertsService {
+	rs := &AccountsAlertsService{s: s}
+	return rs
+}
+
+type AccountsAlertsService struct {
+	s *Service
+}
+
+func NewAccountsCustomchannelsService(s *Service) *AccountsCustomchannelsService {
+	rs := &AccountsCustomchannelsService{s: s}
+	rs.Adunits = NewAccountsCustomchannelsAdunitsService(s)
+	return rs
+}
+
+type AccountsCustomchannelsService struct {
+	s *Service
+
+	Adunits *AccountsCustomchannelsAdunitsService
+}
+
+func NewAccountsCustomchannelsAdunitsService(s *Service) *AccountsCustomchannelsAdunitsService {
+	rs := &AccountsCustomchannelsAdunitsService{s: s}
+	return rs
+}
+
+type AccountsCustomchannelsAdunitsService struct {
+	s *Service
+}
+
+func NewAccountsPaymentsService(s *Service) *AccountsPaymentsService {
+	rs := &AccountsPaymentsService{s: s}
+	return rs
+}
+
+type AccountsPaymentsService struct {
+	s *Service
+}
+
+func NewAccountsReportsService(s *Service) *AccountsReportsService {
+	rs := &AccountsReportsService{s: s}
+	rs.Saved = NewAccountsReportsSavedService(s)
+	return rs
+}
+
+type AccountsReportsService struct {
+	s *Service
+
+	Saved *AccountsReportsSavedService
+}
+
+func NewAccountsReportsSavedService(s *Service) *AccountsReportsSavedService {
+	rs := &AccountsReportsSavedService{s: s}
+	return rs
+}
+
+type AccountsReportsSavedService struct {
+	s *Service
+}
+
+func NewAccountsSavedadstylesService(s *Service) *AccountsSavedadstylesService {
+	rs := &AccountsSavedadstylesService{s: s}
+	return rs
+}
+
+type AccountsSavedadstylesService struct {
+	s *Service
+}
+
+func NewAccountsUrlchannelsService(s *Service) *AccountsUrlchannelsService {
+	rs := &AccountsUrlchannelsService{s: s}
+	return rs
+}
+
+type AccountsUrlchannelsService struct {
+	s *Service
+}
+
+func NewAdclientsService(s *Service) *AdclientsService {
+	rs := &AdclientsService{s: s}
+	return rs
+}
+
+type AdclientsService struct {
+	s *Service
+}
+
+func NewAdunitsService(s *Service) *AdunitsService {
+	rs := &AdunitsService{s: s}
+	rs.Customchannels = NewAdunitsCustomchannelsService(s)
+	return rs
+}
+
+type AdunitsService struct {
+	s *Service
+
+	Customchannels *AdunitsCustomchannelsService
+}
+
+func NewAdunitsCustomchannelsService(s *Service) *AdunitsCustomchannelsService {
+	rs := &AdunitsCustomchannelsService{s: s}
+	return rs
+}
+
+type AdunitsCustomchannelsService struct {
+	s *Service
+}
+
+func NewAlertsService(s *Service) *AlertsService {
+	rs := &AlertsService{s: s}
+	return rs
+}
+
+type AlertsService struct {
+	s *Service
+}
+
+func NewCustomchannelsService(s *Service) *CustomchannelsService {
+	rs := &CustomchannelsService{s: s}
+	rs.Adunits = NewCustomchannelsAdunitsService(s)
+	return rs
+}
+
+type CustomchannelsService struct {
+	s *Service
+
+	Adunits *CustomchannelsAdunitsService
+}
+
+func NewCustomchannelsAdunitsService(s *Service) *CustomchannelsAdunitsService {
+	rs := &CustomchannelsAdunitsService{s: s}
+	return rs
+}
+
+type CustomchannelsAdunitsService struct {
+	s *Service
+}
+
+func NewMetadataService(s *Service) *MetadataService {
+	rs := &MetadataService{s: s}
+	rs.Dimensions = NewMetadataDimensionsService(s)
+	rs.Metrics = NewMetadataMetricsService(s)
+	return rs
+}
+
+type MetadataService struct {
+	s *Service
+
+	Dimensions *MetadataDimensionsService
+
+	Metrics *MetadataMetricsService
+}
+
+func NewMetadataDimensionsService(s *Service) *MetadataDimensionsService {
+	rs := &MetadataDimensionsService{s: s}
+	return rs
+}
+
+type MetadataDimensionsService struct {
+	s *Service
+}
+
+func NewMetadataMetricsService(s *Service) *MetadataMetricsService {
+	rs := &MetadataMetricsService{s: s}
+	return rs
+}
+
+type MetadataMetricsService struct {
+	s *Service
+}
+
+func NewPaymentsService(s *Service) *PaymentsService {
+	rs := &PaymentsService{s: s}
+	return rs
+}
+
+type PaymentsService struct {
+	s *Service
+}
+
+func NewReportsService(s *Service) *ReportsService {
+	rs := &ReportsService{s: s}
+	rs.Saved = NewReportsSavedService(s)
+	return rs
+}
+
+type ReportsService struct {
+	s *Service
+
+	Saved *ReportsSavedService
+}
+
+func NewReportsSavedService(s *Service) *ReportsSavedService {
+	rs := &ReportsSavedService{s: s}
+	return rs
+}
+
+type ReportsSavedService struct {
+	s *Service
+}
+
+func NewSavedadstylesService(s *Service) *SavedadstylesService {
+	rs := &SavedadstylesService{s: s}
+	return rs
+}
+
+type SavedadstylesService struct {
+	s *Service
+}
+
+func NewUrlchannelsService(s *Service) *UrlchannelsService {
+	rs := &UrlchannelsService{s: s}
+	return rs
+}
+
+type UrlchannelsService struct {
+	s *Service
+}
+
+type Account struct {
+	// Id: Unique identifier of this account.
+	Id string `json:"id,omitempty"`
+
+	// Kind: Kind of resource this is, in this case adsense#account.
+	Kind string `json:"kind,omitempty"`
+
+	// Name: Name of this account.
+	Name string `json:"name,omitempty"`
+
+	// Premium: Whether this account is premium.
+	Premium bool `json:"premium,omitempty"`
+
+	// SubAccounts: Sub accounts of the this account.
+	SubAccounts []*Account `json:"subAccounts,omitempty"`
+
+	// Timezone: AdSense timezone of this account.
+	Timezone string `json:"timezone,omitempty"`
+}
+
+type Accounts struct {
+	// Etag: ETag of this response for caching purposes.
+	Etag string `json:"etag,omitempty"`
+
+	// Items: The accounts returned in this list response.
+	Items []*Account `json:"items,omitempty"`
+
+	// Kind: Kind of list this is, in this case adsense#accounts.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: Continuation token used to page through accounts. To
+	// retrieve the next page of results, set the next request's "pageToken"
+	// value to this.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+}
+
+type AdClient struct {
+	// ArcOptIn: Whether this ad client is opted in to ARC.
+	ArcOptIn bool `json:"arcOptIn,omitempty"`
+
+	// ArcReviewMode: ARC review mode this ad client is in. Empty if the
+	// client is not opted in to ARC. Possible values: POST_REVIEW,
+	// AUTOMATIC_PRE_REVIEW.
+	ArcReviewMode string `json:"arcReviewMode,omitempty"`
+
+	// Id: Unique identifier of this ad client.
+	Id string `json:"id,omitempty"`
+
+	// Kind: Kind of resource this is, in this case adsense#adClient.
+	Kind string `json:"kind,omitempty"`
+
+	// ProductCode: This ad client's product code, which corresponds to the
+	// PRODUCT_CODE report dimension.
+	ProductCode string `json:"productCode,omitempty"`
+
+	// SupportsReporting: Whether this ad client supports being reported on.
+	SupportsReporting bool `json:"supportsReporting,omitempty"`
+}
+
+type AdClients struct {
+	// Etag: ETag of this response for caching purposes.
+	Etag string `json:"etag,omitempty"`
+
+	// Items: The ad clients returned in this list response.
+	Items []*AdClient `json:"items,omitempty"`
+
+	// Kind: Kind of list this is, in this case adsense#adClients.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: Continuation token used to page through ad clients. To
+	// retrieve the next page of results, set the next request's "pageToken"
+	// value to this.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+}
+
+type AdCode struct {
+	// AdCode: The ad code snippet.
+	AdCode string `json:"adCode,omitempty"`
+
+	// Kind: Kind this is, in this case adsense#adCode.
+	Kind string `json:"kind,omitempty"`
+}
+
+type AdStyle struct {
+	// Colors: The colors which are included in the style. These are
+	// represented as six hexadecimal characters, similar to HTML color
+	// codes, but without the leading hash.
+	Colors *AdStyleColors `json:"colors,omitempty"`
+
+	// Corners: The style of the corners in the ad.
+	Corners string `json:"corners,omitempty"`
+
+	// Font: The font which is included in the style.
+	Font *AdStyleFont `json:"font,omitempty"`
+
+	// Kind: Kind this is, in this case adsense#adStyle.
+	Kind string `json:"kind,omitempty"`
+}
+
+type AdStyleColors struct {
+	// Background: The color of the ad background.
+	Background string `json:"background,omitempty"`
+
+	// Border: The color of the ad border.
+	Border string `json:"border,omitempty"`
+
+	// Text: The color of the ad text.
+	Text string `json:"text,omitempty"`
+
+	// Title: The color of the ad title.
+	Title string `json:"title,omitempty"`
+
+	// Url: The color of the ad url.
+	Url string `json:"url,omitempty"`
+}
+
+type AdStyleFont struct {
+	// Family: The family of the font.
+	Family string `json:"family,omitempty"`
+
+	// Size: The size of the font.
+	Size string `json:"size,omitempty"`
+}
+
+type AdUnit struct {
+	// Code: Identity code of this ad unit, not necessarily unique across ad
+	// clients.
+	Code string `json:"code,omitempty"`
+
+	// ContentAdsSettings: Settings specific to content ads (AFC) and
+	// highend mobile content ads (AFMC).
+	ContentAdsSettings *AdUnitContentAdsSettings `json:"contentAdsSettings,omitempty"`
+
+	// CustomStyle: Custom style information specific to this ad unit.
+	CustomStyle *AdStyle `json:"customStyle,omitempty"`
+
+	// FeedAdsSettings: Settings specific to feed ads (AFF).
+	FeedAdsSettings *AdUnitFeedAdsSettings `json:"feedAdsSettings,omitempty"`
+
+	// Id: Unique identifier of this ad unit. This should be considered an
+	// opaque identifier; it is not safe to rely on it being in any
+	// particular format.
+	Id string `json:"id,omitempty"`
+
+	// Kind: Kind of resource this is, in this case adsense#adUnit.
+	Kind string `json:"kind,omitempty"`
+
+	// MobileContentAdsSettings: Settings specific to WAP mobile content ads
+	// (AFMC).
+	MobileContentAdsSettings *AdUnitMobileContentAdsSettings `json:"mobileContentAdsSettings,omitempty"`
+
+	// Name: Name of this ad unit.
+	Name string `json:"name,omitempty"`
+
+	// SavedStyleId: ID of the saved ad style which holds this ad unit's
+	// style information.
+	SavedStyleId string `json:"savedStyleId,omitempty"`
+
+	// Status: Status of this ad unit. Possible values are:
+	// NEW: Indicates
+	// that the ad unit was created within the last seven days and does not
+	// yet have any activity associated with it.
+	//
+	// ACTIVE: Indicates that
+	// there has been activity on this ad unit in the last seven
+	// days.
+	//
+	// INACTIVE: Indicates that there has been no activity on this ad
+	// unit in the last seven days.
+	Status string `json:"status,omitempty"`
+}
+
+type AdUnitContentAdsSettings struct {
+	// BackupOption: The backup option to be used in instances where no ad
+	// is available.
+	BackupOption *AdUnitContentAdsSettingsBackupOption `json:"backupOption,omitempty"`
+
+	// Size: Size of this ad unit.
+	Size string `json:"size,omitempty"`
+
+	// Type: Type of this ad unit.
+	Type string `json:"type,omitempty"`
+}
+
+type AdUnitContentAdsSettingsBackupOption struct {
+	// Color: Color to use when type is set to COLOR.
+	Color string `json:"color,omitempty"`
+
+	// Type: Type of the backup option. Possible values are BLANK, COLOR and
+	// URL.
+	Type string `json:"type,omitempty"`
+
+	// Url: URL to use when type is set to URL.
+	Url string `json:"url,omitempty"`
+}
+
+type AdUnitFeedAdsSettings struct {
+	// AdPosition: The position of the ads relative to the feed entries.
+	AdPosition string `json:"adPosition,omitempty"`
+
+	// Frequency: The frequency at which ads should appear in the feed (i.e.
+	// every N entries).
+	Frequency int64 `json:"frequency,omitempty"`
+
+	// MinimumWordCount: The minimum length an entry should be in order to
+	// have attached ads.
+	MinimumWordCount int64 `json:"minimumWordCount,omitempty"`
+
+	// Type: The type of ads which should appear.
+	Type string `json:"type,omitempty"`
+}
+
+type AdUnitMobileContentAdsSettings struct {
+	// MarkupLanguage: The markup language to use for this ad unit.
+	MarkupLanguage string `json:"markupLanguage,omitempty"`
+
+	// ScriptingLanguage: The scripting language to use for this ad unit.
+	ScriptingLanguage string `json:"scriptingLanguage,omitempty"`
+
+	// Size: Size of this ad unit.
+	Size string `json:"size,omitempty"`
+
+	// Type: Type of this ad unit.
+	Type string `json:"type,omitempty"`
+}
+
+type AdUnits struct {
+	// Etag: ETag of this response for caching purposes.
+	Etag string `json:"etag,omitempty"`
+
+	// Items: The ad units returned in this list response.
+	Items []*AdUnit `json:"items,omitempty"`
+
+	// Kind: Kind of list this is, in this case adsense#adUnits.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: Continuation token used to page through ad units. To
+	// retrieve the next page of results, set the next request's "pageToken"
+	// value to this.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+}
+
+type AdsenseReportsGenerateResponse struct {
+	// Averages: The averages of the report. This is the same length as any
+	// other row in the report; cells corresponding to dimension columns are
+	// empty.
+	Averages []string `json:"averages,omitempty"`
+
+	// EndDate: The requested end date in yyyy-mm-dd format.
+	EndDate string `json:"endDate,omitempty"`
+
+	// Headers: The header information of the columns requested in the
+	// report. This is a list of headers; one for each dimension in the
+	// request, followed by one for each metric in the request.
+	Headers []*AdsenseReportsGenerateResponseHeaders `json:"headers,omitempty"`
+
+	// Kind: Kind this is, in this case adsense#report.
+	Kind string `json:"kind,omitempty"`
+
+	// Rows: The output rows of the report. Each row is a list of cells; one
+	// for each dimension in the request, followed by one for each metric in
+	// the request. The dimension cells contain strings, and the metric
+	// cells contain numbers.
+	Rows [][]string `json:"rows,omitempty"`
+
+	// StartDate: The requested start date in yyyy-mm-dd format.
+	StartDate string `json:"startDate,omitempty"`
+
+	// TotalMatchedRows: The total number of rows matched by the report
+	// request. Fewer rows may be returned in the response due to being
+	// limited by the row count requested or the report row limit.
+	TotalMatchedRows int64 `json:"totalMatchedRows,omitempty,string"`
+
+	// Totals: The totals of the report. This is the same length as any
+	// other row in the report; cells corresponding to dimension columns are
+	// empty.
+	Totals []string `json:"totals,omitempty"`
+
+	// Warnings: Any warnings associated with generation of the report.
+	Warnings []string `json:"warnings,omitempty"`
+}
+
+type AdsenseReportsGenerateResponseHeaders struct {
+	// Currency: The currency of this column. Only present if the header
+	// type is METRIC_CURRENCY.
+	Currency string `json:"currency,omitempty"`
+
+	// Name: The name of the header.
+	Name string `json:"name,omitempty"`
+
+	// Type: The type of the header; one of DIMENSION, METRIC_TALLY,
+	// METRIC_RATIO, or METRIC_CURRENCY.
+	Type string `json:"type,omitempty"`
+}
+
+type Alert struct {
+	// Id: Unique identifier of this alert. This should be considered an
+	// opaque identifier; it is not safe to rely on it being in any
+	// particular format.
+	Id string `json:"id,omitempty"`
+
+	// IsDismissible: Whether this alert can be dismissed.
+	IsDismissible bool `json:"isDismissible,omitempty"`
+
+	// Kind: Kind of resource this is, in this case adsense#alert.
+	Kind string `json:"kind,omitempty"`
+
+	// Message: The localized alert message.
+	Message string `json:"message,omitempty"`
+
+	// Severity: Severity of this alert. Possible values: INFO, WARNING,
+	// SEVERE.
+	Severity string `json:"severity,omitempty"`
+
+	// Type: Type of this alert. Possible values: SELF_HOLD,
+	// MIGRATED_TO_BILLING3, ADDRESS_PIN_VERIFICATION,
+	// PHONE_PIN_VERIFICATION, CORPORATE_ENTITY, GRAYLISTED_PUBLISHER,
+	// API_HOLD.
+	Type string `json:"type,omitempty"`
+}
+
+type Alerts struct {
+	// Items: The alerts returned in this list response.
+	Items []*Alert `json:"items,omitempty"`
+
+	// Kind: Kind of list this is, in this case adsense#alerts.
+	Kind string `json:"kind,omitempty"`
+}
+
+type CustomChannel struct {
+	// Code: Code of this custom channel, not necessarily unique across ad
+	// clients.
+	Code string `json:"code,omitempty"`
+
+	// Id: Unique identifier of this custom channel. This should be
+	// considered an opaque identifier; it is not safe to rely on it being
+	// in any particular format.
+	Id string `json:"id,omitempty"`
+
+	// Kind: Kind of resource this is, in this case adsense#customChannel.
+	Kind string `json:"kind,omitempty"`
+
+	// Name: Name of this custom channel.
+	Name string `json:"name,omitempty"`
+
+	// TargetingInfo: The targeting information of this custom channel, if
+	// activated.
+	TargetingInfo *CustomChannelTargetingInfo `json:"targetingInfo,omitempty"`
+}
+
+type CustomChannelTargetingInfo struct {
+	// AdsAppearOn: The name used to describe this channel externally.
+	AdsAppearOn string `json:"adsAppearOn,omitempty"`
+
+	// Description: The external description of the channel.
+	Description string `json:"description,omitempty"`
+
+	// Location: The locations in which ads appear. (Only valid for content
+	// and mobile content ads). Acceptable values for content ads are:
+	// TOP_LEFT, TOP_CENTER, TOP_RIGHT, MIDDLE_LEFT, MIDDLE_CENTER,
+	// MIDDLE_RIGHT, BOTTOM_LEFT, BOTTOM_CENTER, BOTTOM_RIGHT,
+	// MULTIPLE_LOCATIONS. Acceptable values for mobile content ads are:
+	// TOP, MIDDLE, BOTTOM, MULTIPLE_LOCATIONS.
+	Location string `json:"location,omitempty"`
+
+	// SiteLanguage: The language of the sites ads will be displayed on.
+	SiteLanguage string `json:"siteLanguage,omitempty"`
+}
+
+type CustomChannels struct {
+	// Etag: ETag of this response for caching purposes.
+	Etag string `json:"etag,omitempty"`
+
+	// Items: The custom channels returned in this list response.
+	Items []*CustomChannel `json:"items,omitempty"`
+
+	// Kind: Kind of list this is, in this case adsense#customChannels.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: Continuation token used to page through custom
+	// channels. To retrieve the next page of results, set the next
+	// request's "pageToken" value to this.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+}
+
+type Metadata struct {
+	Items []*ReportingMetadataEntry `json:"items,omitempty"`
+
+	// Kind: Kind of list this is, in this case adsense#metadata.
+	Kind string `json:"kind,omitempty"`
+}
+
+type Payment struct {
+	// Id: Unique identifier of this Payment.
+	Id string `json:"id,omitempty"`
+
+	// Kind: Kind of resource this is, in this case adsense#payment.
+	Kind string `json:"kind,omitempty"`
+
+	// PaymentAmount: The amount to be paid.
+	PaymentAmount string `json:"paymentAmount,omitempty"`
+
+	// PaymentAmountCurrencyCode: The currency code for the amount to be
+	// paid.
+	PaymentAmountCurrencyCode string `json:"paymentAmountCurrencyCode,omitempty"`
+
+	// PaymentDate: The date this payment was/will be credited to the user,
+	// or none if the payment threshold has not been met.
+	PaymentDate string `json:"paymentDate,omitempty"`
+}
+
+type Payments struct {
+	// Items: The list of Payments for the account. One or both of a) the
+	// account's most recent payment; and b) the account's upcoming payment.
+	Items []*Payment `json:"items,omitempty"`
+
+	// Kind: Kind of list this is, in this case adsense#payments.
+	Kind string `json:"kind,omitempty"`
+}
+
+type ReportingMetadataEntry struct {
+	// CompatibleDimensions: For metrics this is a list of dimension IDs
+	// which the metric is compatible with, for dimensions it is a list of
+	// compatibility groups the dimension belongs to.
+	CompatibleDimensions []string `json:"compatibleDimensions,omitempty"`
+
+	// CompatibleMetrics: The names of the metrics the dimension or metric
+	// this reporting metadata entry describes is compatible with.
+	CompatibleMetrics []string `json:"compatibleMetrics,omitempty"`
+
+	// Id: Unique identifier of this reporting metadata entry, corresponding
+	// to the name of the appropriate dimension or metric.
+	Id string `json:"id,omitempty"`
+
+	// Kind: Kind of resource this is, in this case
+	// adsense#reportingMetadataEntry.
+	Kind string `json:"kind,omitempty"`
+
+	// RequiredDimensions: The names of the dimensions which the dimension
+	// or metric this reporting metadata entry describes requires to also be
+	// present in order for the report to be valid. Omitting these will not
+	// cause an error or warning, but may result in data which cannot be
+	// correctly interpreted.
+	RequiredDimensions []string `json:"requiredDimensions,omitempty"`
+
+	// RequiredMetrics: The names of the metrics which the dimension or
+	// metric this reporting metadata entry describes requires to also be
+	// present in order for the report to be valid. Omitting these will not
+	// cause an error or warning, but may result in data which cannot be
+	// correctly interpreted.
+	RequiredMetrics []string `json:"requiredMetrics,omitempty"`
+
+	// SupportedProducts: The codes of the projects supported by the
+	// dimension or metric this reporting metadata entry describes.
+	SupportedProducts []string `json:"supportedProducts,omitempty"`
+}
+
+type SavedAdStyle struct {
+	// AdStyle: The AdStyle itself.
+	AdStyle *AdStyle `json:"adStyle,omitempty"`
+
+	// Id: Unique identifier of this saved ad style. This should be
+	// considered an opaque identifier; it is not safe to rely on it being
+	// in any particular format.
+	Id string `json:"id,omitempty"`
+
+	// Kind: Kind of resource this is, in this case adsense#savedAdStyle.
+	Kind string `json:"kind,omitempty"`
+
+	// Name: The user selected name of this SavedAdStyle.
+	Name string `json:"name,omitempty"`
+}
+
+type SavedAdStyles struct {
+	// Etag: ETag of this response for caching purposes.
+	Etag string `json:"etag,omitempty"`
+
+	// Items: The saved ad styles returned in this list response.
+	Items []*SavedAdStyle `json:"items,omitempty"`
+
+	// Kind: Kind of list this is, in this case adsense#savedAdStyles.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: Continuation token used to page through ad units. To
+	// retrieve the next page of results, set the next request's "pageToken"
+	// value to this.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+}
+
+type SavedReport struct {
+	// Id: Unique identifier of this saved report.
+	Id string `json:"id,omitempty"`
+
+	// Kind: Kind of resource this is, in this case adsense#savedReport.
+	Kind string `json:"kind,omitempty"`
+
+	// Name: This saved report's name.
+	Name string `json:"name,omitempty"`
+}
+
+type SavedReports struct {
+	// Etag: ETag of this response for caching purposes.
+	Etag string `json:"etag,omitempty"`
+
+	// Items: The saved reports returned in this list response.
+	Items []*SavedReport `json:"items,omitempty"`
+
+	// Kind: Kind of list this is, in this case adsense#savedReports.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: Continuation token used to page through saved reports.
+	// To retrieve the next page of results, set the next request's
+	// "pageToken" value to this.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+}
+
+type UrlChannel struct {
+	// Id: Unique identifier of this URL channel. This should be considered
+	// an opaque identifier; it is not safe to rely on it being in any
+	// particular format.
+	Id string `json:"id,omitempty"`
+
+	// Kind: Kind of resource this is, in this case adsense#urlChannel.
+	Kind string `json:"kind,omitempty"`
+
+	// UrlPattern: URL Pattern of this URL channel. Does not include
+	// "http://" or "https://". Example: www.example.com/home
+	UrlPattern string `json:"urlPattern,omitempty"`
+}
+
+type UrlChannels struct {
+	// Etag: ETag of this response for caching purposes.
+	Etag string `json:"etag,omitempty"`
+
+	// Items: The URL channels returned in this list response.
+	Items []*UrlChannel `json:"items,omitempty"`
+
+	// Kind: Kind of list this is, in this case adsense#urlChannels.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: Continuation token used to page through URL channels.
+	// To retrieve the next page of results, set the next request's
+	// "pageToken" value to this.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+}
+
+// method id "adsense.accounts.get":
+
+type AccountsGetCall struct {
+	s         *Service
+	accountId string
+	opt_      map[string]interface{}
+}
+
+// Get: Get information about the selected AdSense account.
+func (r *AccountsService) Get(accountId string) *AccountsGetCall {
+	c := &AccountsGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.accountId = accountId
+	return c
+}
+
+// Tree sets the optional parameter "tree": Whether the tree of sub
+// accounts should be returned.
+func (c *AccountsGetCall) Tree(tree bool) *AccountsGetCall {
+	c.opt_["tree"] = tree
+	return c
+}
+
+func (c *AccountsGetCall) Do() (*Account, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	if v, ok := c.opt_["tree"]; ok {
+		params.Set("tree", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "accounts/{accountId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Account)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Get information about the selected AdSense account.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.accounts.get",
+	//   "parameterOrder": [
+	//     "accountId"
+	//   ],
+	//   "parameters": {
+	//     "accountId": {
+	//       "description": "Account to get information about.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "tree": {
+	//       "description": "Whether the tree of sub accounts should be returned.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     }
+	//   },
+	//   "path": "accounts/{accountId}",
+	//   "response": {
+	//     "$ref": "Account"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "adsense.accounts.list":
+
+type AccountsListCall struct {
+	s    *Service
+	opt_ map[string]interface{}
+}
+
+// List: List all accounts available to this AdSense account.
+func (r *AccountsService) List() *AccountsListCall {
+	c := &AccountsListCall{s: r.s, opt_: make(map[string]interface{})}
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of accounts to include in the response, used for paging.
+func (c *AccountsListCall) MaxResults(maxResults int64) *AccountsListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": A continuation
+// token, used to page through accounts. To retrieve the next page, set
+// this parameter to the value of "nextPageToken" from the previous
+// response.
+func (c *AccountsListCall) PageToken(pageToken string) *AccountsListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *AccountsListCall) Do() (*Accounts, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "accounts")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Accounts)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "List all accounts available to this AdSense account.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.accounts.list",
+	//   "parameters": {
+	//     "maxResults": {
+	//       "description": "The maximum number of accounts to include in the response, used for paging.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "maximum": "10000",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "A continuation token, used to page through accounts. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "accounts",
+	//   "response": {
+	//     "$ref": "Accounts"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "adsense.accounts.adclients.list":
+
+type AccountsAdclientsListCall struct {
+	s         *Service
+	accountId string
+	opt_      map[string]interface{}
+}
+
+// List: List all ad clients in the specified account.
+func (r *AccountsAdclientsService) List(accountId string) *AccountsAdclientsListCall {
+	c := &AccountsAdclientsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.accountId = accountId
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of ad clients to include in the response, used for paging.
+func (c *AccountsAdclientsListCall) MaxResults(maxResults int64) *AccountsAdclientsListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": A continuation
+// token, used to page through ad clients. To retrieve the next page,
+// set this parameter to the value of "nextPageToken" from the previous
+// response.
+func (c *AccountsAdclientsListCall) PageToken(pageToken string) *AccountsAdclientsListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *AccountsAdclientsListCall) Do() (*AdClients, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "accounts/{accountId}/adclients")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(AdClients)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "List all ad clients in the specified account.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.accounts.adclients.list",
+	//   "parameterOrder": [
+	//     "accountId"
+	//   ],
+	//   "parameters": {
+	//     "accountId": {
+	//       "description": "Account for which to list ad clients.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "description": "The maximum number of ad clients to include in the response, used for paging.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "maximum": "10000",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "accounts/{accountId}/adclients",
+	//   "response": {
+	//     "$ref": "AdClients"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "adsense.accounts.adunits.get":
+
+type AccountsAdunitsGetCall struct {
+	s          *Service
+	accountId  string
+	adClientId string
+	adUnitId   string
+	opt_       map[string]interface{}
+}
+
+// Get: Gets the specified ad unit in the specified ad client for the
+// specified account.
+func (r *AccountsAdunitsService) Get(accountId string, adClientId string, adUnitId string) *AccountsAdunitsGetCall {
+	c := &AccountsAdunitsGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.accountId = accountId
+	c.adClientId = adClientId
+	c.adUnitId = adUnitId
+	return c
+}
+
+func (c *AccountsAdunitsGetCall) Do() (*AdUnit, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{adUnitId}", url.QueryEscape(c.adUnitId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(AdUnit)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets the specified ad unit in the specified ad client for the specified account.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.accounts.adunits.get",
+	//   "parameterOrder": [
+	//     "accountId",
+	//     "adClientId",
+	//     "adUnitId"
+	//   ],
+	//   "parameters": {
+	//     "accountId": {
+	//       "description": "Account to which the ad client belongs.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "adClientId": {
+	//       "description": "Ad client for which to get the ad unit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "adUnitId": {
+	//       "description": "Ad unit to retrieve.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}",
+	//   "response": {
+	//     "$ref": "AdUnit"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "adsense.accounts.adunits.getAdCode":
+
+type AccountsAdunitsGetAdCodeCall struct {
+	s          *Service
+	accountId  string
+	adClientId string
+	adUnitId   string
+	opt_       map[string]interface{}
+}
+
+// GetAdCode: Get ad code for the specified ad unit.
+func (r *AccountsAdunitsService) GetAdCode(accountId string, adClientId string, adUnitId string) *AccountsAdunitsGetAdCodeCall {
+	c := &AccountsAdunitsGetAdCodeCall{s: r.s, opt_: make(map[string]interface{})}
+	c.accountId = accountId
+	c.adClientId = adClientId
+	c.adUnitId = adUnitId
+	return c
+}
+
+func (c *AccountsAdunitsGetAdCodeCall) Do() (*AdCode, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}/adcode")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{adUnitId}", url.QueryEscape(c.adUnitId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(AdCode)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Get ad code for the specified ad unit.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.accounts.adunits.getAdCode",
+	//   "parameterOrder": [
+	//     "accountId",
+	//     "adClientId",
+	//     "adUnitId"
+	//   ],
+	//   "parameters": {
+	//     "accountId": {
+	//       "description": "Account which contains the ad client.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "adClientId": {
+	//       "description": "Ad client with contains the ad unit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "adUnitId": {
+	//       "description": "Ad unit to get the code for.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}/adcode",
+	//   "response": {
+	//     "$ref": "AdCode"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "adsense.accounts.adunits.list":
+
+type AccountsAdunitsListCall struct {
+	s          *Service
+	accountId  string
+	adClientId string
+	opt_       map[string]interface{}
+}
+
+// List: List all ad units in the specified ad client for the specified
+// account.
+func (r *AccountsAdunitsService) List(accountId string, adClientId string) *AccountsAdunitsListCall {
+	c := &AccountsAdunitsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.accountId = accountId
+	c.adClientId = adClientId
+	return c
+}
+
+// IncludeInactive sets the optional parameter "includeInactive":
+// Whether to include inactive ad units. Default: true.
+func (c *AccountsAdunitsListCall) IncludeInactive(includeInactive bool) *AccountsAdunitsListCall {
+	c.opt_["includeInactive"] = includeInactive
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of ad units to include in the response, used for paging.
+func (c *AccountsAdunitsListCall) MaxResults(maxResults int64) *AccountsAdunitsListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": A continuation
+// token, used to page through ad units. To retrieve the next page, set
+// this parameter to the value of "nextPageToken" from the previous
+// response.
+func (c *AccountsAdunitsListCall) PageToken(pageToken string) *AccountsAdunitsListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *AccountsAdunitsListCall) Do() (*AdUnits, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	if v, ok := c.opt_["includeInactive"]; ok {
+		params.Set("includeInactive", 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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "accounts/{accountId}/adclients/{adClientId}/adunits")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(AdUnits)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "List all ad units in the specified ad client for the specified account.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.accounts.adunits.list",
+	//   "parameterOrder": [
+	//     "accountId",
+	//     "adClientId"
+	//   ],
+	//   "parameters": {
+	//     "accountId": {
+	//       "description": "Account to which the ad client belongs.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "adClientId": {
+	//       "description": "Ad client for which to list ad units.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "includeInactive": {
+	//       "description": "Whether to include inactive ad units. Default: true.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     },
+	//     "maxResults": {
+	//       "description": "The maximum number of ad units to include in the response, used for paging.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "maximum": "10000",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "accounts/{accountId}/adclients/{adClientId}/adunits",
+	//   "response": {
+	//     "$ref": "AdUnits"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "adsense.accounts.adunits.customchannels.list":
+
+type AccountsAdunitsCustomchannelsListCall struct {
+	s          *Service
+	accountId  string
+	adClientId string
+	adUnitId   string
+	opt_       map[string]interface{}
+}
+
+// List: List all custom channels which the specified ad unit belongs
+// to.
+func (r *AccountsAdunitsCustomchannelsService) List(accountId string, adClientId string, adUnitId string) *AccountsAdunitsCustomchannelsListCall {
+	c := &AccountsAdunitsCustomchannelsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.accountId = accountId
+	c.adClientId = adClientId
+	c.adUnitId = adUnitId
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of custom channels to include in the response, used for
+// paging.
+func (c *AccountsAdunitsCustomchannelsListCall) MaxResults(maxResults int64) *AccountsAdunitsCustomchannelsListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": A continuation
+// token, used to page through custom channels. To retrieve the next
+// page, set this parameter to the value of "nextPageToken" from the
+// previous response.
+func (c *AccountsAdunitsCustomchannelsListCall) PageToken(pageToken string) *AccountsAdunitsCustomchannelsListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *AccountsAdunitsCustomchannelsListCall) Do() (*CustomChannels, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}/customchannels")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{adUnitId}", url.QueryEscape(c.adUnitId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(CustomChannels)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "List all custom channels which the specified ad unit belongs to.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.accounts.adunits.customchannels.list",
+	//   "parameterOrder": [
+	//     "accountId",
+	//     "adClientId",
+	//     "adUnitId"
+	//   ],
+	//   "parameters": {
+	//     "accountId": {
+	//       "description": "Account to which the ad client belongs.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "adClientId": {
+	//       "description": "Ad client which contains the ad unit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "adUnitId": {
+	//       "description": "Ad unit for which to list custom channels.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "description": "The maximum number of custom channels to include in the response, used for paging.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "maximum": "10000",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}/customchannels",
+	//   "response": {
+	//     "$ref": "CustomChannels"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "adsense.accounts.alerts.delete":
+
+type AccountsAlertsDeleteCall struct {
+	s         *Service
+	accountId string
+	alertId   string
+	opt_      map[string]interface{}
+}
+
+// Delete: Dismiss (delete) the specified alert from the specified
+// publisher AdSense account.
+func (r *AccountsAlertsService) Delete(accountId string, alertId string) *AccountsAlertsDeleteCall {
+	c := &AccountsAlertsDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.accountId = accountId
+	c.alertId = alertId
+	return c
+}
+
+func (c *AccountsAlertsDeleteCall) Do() error {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "accounts/{accountId}/alerts/{alertId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{alertId}", url.QueryEscape(c.alertId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return err
+	}
+	return nil
+	// {
+	//   "description": "Dismiss (delete) the specified alert from the specified publisher AdSense account.",
+	//   "httpMethod": "DELETE",
+	//   "id": "adsense.accounts.alerts.delete",
+	//   "parameterOrder": [
+	//     "accountId",
+	//     "alertId"
+	//   ],
+	//   "parameters": {
+	//     "accountId": {
+	//       "description": "Account which contains the ad unit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "alertId": {
+	//       "description": "Alert to delete.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "accounts/{accountId}/alerts/{alertId}",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense"
+	//   ]
+	// }
+
+}
+
+// method id "adsense.accounts.alerts.list":
+
+type AccountsAlertsListCall struct {
+	s         *Service
+	accountId string
+	opt_      map[string]interface{}
+}
+
+// List: List the alerts for the specified AdSense account.
+func (r *AccountsAlertsService) List(accountId string) *AccountsAlertsListCall {
+	c := &AccountsAlertsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.accountId = accountId
+	return c
+}
+
+// Locale sets the optional parameter "locale": The locale to use for
+// translating alert messages. The account locale will be used if this
+// is not supplied. The AdSense default (English) will be used if the
+// supplied locale is invalid or unsupported.
+func (c *AccountsAlertsListCall) Locale(locale string) *AccountsAlertsListCall {
+	c.opt_["locale"] = locale
+	return c
+}
+
+func (c *AccountsAlertsListCall) Do() (*Alerts, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	if v, ok := c.opt_["locale"]; ok {
+		params.Set("locale", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "accounts/{accountId}/alerts")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Alerts)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "List the alerts for the specified AdSense account.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.accounts.alerts.list",
+	//   "parameterOrder": [
+	//     "accountId"
+	//   ],
+	//   "parameters": {
+	//     "accountId": {
+	//       "description": "Account for which to retrieve the alerts.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "locale": {
+	//       "description": "The locale to use for translating alert messages. The account locale will be used if this is not supplied. The AdSense default (English) will be used if the supplied locale is invalid or unsupported.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "accounts/{accountId}/alerts",
+	//   "response": {
+	//     "$ref": "Alerts"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "adsense.accounts.customchannels.get":
+
+type AccountsCustomchannelsGetCall struct {
+	s               *Service
+	accountId       string
+	adClientId      string
+	customChannelId string
+	opt_            map[string]interface{}
+}
+
+// Get: Get the specified custom channel from the specified ad client
+// for the specified account.
+func (r *AccountsCustomchannelsService) Get(accountId string, adClientId string, customChannelId string) *AccountsCustomchannelsGetCall {
+	c := &AccountsCustomchannelsGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.accountId = accountId
+	c.adClientId = adClientId
+	c.customChannelId = customChannelId
+	return c
+}
+
+func (c *AccountsCustomchannelsGetCall) Do() (*CustomChannel, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{customChannelId}", url.QueryEscape(c.customChannelId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(CustomChannel)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Get the specified custom channel from the specified ad client for the specified account.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.accounts.customchannels.get",
+	//   "parameterOrder": [
+	//     "accountId",
+	//     "adClientId",
+	//     "customChannelId"
+	//   ],
+	//   "parameters": {
+	//     "accountId": {
+	//       "description": "Account to which the ad client belongs.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "adClientId": {
+	//       "description": "Ad client which contains the custom channel.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "customChannelId": {
+	//       "description": "Custom channel to retrieve.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}",
+	//   "response": {
+	//     "$ref": "CustomChannel"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "adsense.accounts.customchannels.list":
+
+type AccountsCustomchannelsListCall struct {
+	s          *Service
+	accountId  string
+	adClientId string
+	opt_       map[string]interface{}
+}
+
+// List: List all custom channels in the specified ad client for the
+// specified account.
+func (r *AccountsCustomchannelsService) List(accountId string, adClientId string) *AccountsCustomchannelsListCall {
+	c := &AccountsCustomchannelsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.accountId = accountId
+	c.adClientId = adClientId
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of custom channels to include in the response, used for
+// paging.
+func (c *AccountsCustomchannelsListCall) MaxResults(maxResults int64) *AccountsCustomchannelsListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": A continuation
+// token, used to page through custom channels. To retrieve the next
+// page, set this parameter to the value of "nextPageToken" from the
+// previous response.
+func (c *AccountsCustomchannelsListCall) PageToken(pageToken string) *AccountsCustomchannelsListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *AccountsCustomchannelsListCall) Do() (*CustomChannels, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "accounts/{accountId}/adclients/{adClientId}/customchannels")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(CustomChannels)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "List all custom channels in the specified ad client for the specified account.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.accounts.customchannels.list",
+	//   "parameterOrder": [
+	//     "accountId",
+	//     "adClientId"
+	//   ],
+	//   "parameters": {
+	//     "accountId": {
+	//       "description": "Account to which the ad client belongs.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "adClientId": {
+	//       "description": "Ad client for which to list custom channels.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "description": "The maximum number of custom channels to include in the response, used for paging.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "maximum": "10000",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "accounts/{accountId}/adclients/{adClientId}/customchannels",
+	//   "response": {
+	//     "$ref": "CustomChannels"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "adsense.accounts.customchannels.adunits.list":
+
+type AccountsCustomchannelsAdunitsListCall struct {
+	s               *Service
+	accountId       string
+	adClientId      string
+	customChannelId string
+	opt_            map[string]interface{}
+}
+
+// List: List all ad units in the specified custom channel.
+func (r *AccountsCustomchannelsAdunitsService) List(accountId string, adClientId string, customChannelId string) *AccountsCustomchannelsAdunitsListCall {
+	c := &AccountsCustomchannelsAdunitsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.accountId = accountId
+	c.adClientId = adClientId
+	c.customChannelId = customChannelId
+	return c
+}
+
+// IncludeInactive sets the optional parameter "includeInactive":
+// Whether to include inactive ad units. Default: true.
+func (c *AccountsCustomchannelsAdunitsListCall) IncludeInactive(includeInactive bool) *AccountsCustomchannelsAdunitsListCall {
+	c.opt_["includeInactive"] = includeInactive
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of ad units to include in the response, used for paging.
+func (c *AccountsCustomchannelsAdunitsListCall) MaxResults(maxResults int64) *AccountsCustomchannelsAdunitsListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": A continuation
+// token, used to page through ad units. To retrieve the next page, set
+// this parameter to the value of "nextPageToken" from the previous
+// response.
+func (c *AccountsCustomchannelsAdunitsListCall) PageToken(pageToken string) *AccountsCustomchannelsAdunitsListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *AccountsCustomchannelsAdunitsListCall) Do() (*AdUnits, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	if v, ok := c.opt_["includeInactive"]; ok {
+		params.Set("includeInactive", 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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}/adunits")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{customChannelId}", url.QueryEscape(c.customChannelId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(AdUnits)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "List all ad units in the specified custom channel.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.accounts.customchannels.adunits.list",
+	//   "parameterOrder": [
+	//     "accountId",
+	//     "adClientId",
+	//     "customChannelId"
+	//   ],
+	//   "parameters": {
+	//     "accountId": {
+	//       "description": "Account to which the ad client belongs.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "adClientId": {
+	//       "description": "Ad client which contains the custom channel.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "customChannelId": {
+	//       "description": "Custom channel for which to list ad units.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "includeInactive": {
+	//       "description": "Whether to include inactive ad units. Default: true.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     },
+	//     "maxResults": {
+	//       "description": "The maximum number of ad units to include in the response, used for paging.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "maximum": "10000",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}/adunits",
+	//   "response": {
+	//     "$ref": "AdUnits"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "adsense.accounts.payments.list":
+
+type AccountsPaymentsListCall struct {
+	s         *Service
+	accountId string
+	opt_      map[string]interface{}
+}
+
+// List: List the payments for the specified AdSense account.
+func (r *AccountsPaymentsService) List(accountId string) *AccountsPaymentsListCall {
+	c := &AccountsPaymentsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.accountId = accountId
+	return c
+}
+
+func (c *AccountsPaymentsListCall) Do() (*Payments, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "accounts/{accountId}/payments")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Payments)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "List the payments for the specified AdSense account.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.accounts.payments.list",
+	//   "parameterOrder": [
+	//     "accountId"
+	//   ],
+	//   "parameters": {
+	//     "accountId": {
+	//       "description": "Account for which to retrieve the payments.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "accounts/{accountId}/payments",
+	//   "response": {
+	//     "$ref": "Payments"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "adsense.accounts.reports.generate":
+
+type AccountsReportsGenerateCall struct {
+	s         *Service
+	accountId string
+	startDate string
+	endDate   string
+	opt_      map[string]interface{}
+}
+
+// Generate: Generate an AdSense report based on the report request sent
+// in the query parameters. Returns the result as JSON; to retrieve
+// output in CSV format specify "alt=csv" as a query parameter.
+func (r *AccountsReportsService) Generate(accountId string, startDate string, endDate string) *AccountsReportsGenerateCall {
+	c := &AccountsReportsGenerateCall{s: r.s, opt_: make(map[string]interface{})}
+	c.accountId = accountId
+	c.startDate = startDate
+	c.endDate = endDate
+	return c
+}
+
+// Currency sets the optional parameter "currency": Optional currency to
+// use when reporting on monetary metrics. Defaults to the account's
+// currency if not set.
+func (c *AccountsReportsGenerateCall) Currency(currency string) *AccountsReportsGenerateCall {
+	c.opt_["currency"] = currency
+	return c
+}
+
+// Dimension sets the optional parameter "dimension": Dimensions to base
+// the report on.
+func (c *AccountsReportsGenerateCall) Dimension(dimension string) *AccountsReportsGenerateCall {
+	c.opt_["dimension"] = dimension
+	return c
+}
+
+// Filter sets the optional parameter "filter": Filters to be run on the
+// report.
+func (c *AccountsReportsGenerateCall) Filter(filter string) *AccountsReportsGenerateCall {
+	c.opt_["filter"] = filter
+	return c
+}
+
+// Locale sets the optional parameter "locale": Optional locale to use
+// for translating report output to a local language. Defaults to
+// "en_US" if not specified.
+func (c *AccountsReportsGenerateCall) Locale(locale string) *AccountsReportsGenerateCall {
+	c.opt_["locale"] = locale
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of rows of report data to return.
+func (c *AccountsReportsGenerateCall) MaxResults(maxResults int64) *AccountsReportsGenerateCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// Metric sets the optional parameter "metric": Numeric columns to
+// include in the report.
+func (c *AccountsReportsGenerateCall) Metric(metric string) *AccountsReportsGenerateCall {
+	c.opt_["metric"] = metric
+	return c
+}
+
+// Sort sets the optional parameter "sort": The name of a dimension or
+// metric to sort the resulting report on, optionally prefixed with "+"
+// to sort ascending or "-" to sort descending. If no prefix is
+// specified, the column is sorted ascending.
+func (c *AccountsReportsGenerateCall) Sort(sort string) *AccountsReportsGenerateCall {
+	c.opt_["sort"] = sort
+	return c
+}
+
+// StartIndex sets the optional parameter "startIndex": Index of the
+// first row of report data to return.
+func (c *AccountsReportsGenerateCall) StartIndex(startIndex int64) *AccountsReportsGenerateCall {
+	c.opt_["startIndex"] = startIndex
+	return c
+}
+
+// UseTimezoneReporting sets the optional parameter
+// "useTimezoneReporting": Whether the report should be generated in the
+// AdSense account's local timezone. If false default PST/PDT timezone
+// will be used.
+func (c *AccountsReportsGenerateCall) UseTimezoneReporting(useTimezoneReporting bool) *AccountsReportsGenerateCall {
+	c.opt_["useTimezoneReporting"] = useTimezoneReporting
+	return c
+}
+
+func (c *AccountsReportsGenerateCall) Do() (*AdsenseReportsGenerateResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	params.Set("endDate", fmt.Sprintf("%v", c.endDate))
+	params.Set("startDate", fmt.Sprintf("%v", c.startDate))
+	if v, ok := c.opt_["currency"]; ok {
+		params.Set("currency", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["dimension"]; ok {
+		params.Set("dimension", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["filter"]; ok {
+		params.Set("filter", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["locale"]; ok {
+		params.Set("locale", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["maxResults"]; ok {
+		params.Set("maxResults", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["metric"]; ok {
+		params.Set("metric", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["sort"]; ok {
+		params.Set("sort", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["startIndex"]; ok {
+		params.Set("startIndex", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["useTimezoneReporting"]; ok {
+		params.Set("useTimezoneReporting", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "accounts/{accountId}/reports")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(AdsenseReportsGenerateResponse)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Generate an AdSense report based on the report request sent in the query parameters. Returns the result as JSON; to retrieve output in CSV format specify \"alt=csv\" as a query parameter.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.accounts.reports.generate",
+	//   "parameterOrder": [
+	//     "accountId",
+	//     "startDate",
+	//     "endDate"
+	//   ],
+	//   "parameters": {
+	//     "accountId": {
+	//       "description": "Account upon which to report.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "currency": {
+	//       "description": "Optional currency to use when reporting on monetary metrics. Defaults to the account's currency if not set.",
+	//       "location": "query",
+	//       "pattern": "[a-zA-Z]+",
+	//       "type": "string"
+	//     },
+	//     "dimension": {
+	//       "description": "Dimensions to base the report on.",
+	//       "location": "query",
+	//       "pattern": "[a-zA-Z_]+",
+	//       "repeated": true,
+	//       "type": "string"
+	//     },
+	//     "endDate": {
+	//       "description": "End of the date range to report on in \"YYYY-MM-DD\" format, inclusive.",
+	//       "location": "query",
+	//       "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,2}?)",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "filter": {
+	//       "description": "Filters to be run on the report.",
+	//       "location": "query",
+	//       "pattern": "[a-zA-Z_]+(==|=@).+",
+	//       "repeated": true,
+	//       "type": "string"
+	//     },
+	//     "locale": {
+	//       "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.",
+	//       "location": "query",
+	//       "pattern": "[a-zA-Z_]+",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "description": "The maximum number of rows of report data to return.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "maximum": "50000",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "metric": {
+	//       "description": "Numeric columns to include in the report.",
+	//       "location": "query",
+	//       "pattern": "[a-zA-Z_]+",
+	//       "repeated": true,
+	//       "type": "string"
+	//     },
+	//     "sort": {
+	//       "description": "The name of a dimension or metric to sort the resulting report on, optionally prefixed with \"+\" to sort ascending or \"-\" to sort descending. If no prefix is specified, the column is sorted ascending.",
+	//       "location": "query",
+	//       "pattern": "(\\+|-)?[a-zA-Z_]+",
+	//       "repeated": true,
+	//       "type": "string"
+	//     },
+	//     "startDate": {
+	//       "description": "Start of the date range to report on in \"YYYY-MM-DD\" format, inclusive.",
+	//       "location": "query",
+	//       "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,2}?)",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "startIndex": {
+	//       "description": "Index of the first row of report data to return.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "maximum": "5000",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "useTimezoneReporting": {
+	//       "description": "Whether the report should be generated in the AdSense account's local timezone. If false default PST/PDT timezone will be used.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     }
+	//   },
+	//   "path": "accounts/{accountId}/reports",
+	//   "response": {
+	//     "$ref": "AdsenseReportsGenerateResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ],
+	//   "supportsMediaDownload": true
+	// }
+
+}
+
+// method id "adsense.accounts.reports.saved.generate":
+
+type AccountsReportsSavedGenerateCall struct {
+	s             *Service
+	accountId     string
+	savedReportId string
+	opt_          map[string]interface{}
+}
+
+// Generate: Generate an AdSense report based on the saved report ID
+// sent in the query parameters.
+func (r *AccountsReportsSavedService) Generate(accountId string, savedReportId string) *AccountsReportsSavedGenerateCall {
+	c := &AccountsReportsSavedGenerateCall{s: r.s, opt_: make(map[string]interface{})}
+	c.accountId = accountId
+	c.savedReportId = savedReportId
+	return c
+}
+
+// Locale sets the optional parameter "locale": Optional locale to use
+// for translating report output to a local language. Defaults to
+// "en_US" if not specified.
+func (c *AccountsReportsSavedGenerateCall) Locale(locale string) *AccountsReportsSavedGenerateCall {
+	c.opt_["locale"] = locale
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of rows of report data to return.
+func (c *AccountsReportsSavedGenerateCall) MaxResults(maxResults int64) *AccountsReportsSavedGenerateCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// StartIndex sets the optional parameter "startIndex": Index of the
+// first row of report data to return.
+func (c *AccountsReportsSavedGenerateCall) StartIndex(startIndex int64) *AccountsReportsSavedGenerateCall {
+	c.opt_["startIndex"] = startIndex
+	return c
+}
+
+func (c *AccountsReportsSavedGenerateCall) Do() (*AdsenseReportsGenerateResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	if v, ok := c.opt_["locale"]; ok {
+		params.Set("locale", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["maxResults"]; ok {
+		params.Set("maxResults", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["startIndex"]; ok {
+		params.Set("startIndex", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "accounts/{accountId}/reports/{savedReportId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{savedReportId}", url.QueryEscape(c.savedReportId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(AdsenseReportsGenerateResponse)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Generate an AdSense report based on the saved report ID sent in the query parameters.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.accounts.reports.saved.generate",
+	//   "parameterOrder": [
+	//     "accountId",
+	//     "savedReportId"
+	//   ],
+	//   "parameters": {
+	//     "accountId": {
+	//       "description": "Account to which the saved reports belong.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "locale": {
+	//       "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.",
+	//       "location": "query",
+	//       "pattern": "[a-zA-Z_]+",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "description": "The maximum number of rows of report data to return.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "maximum": "50000",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "savedReportId": {
+	//       "description": "The saved report to retrieve.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "startIndex": {
+	//       "description": "Index of the first row of report data to return.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "maximum": "5000",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     }
+	//   },
+	//   "path": "accounts/{accountId}/reports/{savedReportId}",
+	//   "response": {
+	//     "$ref": "AdsenseReportsGenerateResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "adsense.accounts.reports.saved.list":
+
+type AccountsReportsSavedListCall struct {
+	s         *Service
+	accountId string
+	opt_      map[string]interface{}
+}
+
+// List: List all saved reports in the specified AdSense account.
+func (r *AccountsReportsSavedService) List(accountId string) *AccountsReportsSavedListCall {
+	c := &AccountsReportsSavedListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.accountId = accountId
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of saved reports to include in the response, used for paging.
+func (c *AccountsReportsSavedListCall) MaxResults(maxResults int64) *AccountsReportsSavedListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": A continuation
+// token, used to page through saved reports. To retrieve the next page,
+// set this parameter to the value of "nextPageToken" from the previous
+// response.
+func (c *AccountsReportsSavedListCall) PageToken(pageToken string) *AccountsReportsSavedListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *AccountsReportsSavedListCall) Do() (*SavedReports, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "accounts/{accountId}/reports/saved")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(SavedReports)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "List all saved reports in the specified AdSense account.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.accounts.reports.saved.list",
+	//   "parameterOrder": [
+	//     "accountId"
+	//   ],
+	//   "parameters": {
+	//     "accountId": {
+	//       "description": "Account to which the saved reports belong.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "description": "The maximum number of saved reports to include in the response, used for paging.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "maximum": "100",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "A continuation token, used to page through saved reports. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "accounts/{accountId}/reports/saved",
+	//   "response": {
+	//     "$ref": "SavedReports"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "adsense.accounts.savedadstyles.get":
+
+type AccountsSavedadstylesGetCall struct {
+	s              *Service
+	accountId      string
+	savedAdStyleId string
+	opt_           map[string]interface{}
+}
+
+// Get: List a specific saved ad style for the specified account.
+func (r *AccountsSavedadstylesService) Get(accountId string, savedAdStyleId string) *AccountsSavedadstylesGetCall {
+	c := &AccountsSavedadstylesGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.accountId = accountId
+	c.savedAdStyleId = savedAdStyleId
+	return c
+}
+
+func (c *AccountsSavedadstylesGetCall) Do() (*SavedAdStyle, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "accounts/{accountId}/savedadstyles/{savedAdStyleId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{savedAdStyleId}", url.QueryEscape(c.savedAdStyleId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(SavedAdStyle)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "List a specific saved ad style for the specified account.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.accounts.savedadstyles.get",
+	//   "parameterOrder": [
+	//     "accountId",
+	//     "savedAdStyleId"
+	//   ],
+	//   "parameters": {
+	//     "accountId": {
+	//       "description": "Account for which to get the saved ad style.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "savedAdStyleId": {
+	//       "description": "Saved ad style to retrieve.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "accounts/{accountId}/savedadstyles/{savedAdStyleId}",
+	//   "response": {
+	//     "$ref": "SavedAdStyle"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "adsense.accounts.savedadstyles.list":
+
+type AccountsSavedadstylesListCall struct {
+	s         *Service
+	accountId string
+	opt_      map[string]interface{}
+}
+
+// List: List all saved ad styles in the specified account.
+func (r *AccountsSavedadstylesService) List(accountId string) *AccountsSavedadstylesListCall {
+	c := &AccountsSavedadstylesListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.accountId = accountId
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of saved ad styles to include in the response, used for
+// paging.
+func (c *AccountsSavedadstylesListCall) MaxResults(maxResults int64) *AccountsSavedadstylesListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": A continuation
+// token, used to page through saved ad styles. To retrieve the next
+// page, set this parameter to the value of "nextPageToken" from the
+// previous response.
+func (c *AccountsSavedadstylesListCall) PageToken(pageToken string) *AccountsSavedadstylesListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *AccountsSavedadstylesListCall) Do() (*SavedAdStyles, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "accounts/{accountId}/savedadstyles")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(SavedAdStyles)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "List all saved ad styles in the specified account.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.accounts.savedadstyles.list",
+	//   "parameterOrder": [
+	//     "accountId"
+	//   ],
+	//   "parameters": {
+	//     "accountId": {
+	//       "description": "Account for which to list saved ad styles.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "description": "The maximum number of saved ad styles to include in the response, used for paging.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "maximum": "10000",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "A continuation token, used to page through saved ad styles. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "accounts/{accountId}/savedadstyles",
+	//   "response": {
+	//     "$ref": "SavedAdStyles"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "adsense.accounts.urlchannels.list":
+
+type AccountsUrlchannelsListCall struct {
+	s          *Service
+	accountId  string
+	adClientId string
+	opt_       map[string]interface{}
+}
+
+// List: List all URL channels in the specified ad client for the
+// specified account.
+func (r *AccountsUrlchannelsService) List(accountId string, adClientId string) *AccountsUrlchannelsListCall {
+	c := &AccountsUrlchannelsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.accountId = accountId
+	c.adClientId = adClientId
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of URL channels to include in the response, used for paging.
+func (c *AccountsUrlchannelsListCall) MaxResults(maxResults int64) *AccountsUrlchannelsListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": A continuation
+// token, used to page through URL channels. To retrieve the next page,
+// set this parameter to the value of "nextPageToken" from the previous
+// response.
+func (c *AccountsUrlchannelsListCall) PageToken(pageToken string) *AccountsUrlchannelsListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *AccountsUrlchannelsListCall) Do() (*UrlChannels, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "accounts/{accountId}/adclients/{adClientId}/urlchannels")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(UrlChannels)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "List all URL channels in the specified ad client for the specified account.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.accounts.urlchannels.list",
+	//   "parameterOrder": [
+	//     "accountId",
+	//     "adClientId"
+	//   ],
+	//   "parameters": {
+	//     "accountId": {
+	//       "description": "Account to which the ad client belongs.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "adClientId": {
+	//       "description": "Ad client for which to list URL channels.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "description": "The maximum number of URL channels to include in the response, used for paging.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "maximum": "10000",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "A continuation token, used to page through URL channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "accounts/{accountId}/adclients/{adClientId}/urlchannels",
+	//   "response": {
+	//     "$ref": "UrlChannels"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "adsense.adclients.list":
+
+type AdclientsListCall struct {
+	s    *Service
+	opt_ map[string]interface{}
+}
+
+// List: List all ad clients in this AdSense account.
+func (r *AdclientsService) List() *AdclientsListCall {
+	c := &AdclientsListCall{s: r.s, opt_: make(map[string]interface{})}
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of ad clients to include in the response, used for paging.
+func (c *AdclientsListCall) MaxResults(maxResults int64) *AdclientsListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": A continuation
+// token, used to page through ad clients. To retrieve the next page,
+// set this parameter to the value of "nextPageToken" from the previous
+// response.
+func (c *AdclientsListCall) PageToken(pageToken string) *AdclientsListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *AdclientsListCall) Do() (*AdClients, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "adclients")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(AdClients)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "List all ad clients in this AdSense account.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.adclients.list",
+	//   "parameters": {
+	//     "maxResults": {
+	//       "description": "The maximum number of ad clients to include in the response, used for paging.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "maximum": "10000",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "adclients",
+	//   "response": {
+	//     "$ref": "AdClients"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "adsense.adunits.get":
+
+type AdunitsGetCall struct {
+	s          *Service
+	adClientId string
+	adUnitId   string
+	opt_       map[string]interface{}
+}
+
+// Get: Gets the specified ad unit in the specified ad client.
+func (r *AdunitsService) Get(adClientId string, adUnitId string) *AdunitsGetCall {
+	c := &AdunitsGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.adClientId = adClientId
+	c.adUnitId = adUnitId
+	return c
+}
+
+func (c *AdunitsGetCall) Do() (*AdUnit, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "adclients/{adClientId}/adunits/{adUnitId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{adUnitId}", url.QueryEscape(c.adUnitId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(AdUnit)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets the specified ad unit in the specified ad client.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.adunits.get",
+	//   "parameterOrder": [
+	//     "adClientId",
+	//     "adUnitId"
+	//   ],
+	//   "parameters": {
+	//     "adClientId": {
+	//       "description": "Ad client for which to get the ad unit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "adUnitId": {
+	//       "description": "Ad unit to retrieve.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "adclients/{adClientId}/adunits/{adUnitId}",
+	//   "response": {
+	//     "$ref": "AdUnit"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "adsense.adunits.getAdCode":
+
+type AdunitsGetAdCodeCall struct {
+	s          *Service
+	adClientId string
+	adUnitId   string
+	opt_       map[string]interface{}
+}
+
+// GetAdCode: Get ad code for the specified ad unit.
+func (r *AdunitsService) GetAdCode(adClientId string, adUnitId string) *AdunitsGetAdCodeCall {
+	c := &AdunitsGetAdCodeCall{s: r.s, opt_: make(map[string]interface{})}
+	c.adClientId = adClientId
+	c.adUnitId = adUnitId
+	return c
+}
+
+func (c *AdunitsGetAdCodeCall) Do() (*AdCode, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "adclients/{adClientId}/adunits/{adUnitId}/adcode")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{adUnitId}", url.QueryEscape(c.adUnitId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(AdCode)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Get ad code for the specified ad unit.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.adunits.getAdCode",
+	//   "parameterOrder": [
+	//     "adClientId",
+	//     "adUnitId"
+	//   ],
+	//   "parameters": {
+	//     "adClientId": {
+	//       "description": "Ad client with contains the ad unit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "adUnitId": {
+	//       "description": "Ad unit to get the code for.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "adclients/{adClientId}/adunits/{adUnitId}/adcode",
+	//   "response": {
+	//     "$ref": "AdCode"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "adsense.adunits.list":
+
+type AdunitsListCall struct {
+	s          *Service
+	adClientId string
+	opt_       map[string]interface{}
+}
+
+// List: List all ad units in the specified ad client for this AdSense
+// account.
+func (r *AdunitsService) List(adClientId string) *AdunitsListCall {
+	c := &AdunitsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.adClientId = adClientId
+	return c
+}
+
+// IncludeInactive sets the optional parameter "includeInactive":
+// Whether to include inactive ad units. Default: true.
+func (c *AdunitsListCall) IncludeInactive(includeInactive bool) *AdunitsListCall {
+	c.opt_["includeInactive"] = includeInactive
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of ad units to include in the response, used for paging.
+func (c *AdunitsListCall) MaxResults(maxResults int64) *AdunitsListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": A continuation
+// token, used to page through ad units. To retrieve the next page, set
+// this parameter to the value of "nextPageToken" from the previous
+// response.
+func (c *AdunitsListCall) PageToken(pageToken string) *AdunitsListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *AdunitsListCall) Do() (*AdUnits, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	if v, ok := c.opt_["includeInactive"]; ok {
+		params.Set("includeInactive", 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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "adclients/{adClientId}/adunits")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(AdUnits)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "List all ad units in the specified ad client for this AdSense account.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.adunits.list",
+	//   "parameterOrder": [
+	//     "adClientId"
+	//   ],
+	//   "parameters": {
+	//     "adClientId": {
+	//       "description": "Ad client for which to list ad units.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "includeInactive": {
+	//       "description": "Whether to include inactive ad units. Default: true.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     },
+	//     "maxResults": {
+	//       "description": "The maximum number of ad units to include in the response, used for paging.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "maximum": "10000",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "adclients/{adClientId}/adunits",
+	//   "response": {
+	//     "$ref": "AdUnits"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "adsense.adunits.customchannels.list":
+
+type AdunitsCustomchannelsListCall struct {
+	s          *Service
+	adClientId string
+	adUnitId   string
+	opt_       map[string]interface{}
+}
+
+// List: List all custom channels which the specified ad unit belongs
+// to.
+func (r *AdunitsCustomchannelsService) List(adClientId string, adUnitId string) *AdunitsCustomchannelsListCall {
+	c := &AdunitsCustomchannelsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.adClientId = adClientId
+	c.adUnitId = adUnitId
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of custom channels to include in the response, used for
+// paging.
+func (c *AdunitsCustomchannelsListCall) MaxResults(maxResults int64) *AdunitsCustomchannelsListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": A continuation
+// token, used to page through custom channels. To retrieve the next
+// page, set this parameter to the value of "nextPageToken" from the
+// previous response.
+func (c *AdunitsCustomchannelsListCall) PageToken(pageToken string) *AdunitsCustomchannelsListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *AdunitsCustomchannelsListCall) Do() (*CustomChannels, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "adclients/{adClientId}/adunits/{adUnitId}/customchannels")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{adUnitId}", url.QueryEscape(c.adUnitId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(CustomChannels)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "List all custom channels which the specified ad unit belongs to.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.adunits.customchannels.list",
+	//   "parameterOrder": [
+	//     "adClientId",
+	//     "adUnitId"
+	//   ],
+	//   "parameters": {
+	//     "adClientId": {
+	//       "description": "Ad client which contains the ad unit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "adUnitId": {
+	//       "description": "Ad unit for which to list custom channels.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "description": "The maximum number of custom channels to include in the response, used for paging.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "maximum": "10000",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "adclients/{adClientId}/adunits/{adUnitId}/customchannels",
+	//   "response": {
+	//     "$ref": "CustomChannels"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "adsense.alerts.delete":
+
+type AlertsDeleteCall struct {
+	s       *Service
+	alertId string
+	opt_    map[string]interface{}
+}
+
+// Delete: Dismiss (delete) the specified alert from the publisher's
+// AdSense account.
+func (r *AlertsService) Delete(alertId string) *AlertsDeleteCall {
+	c := &AlertsDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.alertId = alertId
+	return c
+}
+
+func (c *AlertsDeleteCall) Do() error {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "alerts/{alertId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{alertId}", url.QueryEscape(c.alertId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return err
+	}
+	return nil
+	// {
+	//   "description": "Dismiss (delete) the specified alert from the publisher's AdSense account.",
+	//   "httpMethod": "DELETE",
+	//   "id": "adsense.alerts.delete",
+	//   "parameterOrder": [
+	//     "alertId"
+	//   ],
+	//   "parameters": {
+	//     "alertId": {
+	//       "description": "Alert to delete.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "alerts/{alertId}",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense"
+	//   ]
+	// }
+
+}
+
+// method id "adsense.alerts.list":
+
+type AlertsListCall struct {
+	s    *Service
+	opt_ map[string]interface{}
+}
+
+// List: List the alerts for this AdSense account.
+func (r *AlertsService) List() *AlertsListCall {
+	c := &AlertsListCall{s: r.s, opt_: make(map[string]interface{})}
+	return c
+}
+
+// Locale sets the optional parameter "locale": The locale to use for
+// translating alert messages. The account locale will be used if this
+// is not supplied. The AdSense default (English) will be used if the
+// supplied locale is invalid or unsupported.
+func (c *AlertsListCall) Locale(locale string) *AlertsListCall {
+	c.opt_["locale"] = locale
+	return c
+}
+
+func (c *AlertsListCall) Do() (*Alerts, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	if v, ok := c.opt_["locale"]; ok {
+		params.Set("locale", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "alerts")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Alerts)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "List the alerts for this AdSense account.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.alerts.list",
+	//   "parameters": {
+	//     "locale": {
+	//       "description": "The locale to use for translating alert messages. The account locale will be used if this is not supplied. The AdSense default (English) will be used if the supplied locale is invalid or unsupported.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "alerts",
+	//   "response": {
+	//     "$ref": "Alerts"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "adsense.customchannels.get":
+
+type CustomchannelsGetCall struct {
+	s               *Service
+	adClientId      string
+	customChannelId string
+	opt_            map[string]interface{}
+}
+
+// Get: Get the specified custom channel from the specified ad client.
+func (r *CustomchannelsService) Get(adClientId string, customChannelId string) *CustomchannelsGetCall {
+	c := &CustomchannelsGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.adClientId = adClientId
+	c.customChannelId = customChannelId
+	return c
+}
+
+func (c *CustomchannelsGetCall) Do() (*CustomChannel, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "adclients/{adClientId}/customchannels/{customChannelId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{customChannelId}", url.QueryEscape(c.customChannelId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(CustomChannel)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Get the specified custom channel from the specified ad client.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.customchannels.get",
+	//   "parameterOrder": [
+	//     "adClientId",
+	//     "customChannelId"
+	//   ],
+	//   "parameters": {
+	//     "adClientId": {
+	//       "description": "Ad client which contains the custom channel.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "customChannelId": {
+	//       "description": "Custom channel to retrieve.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "adclients/{adClientId}/customchannels/{customChannelId}",
+	//   "response": {
+	//     "$ref": "CustomChannel"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "adsense.customchannels.list":
+
+type CustomchannelsListCall struct {
+	s          *Service
+	adClientId string
+	opt_       map[string]interface{}
+}
+
+// List: List all custom channels in the specified ad client for this
+// AdSense account.
+func (r *CustomchannelsService) List(adClientId string) *CustomchannelsListCall {
+	c := &CustomchannelsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.adClientId = adClientId
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of custom channels to include in the response, used for
+// paging.
+func (c *CustomchannelsListCall) MaxResults(maxResults int64) *CustomchannelsListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": A continuation
+// token, used to page through custom channels. To retrieve the next
+// page, set this parameter to the value of "nextPageToken" from the
+// previous response.
+func (c *CustomchannelsListCall) PageToken(pageToken string) *CustomchannelsListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *CustomchannelsListCall) Do() (*CustomChannels, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "adclients/{adClientId}/customchannels")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(CustomChannels)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "List all custom channels in the specified ad client for this AdSense account.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.customchannels.list",
+	//   "parameterOrder": [
+	//     "adClientId"
+	//   ],
+	//   "parameters": {
+	//     "adClientId": {
+	//       "description": "Ad client for which to list custom channels.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "description": "The maximum number of custom channels to include in the response, used for paging.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "maximum": "10000",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "adclients/{adClientId}/customchannels",
+	//   "response": {
+	//     "$ref": "CustomChannels"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "adsense.customchannels.adunits.list":
+
+type CustomchannelsAdunitsListCall struct {
+	s               *Service
+	adClientId      string
+	customChannelId string
+	opt_            map[string]interface{}
+}
+
+// List: List all ad units in the specified custom channel.
+func (r *CustomchannelsAdunitsService) List(adClientId string, customChannelId string) *CustomchannelsAdunitsListCall {
+	c := &CustomchannelsAdunitsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.adClientId = adClientId
+	c.customChannelId = customChannelId
+	return c
+}
+
+// IncludeInactive sets the optional parameter "includeInactive":
+// Whether to include inactive ad units. Default: true.
+func (c *CustomchannelsAdunitsListCall) IncludeInactive(includeInactive bool) *CustomchannelsAdunitsListCall {
+	c.opt_["includeInactive"] = includeInactive
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of ad units to include in the response, used for paging.
+func (c *CustomchannelsAdunitsListCall) MaxResults(maxResults int64) *CustomchannelsAdunitsListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": A continuation
+// token, used to page through ad units. To retrieve the next page, set
+// this parameter to the value of "nextPageToken" from the previous
+// response.
+func (c *CustomchannelsAdunitsListCall) PageToken(pageToken string) *CustomchannelsAdunitsListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *CustomchannelsAdunitsListCall) Do() (*AdUnits, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	if v, ok := c.opt_["includeInactive"]; ok {
+		params.Set("includeInactive", 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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "adclients/{adClientId}/customchannels/{customChannelId}/adunits")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{customChannelId}", url.QueryEscape(c.customChannelId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(AdUnits)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "List all ad units in the specified custom channel.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.customchannels.adunits.list",
+	//   "parameterOrder": [
+	//     "adClientId",
+	//     "customChannelId"
+	//   ],
+	//   "parameters": {
+	//     "adClientId": {
+	//       "description": "Ad client which contains the custom channel.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "customChannelId": {
+	//       "description": "Custom channel for which to list ad units.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "includeInactive": {
+	//       "description": "Whether to include inactive ad units. Default: true.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     },
+	//     "maxResults": {
+	//       "description": "The maximum number of ad units to include in the response, used for paging.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "maximum": "10000",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "adclients/{adClientId}/customchannels/{customChannelId}/adunits",
+	//   "response": {
+	//     "$ref": "AdUnits"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "adsense.metadata.dimensions.list":
+
+type MetadataDimensionsListCall struct {
+	s    *Service
+	opt_ map[string]interface{}
+}
+
+// List: List the metadata for the dimensions available to this AdSense
+// account.
+func (r *MetadataDimensionsService) List() *MetadataDimensionsListCall {
+	c := &MetadataDimensionsListCall{s: r.s, opt_: make(map[string]interface{})}
+	return c
+}
+
+func (c *MetadataDimensionsListCall) Do() (*Metadata, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "metadata/dimensions")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Metadata)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "List the metadata for the dimensions available to this AdSense account.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.metadata.dimensions.list",
+	//   "path": "metadata/dimensions",
+	//   "response": {
+	//     "$ref": "Metadata"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "adsense.metadata.metrics.list":
+
+type MetadataMetricsListCall struct {
+	s    *Service
+	opt_ map[string]interface{}
+}
+
+// List: List the metadata for the metrics available to this AdSense
+// account.
+func (r *MetadataMetricsService) List() *MetadataMetricsListCall {
+	c := &MetadataMetricsListCall{s: r.s, opt_: make(map[string]interface{})}
+	return c
+}
+
+func (c *MetadataMetricsListCall) Do() (*Metadata, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "metadata/metrics")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Metadata)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "List the metadata for the metrics available to this AdSense account.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.metadata.metrics.list",
+	//   "path": "metadata/metrics",
+	//   "response": {
+	//     "$ref": "Metadata"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "adsense.payments.list":
+
+type PaymentsListCall struct {
+	s    *Service
+	opt_ map[string]interface{}
+}
+
+// List: List the payments for this AdSense account.
+func (r *PaymentsService) List() *PaymentsListCall {
+	c := &PaymentsListCall{s: r.s, opt_: make(map[string]interface{})}
+	return c
+}
+
+func (c *PaymentsListCall) Do() (*Payments, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "payments")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Payments)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "List the payments for this AdSense account.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.payments.list",
+	//   "path": "payments",
+	//   "response": {
+	//     "$ref": "Payments"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "adsense.reports.generate":
+
+type ReportsGenerateCall struct {
+	s         *Service
+	startDate string
+	endDate   string
+	opt_      map[string]interface{}
+}
+
+// Generate: Generate an AdSense report based on the report request sent
+// in the query parameters. Returns the result as JSON; to retrieve
+// output in CSV format specify "alt=csv" as a query parameter.
+func (r *ReportsService) Generate(startDate string, endDate string) *ReportsGenerateCall {
+	c := &ReportsGenerateCall{s: r.s, opt_: make(map[string]interface{})}
+	c.startDate = startDate
+	c.endDate = endDate
+	return c
+}
+
+// AccountId sets the optional parameter "accountId": Accounts upon
+// which to report.
+func (c *ReportsGenerateCall) AccountId(accountId string) *ReportsGenerateCall {
+	c.opt_["accountId"] = accountId
+	return c
+}
+
+// Currency sets the optional parameter "currency": Optional currency to
+// use when reporting on monetary metrics. Defaults to the account's
+// currency if not set.
+func (c *ReportsGenerateCall) Currency(currency string) *ReportsGenerateCall {
+	c.opt_["currency"] = currency
+	return c
+}
+
+// Dimension sets the optional parameter "dimension": Dimensions to base
+// the report on.
+func (c *ReportsGenerateCall) Dimension(dimension string) *ReportsGenerateCall {
+	c.opt_["dimension"] = dimension
+	return c
+}
+
+// Filter sets the optional parameter "filter": Filters to be run on the
+// report.
+func (c *ReportsGenerateCall) Filter(filter string) *ReportsGenerateCall {
+	c.opt_["filter"] = filter
+	return c
+}
+
+// Locale sets the optional parameter "locale": Optional locale to use
+// for translating report output to a local language. Defaults to
+// "en_US" if not specified.
+func (c *ReportsGenerateCall) Locale(locale string) *ReportsGenerateCall {
+	c.opt_["locale"] = locale
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of rows of report data to return.
+func (c *ReportsGenerateCall) MaxResults(maxResults int64) *ReportsGenerateCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// Metric sets the optional parameter "metric": Numeric columns to
+// include in the report.
+func (c *ReportsGenerateCall) Metric(metric string) *ReportsGenerateCall {
+	c.opt_["metric"] = metric
+	return c
+}
+
+// Sort sets the optional parameter "sort": The name of a dimension or
+// metric to sort the resulting report on, optionally prefixed with "+"
+// to sort ascending or "-" to sort descending. If no prefix is
+// specified, the column is sorted ascending.
+func (c *ReportsGenerateCall) Sort(sort string) *ReportsGenerateCall {
+	c.opt_["sort"] = sort
+	return c
+}
+
+// StartIndex sets the optional parameter "startIndex": Index of the
+// first row of report data to return.
+func (c *ReportsGenerateCall) StartIndex(startIndex int64) *ReportsGenerateCall {
+	c.opt_["startIndex"] = startIndex
+	return c
+}
+
+// UseTimezoneReporting sets the optional parameter
+// "useTimezoneReporting": Whether the report should be generated in the
+// AdSense account's local timezone. If false default PST/PDT timezone
+// will be used.
+func (c *ReportsGenerateCall) UseTimezoneReporting(useTimezoneReporting bool) *ReportsGenerateCall {
+	c.opt_["useTimezoneReporting"] = useTimezoneReporting
+	return c
+}
+
+func (c *ReportsGenerateCall) Do() (*AdsenseReportsGenerateResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	params.Set("endDate", fmt.Sprintf("%v", c.endDate))
+	params.Set("startDate", fmt.Sprintf("%v", c.startDate))
+	if v, ok := c.opt_["accountId"]; ok {
+		params.Set("accountId", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["currency"]; ok {
+		params.Set("currency", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["dimension"]; ok {
+		params.Set("dimension", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["filter"]; ok {
+		params.Set("filter", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["locale"]; ok {
+		params.Set("locale", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["maxResults"]; ok {
+		params.Set("maxResults", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["metric"]; ok {
+		params.Set("metric", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["sort"]; ok {
+		params.Set("sort", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["startIndex"]; ok {
+		params.Set("startIndex", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["useTimezoneReporting"]; ok {
+		params.Set("useTimezoneReporting", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "reports")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(AdsenseReportsGenerateResponse)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Generate an AdSense report based on the report request sent in the query parameters. Returns the result as JSON; to retrieve output in CSV format specify \"alt=csv\" as a query parameter.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.reports.generate",
+	//   "parameterOrder": [
+	//     "startDate",
+	//     "endDate"
+	//   ],
+	//   "parameters": {
+	//     "accountId": {
+	//       "description": "Accounts upon which to report.",
+	//       "location": "query",
+	//       "repeated": true,
+	//       "type": "string"
+	//     },
+	//     "currency": {
+	//       "description": "Optional currency to use when reporting on monetary metrics. Defaults to the account's currency if not set.",
+	//       "location": "query",
+	//       "pattern": "[a-zA-Z]+",
+	//       "type": "string"
+	//     },
+	//     "dimension": {
+	//       "description": "Dimensions to base the report on.",
+	//       "location": "query",
+	//       "pattern": "[a-zA-Z_]+",
+	//       "repeated": true,
+	//       "type": "string"
+	//     },
+	//     "endDate": {
+	//       "description": "End of the date range to report on in \"YYYY-MM-DD\" format, inclusive.",
+	//       "location": "query",
+	//       "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,2}?)",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "filter": {
+	//       "description": "Filters to be run on the report.",
+	//       "location": "query",
+	//       "pattern": "[a-zA-Z_]+(==|=@).+",
+	//       "repeated": true,
+	//       "type": "string"
+	//     },
+	//     "locale": {
+	//       "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.",
+	//       "location": "query",
+	//       "pattern": "[a-zA-Z_]+",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "description": "The maximum number of rows of report data to return.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "maximum": "50000",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "metric": {
+	//       "description": "Numeric columns to include in the report.",
+	//       "location": "query",
+	//       "pattern": "[a-zA-Z_]+",
+	//       "repeated": true,
+	//       "type": "string"
+	//     },
+	//     "sort": {
+	//       "description": "The name of a dimension or metric to sort the resulting report on, optionally prefixed with \"+\" to sort ascending or \"-\" to sort descending. If no prefix is specified, the column is sorted ascending.",
+	//       "location": "query",
+	//       "pattern": "(\\+|-)?[a-zA-Z_]+",
+	//       "repeated": true,
+	//       "type": "string"
+	//     },
+	//     "startDate": {
+	//       "description": "Start of the date range to report on in \"YYYY-MM-DD\" format, inclusive.",
+	//       "location": "query",
+	//       "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,2}?)",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "startIndex": {
+	//       "description": "Index of the first row of report data to return.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "maximum": "5000",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "useTimezoneReporting": {
+	//       "description": "Whether the report should be generated in the AdSense account's local timezone. If false default PST/PDT timezone will be used.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     }
+	//   },
+	//   "path": "reports",
+	//   "response": {
+	//     "$ref": "AdsenseReportsGenerateResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ],
+	//   "supportsMediaDownload": true
+	// }
+
+}
+
+// method id "adsense.reports.saved.generate":
+
+type ReportsSavedGenerateCall struct {
+	s             *Service
+	savedReportId string
+	opt_          map[string]interface{}
+}
+
+// Generate: Generate an AdSense report based on the saved report ID
+// sent in the query parameters.
+func (r *ReportsSavedService) Generate(savedReportId string) *ReportsSavedGenerateCall {
+	c := &ReportsSavedGenerateCall{s: r.s, opt_: make(map[string]interface{})}
+	c.savedReportId = savedReportId
+	return c
+}
+
+// Locale sets the optional parameter "locale": Optional locale to use
+// for translating report output to a local language. Defaults to
+// "en_US" if not specified.
+func (c *ReportsSavedGenerateCall) Locale(locale string) *ReportsSavedGenerateCall {
+	c.opt_["locale"] = locale
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of rows of report data to return.
+func (c *ReportsSavedGenerateCall) MaxResults(maxResults int64) *ReportsSavedGenerateCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// StartIndex sets the optional parameter "startIndex": Index of the
+// first row of report data to return.
+func (c *ReportsSavedGenerateCall) StartIndex(startIndex int64) *ReportsSavedGenerateCall {
+	c.opt_["startIndex"] = startIndex
+	return c
+}
+
+func (c *ReportsSavedGenerateCall) Do() (*AdsenseReportsGenerateResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	if v, ok := c.opt_["locale"]; ok {
+		params.Set("locale", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["maxResults"]; ok {
+		params.Set("maxResults", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["startIndex"]; ok {
+		params.Set("startIndex", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "reports/{savedReportId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{savedReportId}", url.QueryEscape(c.savedReportId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(AdsenseReportsGenerateResponse)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Generate an AdSense report based on the saved report ID sent in the query parameters.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.reports.saved.generate",
+	//   "parameterOrder": [
+	//     "savedReportId"
+	//   ],
+	//   "parameters": {
+	//     "locale": {
+	//       "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.",
+	//       "location": "query",
+	//       "pattern": "[a-zA-Z_]+",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "description": "The maximum number of rows of report data to return.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "maximum": "50000",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "savedReportId": {
+	//       "description": "The saved report to retrieve.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "startIndex": {
+	//       "description": "Index of the first row of report data to return.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "maximum": "5000",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     }
+	//   },
+	//   "path": "reports/{savedReportId}",
+	//   "response": {
+	//     "$ref": "AdsenseReportsGenerateResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "adsense.reports.saved.list":
+
+type ReportsSavedListCall struct {
+	s    *Service
+	opt_ map[string]interface{}
+}
+
+// List: List all saved reports in this AdSense account.
+func (r *ReportsSavedService) List() *ReportsSavedListCall {
+	c := &ReportsSavedListCall{s: r.s, opt_: make(map[string]interface{})}
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of saved reports to include in the response, used for paging.
+func (c *ReportsSavedListCall) MaxResults(maxResults int64) *ReportsSavedListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": A continuation
+// token, used to page through saved reports. To retrieve the next page,
+// set this parameter to the value of "nextPageToken" from the previous
+// response.
+func (c *ReportsSavedListCall) PageToken(pageToken string) *ReportsSavedListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *ReportsSavedListCall) Do() (*SavedReports, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "reports/saved")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(SavedReports)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "List all saved reports in this AdSense account.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.reports.saved.list",
+	//   "parameters": {
+	//     "maxResults": {
+	//       "description": "The maximum number of saved reports to include in the response, used for paging.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "maximum": "100",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "A continuation token, used to page through saved reports. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "reports/saved",
+	//   "response": {
+	//     "$ref": "SavedReports"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "adsense.savedadstyles.get":
+
+type SavedadstylesGetCall struct {
+	s              *Service
+	savedAdStyleId string
+	opt_           map[string]interface{}
+}
+
+// Get: Get a specific saved ad style from the user's account.
+func (r *SavedadstylesService) Get(savedAdStyleId string) *SavedadstylesGetCall {
+	c := &SavedadstylesGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.savedAdStyleId = savedAdStyleId
+	return c
+}
+
+func (c *SavedadstylesGetCall) Do() (*SavedAdStyle, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "savedadstyles/{savedAdStyleId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{savedAdStyleId}", url.QueryEscape(c.savedAdStyleId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(SavedAdStyle)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Get a specific saved ad style from the user's account.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.savedadstyles.get",
+	//   "parameterOrder": [
+	//     "savedAdStyleId"
+	//   ],
+	//   "parameters": {
+	//     "savedAdStyleId": {
+	//       "description": "Saved ad style to retrieve.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "savedadstyles/{savedAdStyleId}",
+	//   "response": {
+	//     "$ref": "SavedAdStyle"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "adsense.savedadstyles.list":
+
+type SavedadstylesListCall struct {
+	s    *Service
+	opt_ map[string]interface{}
+}
+
+// List: List all saved ad styles in the user's account.
+func (r *SavedadstylesService) List() *SavedadstylesListCall {
+	c := &SavedadstylesListCall{s: r.s, opt_: make(map[string]interface{})}
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of saved ad styles to include in the response, used for
+// paging.
+func (c *SavedadstylesListCall) MaxResults(maxResults int64) *SavedadstylesListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": A continuation
+// token, used to page through saved ad styles. To retrieve the next
+// page, set this parameter to the value of "nextPageToken" from the
+// previous response.
+func (c *SavedadstylesListCall) PageToken(pageToken string) *SavedadstylesListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *SavedadstylesListCall) Do() (*SavedAdStyles, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "savedadstyles")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(SavedAdStyles)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "List all saved ad styles in the user's account.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.savedadstyles.list",
+	//   "parameters": {
+	//     "maxResults": {
+	//       "description": "The maximum number of saved ad styles to include in the response, used for paging.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "maximum": "10000",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "A continuation token, used to page through saved ad styles. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "savedadstyles",
+	//   "response": {
+	//     "$ref": "SavedAdStyles"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "adsense.urlchannels.list":
+
+type UrlchannelsListCall struct {
+	s          *Service
+	adClientId string
+	opt_       map[string]interface{}
+}
+
+// List: List all URL channels in the specified ad client for this
+// AdSense account.
+func (r *UrlchannelsService) List(adClientId string) *UrlchannelsListCall {
+	c := &UrlchannelsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.adClientId = adClientId
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of URL channels to include in the response, used for paging.
+func (c *UrlchannelsListCall) MaxResults(maxResults int64) *UrlchannelsListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": A continuation
+// token, used to page through URL channels. To retrieve the next page,
+// set this parameter to the value of "nextPageToken" from the previous
+// response.
+func (c *UrlchannelsListCall) PageToken(pageToken string) *UrlchannelsListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *UrlchannelsListCall) Do() (*UrlChannels, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.4/", "adclients/{adClientId}/urlchannels")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(UrlChannels)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "List all URL channels in the specified ad client for this AdSense account.",
+	//   "httpMethod": "GET",
+	//   "id": "adsense.urlchannels.list",
+	//   "parameterOrder": [
+	//     "adClientId"
+	//   ],
+	//   "parameters": {
+	//     "adClientId": {
+	//       "description": "Ad client for which to list URL channels.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "description": "The maximum number of URL channels to include in the response, used for paging.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "maximum": "10000",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "A continuation token, used to page through URL channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "adclients/{adClientId}/urlchannels",
+	//   "response": {
+	//     "$ref": "UrlChannels"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adsense",
+	//     "https://www.googleapis.com/auth/adsense.readonly"
+	//   ]
+	// }
+
+}
diff --git a/adsensehost/v4.1/adsensehost-api.json b/adsensehost/v4.1/adsensehost-api.json
index 4a73fdb..c8ae8b9 100644
--- a/adsensehost/v4.1/adsensehost-api.json
+++ b/adsensehost/v4.1/adsensehost-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/1hrRzaBS8FwqKkt0ogZXiOU-RwQ\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/1hrRzaBS8FwqKkt0ogZXiOU-RwQ\"",
  "discoveryVersion": "v1",
  "id": "adsensehost:v4.1",
  "name": "adsensehost",
diff --git a/analytics/v2.4/analytics-api.json b/analytics/v2.4/analytics-api.json
index 1316af1..3bf58f0 100644
--- a/analytics/v2.4/analytics-api.json
+++ b/analytics/v2.4/analytics-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/g0dlAqv19pD_cw5NLrQ2z9eB7ig\"",
+ "etag": "\"qMhxoRFWKZK4K3KdZJuqms1o3fc/g0dlAqv19pD_cw5NLrQ2z9eB7ig\"",
  "discoveryVersion": "v1",
  "id": "analytics:v2.4",
  "name": "analytics",
diff --git a/analytics/v3/analytics-api.json b/analytics/v3/analytics-api.json
index f57a898..3f9b83c 100644
--- a/analytics/v3/analytics-api.json
+++ b/analytics/v3/analytics-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/ZzLfvhn8YaxUZ9ssb3cdYypOzK0\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/9Mb__zWkdivLUYRry6KufGQ683g\"",
  "discoveryVersion": "v1",
  "id": "analytics:v3",
  "name": "analytics",
@@ -72,7 +72,7 @@
      "description": "View and manage your Google Analytics data"
     },
     "https://www.googleapis.com/auth/analytics.edit": {
-     "description": "New service: https://www.googleapis.com/auth/analytics.edit"
+     "description": "Edit Google Analytics management entities"
     },
     "https://www.googleapis.com/auth/analytics.manage.users": {
      "description": "Manage Google Analytics Account users by email address"
@@ -241,7 +241,7 @@
      "description": "Map of attribute name and value for this column.",
      "additionalProperties": {
       "type": "string",
-      "description": "Name and value of an attribute."
+      "description": "The name of the attribute."
      }
     },
     "id": {
@@ -707,7 +707,7 @@
      "description": "Notes about this experiment."
     },
     "editableInGaUi": {
-     "type": "any",
+     "type": "boolean",
      "description": "If true, the end user will be able to edit the experiment via the Google Analytics user interface."
     },
     "endTime": {
@@ -793,7 +793,7 @@
      "description": "Link for this experiment. This field is read-only."
     },
     "servingFramework": {
-     "type": "any",
+     "type": "string",
      "description": "The framework used to serve the experiment variations and evaluate the results. One of:  \n- REDIRECT: Google Analytics redirects traffic to different variation pages, reports the chosen variation and evaluates the results.\n- API: Google Analytics chooses and reports the variation to serve and evaluates the results; the caller is responsible for serving the selected variation.\n- EXTERNAL: The variations will be served externally and the chosen variation reported to Google Analytics. The caller is responsible for serving the selected variation and evaluating the results."
     },
     "snippet": {
@@ -952,6 +952,47 @@
      "type": "boolean",
      "description": "Determines if Analytics data contains samples."
     },
+    "dataTable": {
+     "type": "object",
+     "properties": {
+      "cols": {
+       "type": "array",
+       "items": {
+        "type": "object",
+        "properties": {
+         "id": {
+          "type": "string"
+         },
+         "label": {
+          "type": "string"
+         },
+         "type": {
+          "type": "string"
+         }
+        }
+       }
+      },
+      "rows": {
+       "type": "array",
+       "items": {
+        "type": "object",
+        "properties": {
+         "c": {
+          "type": "array",
+          "items": {
+           "type": "object",
+           "properties": {
+            "v": {
+             "type": "string"
+            }
+           }
+          }
+         }
+        }
+       }
+      }
+     }
+    },
     "id": {
      "type": "string",
      "description": "Unique ID for this data response."
@@ -2191,7 +2232,7 @@
     },
     "industryVertical": {
      "type": "string",
-     "description": "The industry vertical/category selected for this web property. If this field is set, the correct values are:  \n- UNSPECIFIED  \n- ARTS_AND_ENTERTAINMENT  \n- AUTOMOTIVE  \n- BEAUTY_AND_FITNESS  \n- BOOKS_AND_LITERATURE  \n- BUSINESS_AND_INDUSTRIAL_MARKETS  \n- COMPUTERS_AND_ELECTRONICS  \n- FINANCE  \n- FOOD_AND_DRINK  \n- GAMES  \n- HEALTHCARE  \n- HOBBIES_AND_LEISURE  \n- HOME_AND_GARDEN  \n- INTERNET_AND_TELECOM  \n- JOBS_AND_EDUCATION  \n- LAW_AND_GOVERNMENT  \n- NEWS  \n- ONLINE_COMMUNITIES  \n- OTHER  \n- PEOPLE_AND_SOCIETY  \n- PETS_AND_ANIMALS  \n- REAL_ESTATE  \n- REFERENCE  \n- SCIENCE  \n- SHOPPING  \n- SPORTS  \n- TRAVEL"
+     "description": "The industry vertical/category selected for this web property."
     },
     "internalWebPropertyId": {
      "type": "string",
@@ -2316,6 +2357,19 @@
          "pattern": "ga:.+",
          "location": "query"
         },
+        "output": {
+         "type": "string",
+         "description": "The selected format for the response. Default format is JSON.",
+         "enum": [
+          "dataTable",
+          "json"
+         ],
+         "enumDescriptions": [
+          "Returns the response in Google Charts Data Table format. This is useful in creating visualization using Google Charts.",
+          "Returns the response in standard JSON format."
+         ],
+         "location": "query"
+        },
         "samplingLevel": {
          "type": "string",
          "description": "The desired sampling level.",
@@ -4099,7 +4153,7 @@
        "id": "analytics.management.uploads.uploadData",
        "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/uploads",
        "httpMethod": "POST",
-       "description": "Upload/Overwrite data for a custom data source.",
+       "description": "Upload data for a custom data source.",
        "parameters": {
         "accountId": {
          "type": "string",
@@ -4193,7 +4247,7 @@
        "id": "analytics.management.webproperties.insert",
        "path": "management/accounts/{accountId}/webproperties",
        "httpMethod": "POST",
-       "description": "Create a new property if the account has fewer than 20 properties.",
+       "description": "Create a new property if the account has fewer than 20 properties. Web properties are visible in the Google Analytics interface only if they have at least one profile.",
        "parameters": {
         "accountId": {
          "type": "string",
diff --git a/analytics/v3/analytics-gen.go b/analytics/v3/analytics-gen.go
index 63a766e..e90b30a 100644
--- a/analytics/v3/analytics-gen.go
+++ b/analytics/v3/analytics-gen.go
@@ -44,7 +44,7 @@
 	// View and manage your Google Analytics data
 	AnalyticsScope = "https://www.googleapis.com/auth/analytics"
 
-	// New service: https://www.googleapis.com/auth/analytics.edit
+	// Edit Google Analytics management entities
 	AnalyticsEditScope = "https://www.googleapis.com/auth/analytics.edit"
 
 	// Manage Google Analytics Account users by email address
@@ -707,7 +707,7 @@
 
 	// EditableInGaUi: If true, the end user will be able to edit the
 	// experiment via the Google Analytics user interface.
-	EditableInGaUi interface{} `json:"editableInGaUi,omitempty"`
+	EditableInGaUi bool `json:"editableInGaUi,omitempty"`
 
 	// EndTime: The ending time of the experiment (the time the status
 	// changed from RUNNING to ENDED). This field is present only if the
@@ -794,7 +794,7 @@
 	// EXTERNAL: The variations will be served externally and the chosen
 	// variation reported to Google Analytics. The caller is responsible for
 	// serving the selected variation and evaluating the results.
-	ServingFramework interface{} `json:"servingFramework,omitempty"`
+	ServingFramework string `json:"servingFramework,omitempty"`
 
 	// Snippet: The snippet of code to include on the control page(s). This
 	// field is read-only.
@@ -915,6 +915,8 @@
 	// ContainsSampledData: Determines if Analytics data contains samples.
 	ContainsSampledData bool `json:"containsSampledData,omitempty"`
 
+	DataTable *GaDataDataTable `json:"dataTable,omitempty"`
+
 	// Id: Unique ID for this data response.
 	Id string `json:"id,omitempty"`
 
@@ -979,6 +981,28 @@
 	Name string `json:"name,omitempty"`
 }
 
+type GaDataDataTable struct {
+	Cols []*GaDataDataTableCols `json:"cols,omitempty"`
+
+	Rows []*GaDataDataTableRows `json:"rows,omitempty"`
+}
+
+type GaDataDataTableCols struct {
+	Id string `json:"id,omitempty"`
+
+	Label string `json:"label,omitempty"`
+
+	Type string `json:"type,omitempty"`
+}
+
+type GaDataDataTableRows struct {
+	C []*GaDataDataTableRowsC `json:"c,omitempty"`
+}
+
+type GaDataDataTableRowsC struct {
+	V string `json:"v,omitempty"`
+}
+
 type GaDataProfileInfo struct {
 	// AccountId: Account ID to which this view (profile) belongs.
 	AccountId string `json:"accountId,omitempty"`
@@ -1815,43 +1839,7 @@
 	Id string `json:"id,omitempty"`
 
 	// IndustryVertical: The industry vertical/category selected for this
-	// web property. If this field is set, the correct values are:
-	// -
-	// UNSPECIFIED
-	// - ARTS_AND_ENTERTAINMENT
-	// - AUTOMOTIVE
-	// -
-	// BEAUTY_AND_FITNESS
-	// - BOOKS_AND_LITERATURE
-	// -
-	// BUSINESS_AND_INDUSTRIAL_MARKETS
-	// - COMPUTERS_AND_ELECTRONICS
-	// -
-	// FINANCE
-	// - FOOD_AND_DRINK
-	// - GAMES
-	// - HEALTHCARE
-	// -
-	// HOBBIES_AND_LEISURE
-	// - HOME_AND_GARDEN
-	// - INTERNET_AND_TELECOM
-	// -
-	// JOBS_AND_EDUCATION
-	// - LAW_AND_GOVERNMENT
-	// - NEWS
-	// -
-	// ONLINE_COMMUNITIES
-	// - OTHER
-	// - PEOPLE_AND_SOCIETY
-	// -
-	// PETS_AND_ANIMALS
-	// - REAL_ESTATE
-	// - REFERENCE
-	// - SCIENCE
-	// -
-	// SHOPPING
-	// - SPORTS
-	// - TRAVEL
+	// web property.
 	IndustryVertical string `json:"industryVertical,omitempty"`
 
 	// InternalWebPropertyId: Internal ID for this web property.
@@ -1953,6 +1941,13 @@
 	return c
 }
 
+// Output sets the optional parameter "output": The selected format for
+// the response. Default format is JSON.
+func (c *DataGaGetCall) Output(output string) *DataGaGetCall {
+	c.opt_["output"] = output
+	return c
+}
+
 // SamplingLevel sets the optional parameter "samplingLevel": The
 // desired sampling level.
 func (c *DataGaGetCall) SamplingLevel(samplingLevel string) *DataGaGetCall {
@@ -2000,6 +1995,9 @@
 	if v, ok := c.opt_["max-results"]; ok {
 		params.Set("max-results", fmt.Sprintf("%v", v))
 	}
+	if v, ok := c.opt_["output"]; ok {
+		params.Set("output", fmt.Sprintf("%v", v))
+	}
 	if v, ok := c.opt_["samplingLevel"]; ok {
 		params.Set("samplingLevel", fmt.Sprintf("%v", v))
 	}
@@ -2080,6 +2078,19 @@
 	//       "required": true,
 	//       "type": "string"
 	//     },
+	//     "output": {
+	//       "description": "The selected format for the response. Default format is JSON.",
+	//       "enum": [
+	//         "dataTable",
+	//         "json"
+	//       ],
+	//       "enumDescriptions": [
+	//         "Returns the response in Google Charts Data Table format. This is useful in creating visualization using Google Charts.",
+	//         "Returns the response in standard JSON format."
+	//       ],
+	//       "location": "query",
+	//       "type": "string"
+	//     },
 	//     "samplingLevel": {
 	//       "description": "The desired sampling level.",
 	//       "enum": [
@@ -5950,7 +5961,7 @@
 	media_             io.Reader
 }
 
-// UploadData: Upload/Overwrite data for a custom data source.
+// UploadData: Upload data for a custom data source.
 func (r *ManagementUploadsService) UploadData(accountId string, webPropertyId string, customDataSourceId string) *ManagementUploadsUploadDataCall {
 	c := &ManagementUploadsUploadDataCall{s: r.s, opt_: make(map[string]interface{})}
 	c.accountId = accountId
@@ -6000,7 +6011,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Upload/Overwrite data for a custom data source.",
+	//   "description": "Upload data for a custom data source.",
 	//   "httpMethod": "POST",
 	//   "id": "analytics.management.uploads.uploadData",
 	//   "mediaUpload": {
@@ -6146,7 +6157,8 @@
 }
 
 // Insert: Create a new property if the account has fewer than 20
-// properties.
+// properties. Web properties are visible in the Google Analytics
+// interface only if they have at least one profile.
 func (r *ManagementWebpropertiesService) Insert(accountId string, webproperty *Webproperty) *ManagementWebpropertiesInsertCall {
 	c := &ManagementWebpropertiesInsertCall{s: r.s, opt_: make(map[string]interface{})}
 	c.accountId = accountId
@@ -6184,7 +6196,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Create a new property if the account has fewer than 20 properties.",
+	//   "description": "Create a new property if the account has fewer than 20 properties. Web properties are visible in the Google Analytics interface only if they have at least one profile.",
 	//   "httpMethod": "POST",
 	//   "id": "analytics.management.webproperties.insert",
 	//   "parameterOrder": [
diff --git a/androidpublisher/v1.1/androidpublisher-api.json b/androidpublisher/v1.1/androidpublisher-api.json
index 11b36fa..a4b0be5 100644
--- a/androidpublisher/v1.1/androidpublisher-api.json
+++ b/androidpublisher/v1.1/androidpublisher-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/rbFsgXrSsgoNou2PDhCGXSJHp3w\"",
+ "etag": "\"qMhxoRFWKZK4K3KdZJuqms1o3fc/rbFsgXrSsgoNou2PDhCGXSJHp3w\"",
  "discoveryVersion": "v1",
  "id": "androidpublisher:v1.1",
  "name": "androidpublisher",
diff --git a/androidpublisher/v1/androidpublisher-api.json b/androidpublisher/v1/androidpublisher-api.json
index 56717a5..b368d9b 100644
--- a/androidpublisher/v1/androidpublisher-api.json
+++ b/androidpublisher/v1/androidpublisher-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/8QGfdt_0KvVRl31kpTeGh_Y8UjM\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/8QGfdt_0KvVRl31kpTeGh_Y8UjM\"",
  "discoveryVersion": "v1",
  "id": "androidpublisher:v1",
  "name": "androidpublisher",
diff --git a/appstate/v1/appstate-api.json b/appstate/v1/appstate-api.json
index bb4c2b5..c120fc7 100644
--- a/appstate/v1/appstate-api.json
+++ b/appstate/v1/appstate-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/AYfjpxNKrbZsbCPO5ZP75STX_0g\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/AYfjpxNKrbZsbCPO5ZP75STX_0g\"",
  "discoveryVersion": "v1",
  "id": "appstate:v1",
  "name": "appstate",
diff --git a/audit/v1/audit-api.json b/audit/v1/audit-api.json
index cfe46b0..347a10d 100644
--- a/audit/v1/audit-api.json
+++ b/audit/v1/audit-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/FnodQzLqRh_xHIkICK4PBBoHaLA\"",
+ "etag": "\"qMhxoRFWKZK4K3KdZJuqms1o3fc/FnodQzLqRh_xHIkICK4PBBoHaLA\"",
  "discoveryVersion": "v1",
  "id": "audit:v1",
  "name": "audit",
diff --git a/bigquery/v2/bigquery-api.json b/bigquery/v2/bigquery-api.json
index 4db80d4..32d05e7 100644
--- a/bigquery/v2/bigquery-api.json
+++ b/bigquery/v2/bigquery-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/JD9FB7iv8kKN81JcUTjacJleqmo\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/Kv0rhP9unqs8S9LiqPR3dzZNvDk\"",
  "discoveryVersion": "v1",
  "id": "bigquery:v2",
  "name": "bigquery",
@@ -498,7 +498,7 @@
    "properties": {
     "allowLargeResults": {
      "type": "boolean",
-     "description": "[Experimental] If true, allows \u003e128M results to be materialized in the destination table. Requires destination_table to be set."
+     "description": "If true, allows the query to produce arbitrarily large result tables at a slight cost in performance. Requires destination_table to be set."
     },
     "createDisposition": {
      "type": "string",
@@ -602,6 +602,10 @@
        "status": {
         "$ref": "JobStatus",
         "description": "[Full-projection-only] Describes the state of the job."
+       },
+       "user_email": {
+        "type": "string",
+        "description": "[Full-projection-only] User who ran the job."
        }
       }
      }
@@ -1082,6 +1086,10 @@
    "id": "TableFieldSchema",
    "type": "object",
    "properties": {
+    "description": {
+     "type": "string",
+     "description": "[Optional] The field description."
+    },
     "fields": {
      "type": "array",
      "description": "[Optional] Describes the nested schema fields if the type property is set to RECORD.",
@@ -1536,8 +1544,7 @@
      "supportsMediaUpload": true,
      "mediaUpload": {
       "accept": [
-       "application/octet-stream",
-       "text/csv"
+       "*/*"
       ],
       "protocols": {
        "simple": {
diff --git a/bigquery/v2/bigquery-gen.go b/bigquery/v2/bigquery-gen.go
index 692346d..3224a2a 100644
--- a/bigquery/v2/bigquery-gen.go
+++ b/bigquery/v2/bigquery-gen.go
@@ -513,9 +513,9 @@
 }
 
 type JobConfigurationQuery struct {
-	// AllowLargeResults: [Experimental] If true, allows >128M results to be
-	// materialized in the destination table. Requires destination_table to
-	// be set.
+	// AllowLargeResults: If true, allows the query to produce arbitrarily
+	// large result tables at a slight cost in performance. Requires
+	// destination_table to be set.
 	AllowLargeResults bool `json:"allowLargeResults,omitempty"`
 
 	// CreateDisposition: [Optional] Whether to create the table if it
@@ -622,6 +622,9 @@
 
 	// Status: [Full-projection-only] Describes the state of the job.
 	Status *JobStatus `json:"status,omitempty"`
+
+	// User_email: [Full-projection-only] User who ran the job.
+	User_email string `json:"user_email,omitempty"`
 }
 
 type JobReference struct {
@@ -946,6 +949,9 @@
 }
 
 type TableFieldSchema struct {
+	// Description: [Optional] The field description.
+	Description string `json:"description,omitempty"`
+
 	// Fields: [Optional] Describes the nested schema fields if the type
 	// property is set to RECORD.
 	Fields []*TableFieldSchema `json:"fields,omitempty"`
@@ -1823,8 +1829,7 @@
 	//   "id": "bigquery.jobs.insert",
 	//   "mediaUpload": {
 	//     "accept": [
-	//       "application/octet-stream",
-	//       "text/csv"
+	//       "*/*"
 	//     ],
 	//     "protocols": {
 	//       "resumable": {
diff --git a/blogger/v2/blogger-api.json b/blogger/v2/blogger-api.json
index 948e6f7..f292a92 100644
--- a/blogger/v2/blogger-api.json
+++ b/blogger/v2/blogger-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/7OUX8PWQu-_Ueqls9RjxxnFExMI\"",
+ "etag": "\"qMhxoRFWKZK4K3KdZJuqms1o3fc/7OUX8PWQu-_Ueqls9RjxxnFExMI\"",
  "discoveryVersion": "v1",
  "id": "blogger:v2",
  "name": "blogger",
diff --git a/blogger/v3/blogger-api.json b/blogger/v3/blogger-api.json
index 53caa83..2e43188 100644
--- a/blogger/v3/blogger-api.json
+++ b/blogger/v3/blogger-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/HqXrvEeuZV7fVbX7lTgVYLdSy_g\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/HqXrvEeuZV7fVbX7lTgVYLdSy_g\"",
  "discoveryVersion": "v1",
  "id": "blogger:v3",
  "name": "blogger",
diff --git a/books/v1/books-api.json b/books/v1/books-api.json
index 929ffbd..5ef8148 100644
--- a/books/v1/books-api.json
+++ b/books/v1/books-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/lKQvoyQ9jVAixOyz9qwZmCcUu-Q\"",
+ "etag": "\"qMhxoRFWKZK4K3KdZJuqms1o3fc/_kJQrsC49uCIVjQXyjfnVM-Qka8\"",
  "discoveryVersion": "v1",
  "id": "books:v1",
  "name": "books",
@@ -1192,6 +1192,10 @@
        "type": "boolean",
        "description": "Whether or not this book is public domain in the country listed above."
       },
+      "quoteSharingAllowed": {
+       "type": "boolean",
+       "description": "Whether quote sharing is allowed for this volume."
+      },
       "textToSpeechPermission": {
        "type": "string",
        "description": "Whether text-to-speech is permitted for this volume. Values can be ALLOWED, ALLOWED_FOR_ACCESSIBILITY, or NOT_ALLOWED."
@@ -1576,7 +1580,7 @@
       },
       "pageCount": {
        "type": "integer",
-       "description": "Total number of pages.",
+       "description": "Total number of pages as per publisher metadata.",
        "format": "int32"
       },
       "previewLink": {
@@ -1587,6 +1591,11 @@
        "type": "string",
        "description": "Type of publication of this volume. Possible values are BOOK or MAGAZINE."
       },
+      "printedPageCount": {
+       "type": "integer",
+       "description": "Total number of printed pages in generated pdf representation.",
+       "format": "int32"
+      },
       "publishedDate": {
        "type": "string",
        "description": "Date of publication. (In LITE projection.)"
@@ -2050,6 +2059,11 @@
        "httpMethod": "GET",
        "description": "Gets the annotation data.",
        "parameters": {
+        "allowWebDefinitions": {
+         "type": "boolean",
+         "description": "For the dictionary layer. Whether or not to allow web definitions.",
+         "location": "query"
+        },
         "annotationDataId": {
          "type": "string",
          "description": "The ID of the annotation data to retrieve.",
@@ -2641,6 +2655,12 @@
          "description": "The layer ID to limit annotation by.",
          "location": "query"
         },
+        "layerIds": {
+         "type": "string",
+         "description": "The layer ID(s) to limit annotation by.",
+         "repeated": true,
+         "location": "query"
+        },
         "maxResults": {
          "type": "integer",
          "description": "Maximum number of results to return",
diff --git a/books/v1/books-gen.go b/books/v1/books-gen.go
index 05253d5..3e61287 100644
--- a/books/v1/books-gen.go
+++ b/books/v1/books-gen.go
@@ -1053,6 +1053,10 @@
 	// country listed above.
 	PublicDomain bool `json:"publicDomain,omitempty"`
 
+	// QuoteSharingAllowed: Whether quote sharing is allowed for this
+	// volume.
+	QuoteSharingAllowed bool `json:"quoteSharingAllowed,omitempty"`
+
 	// TextToSpeechPermission: Whether text-to-speech is permitted for this
 	// volume. Values can be ALLOWED, ALLOWED_FOR_ACCESSIBILITY, or
 	// NOT_ALLOWED.
@@ -1320,7 +1324,7 @@
 	// highest weight.
 	MainCategory string `json:"mainCategory,omitempty"`
 
-	// PageCount: Total number of pages.
+	// PageCount: Total number of pages as per publisher metadata.
 	PageCount int64 `json:"pageCount,omitempty"`
 
 	// PreviewLink: URL to preview this volume on the Google Books site.
@@ -1330,6 +1334,10 @@
 	// BOOK or MAGAZINE.
 	PrintType string `json:"printType,omitempty"`
 
+	// PrintedPageCount: Total number of printed pages in generated pdf
+	// representation.
+	PrintedPageCount int64 `json:"printedPageCount,omitempty"`
+
 	// PublishedDate: Date of publication. (In LITE projection.)
 	PublishedDate string `json:"publishedDate,omitempty"`
 
@@ -2276,6 +2284,14 @@
 	return c
 }
 
+// AllowWebDefinitions sets the optional parameter
+// "allowWebDefinitions": For the dictionary layer. Whether or not to
+// allow web definitions.
+func (c *LayersAnnotationDataGetCall) AllowWebDefinitions(allowWebDefinitions bool) *LayersAnnotationDataGetCall {
+	c.opt_["allowWebDefinitions"] = allowWebDefinitions
+	return c
+}
+
 // H sets the optional parameter "h": The requested pixel height for any
 // images. If height is provided width must also be provided.
 func (c *LayersAnnotationDataGetCall) H(h int64) *LayersAnnotationDataGetCall {
@@ -2317,6 +2333,9 @@
 	params := make(url.Values)
 	params.Set("alt", "json")
 	params.Set("contentVersion", fmt.Sprintf("%v", c.contentVersion))
+	if v, ok := c.opt_["allowWebDefinitions"]; ok {
+		params.Set("allowWebDefinitions", fmt.Sprintf("%v", v))
+	}
 	if v, ok := c.opt_["h"]; ok {
 		params.Set("h", fmt.Sprintf("%v", v))
 	}
@@ -2364,6 +2383,11 @@
 	//     "contentVersion"
 	//   ],
 	//   "parameters": {
+	//     "allowWebDefinitions": {
+	//       "description": "For the dictionary layer. Whether or not to allow web definitions.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     },
 	//     "annotationDataId": {
 	//       "description": "The ID of the annotation data to retrieve.",
 	//       "location": "path",
@@ -3728,6 +3752,13 @@
 	return c
 }
 
+// LayerIds sets the optional parameter "layerIds": The layer ID(s) to
+// limit annotation by.
+func (c *MylibraryAnnotationsListCall) LayerIds(layerIds string) *MylibraryAnnotationsListCall {
+	c.opt_["layerIds"] = layerIds
+	return c
+}
+
 // MaxResults sets the optional parameter "maxResults": Maximum number
 // of results to return
 func (c *MylibraryAnnotationsListCall) MaxResults(maxResults int64) *MylibraryAnnotationsListCall {
@@ -3797,6 +3828,9 @@
 	if v, ok := c.opt_["layerId"]; ok {
 		params.Set("layerId", fmt.Sprintf("%v", v))
 	}
+	if v, ok := c.opt_["layerIds"]; ok {
+		params.Set("layerIds", fmt.Sprintf("%v", v))
+	}
 	if v, ok := c.opt_["maxResults"]; ok {
 		params.Set("maxResults", fmt.Sprintf("%v", v))
 	}
@@ -3854,6 +3888,12 @@
 	//       "location": "query",
 	//       "type": "string"
 	//     },
+	//     "layerIds": {
+	//       "description": "The layer ID(s) to limit annotation by.",
+	//       "location": "query",
+	//       "repeated": true,
+	//       "type": "string"
+	//     },
 	//     "maxResults": {
 	//       "description": "Maximum number of results to return",
 	//       "format": "uint32",
diff --git a/calendar/v3/calendar-api.json b/calendar/v3/calendar-api.json
index 6a6fc66..231e962 100644
--- a/calendar/v3/calendar-api.json
+++ b/calendar/v3/calendar-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/CprmxbC_n4VJOa4m78gYggaU4m4\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/7bHhm7vCoG5YbslN6b0grHMC-oY\"",
  "discoveryVersion": "v1",
  "id": "calendar:v3",
  "name": "calendar",
@@ -1029,7 +1029,7 @@
     },
     "value": {
      "type": "string",
-     "description": "Value of the user setting. The format of the value depends on the ID of the setting. It must always be any UTF-8 string of length up to 1024 characters."
+     "description": "Value of the user setting. The format of the value depends on the ID of the setting. It must always be a UTF-8 string of length up to 1024 characters."
     }
    }
   },
@@ -1180,7 +1180,8 @@
      },
      "scopes": [
       "https://www.googleapis.com/auth/calendar"
-     ]
+     ],
+     "supportsSubscription": true
     },
     "patch": {
      "id": "calendar.acl.patch",
@@ -1884,11 +1885,23 @@
        "description": "Token specifying which result page to return. Optional.",
        "location": "query"
       },
+      "privateExtendedProperty": {
+       "type": "string",
+       "description": "Extended properties constraint specified as propertyName=value. Matches only private properties. This parameter might be repeated multiple times to return events that match all given constraints.",
+       "repeated": true,
+       "location": "query"
+      },
       "q": {
        "type": "string",
        "description": "Free text search terms to find events that match these terms in any field, except for extended properties. Optional.",
        "location": "query"
       },
+      "sharedExtendedProperty": {
+       "type": "string",
+       "description": "Extended properties constraint specified as propertyName=value. Matches only shared properties. This parameter might be repeated multiple times to return events that match all given constraints.",
+       "repeated": true,
+       "location": "query"
+      },
       "showDeleted": {
        "type": "boolean",
        "description": "Whether to include deleted events (with 'status' equals 'cancelled') in the result. Cancelled instances of recurring events (but not the underlying recurring event) will still be included if 'showDeleted' and 'singleEvents' are both False. If 'showDeleted' and 'singleEvents' are both True, only single instances of deleted events (but not the underlying recurring events) are returned. Optional. The default is False.",
@@ -2171,11 +2184,23 @@
        "description": "Token specifying which result page to return. Optional.",
        "location": "query"
       },
+      "privateExtendedProperty": {
+       "type": "string",
+       "description": "Extended properties constraint specified as propertyName=value. Matches only private properties. This parameter might be repeated multiple times to return events that match all given constraints.",
+       "repeated": true,
+       "location": "query"
+      },
       "q": {
        "type": "string",
        "description": "Free text search terms to find events that match these terms in any field, except for extended properties. Optional.",
        "location": "query"
       },
+      "sharedExtendedProperty": {
+       "type": "string",
+       "description": "Extended properties constraint specified as propertyName=value. Matches only shared properties. This parameter might be repeated multiple times to return events that match all given constraints.",
+       "repeated": true,
+       "location": "query"
+      },
       "showDeleted": {
        "type": "boolean",
        "description": "Whether to include deleted events (with 'status' equals 'cancelled') in the result. Cancelled instances of recurring events (but not the underlying recurring event) will still be included if 'showDeleted' and 'singleEvents' are both False. If 'showDeleted' and 'singleEvents' are both True, only single instances of deleted events (but not the underlying recurring events) are returned. Optional. The default is False.",
diff --git a/calendar/v3/calendar-gen.go b/calendar/v3/calendar-gen.go
index 8e25da1..6aab9bb 100644
--- a/calendar/v3/calendar-gen.go
+++ b/calendar/v3/calendar-gen.go
@@ -904,8 +904,8 @@
 	Kind string `json:"kind,omitempty"`
 
 	// Value: Value of the user setting. The format of the value depends on
-	// the ID of the setting. It must always be any UTF-8 string of length
-	// up to 1024 characters.
+	// the ID of the setting. It must always be a UTF-8 string of length up
+	// to 1024 characters.
 	Value string `json:"value,omitempty"`
 }
 
@@ -1204,7 +1204,8 @@
 	//   },
 	//   "scopes": [
 	//     "https://www.googleapis.com/auth/calendar"
-	//   ]
+	//   ],
+	//   "supportsSubscription": true
 	// }
 
 }
@@ -3089,6 +3090,16 @@
 	return c
 }
 
+// PrivateExtendedProperty sets the optional parameter
+// "privateExtendedProperty": Extended properties constraint specified
+// as propertyName=value. Matches only private properties. This
+// parameter might be repeated multiple times to return events that
+// match all given constraints.
+func (c *EventsListCall) PrivateExtendedProperty(privateExtendedProperty string) *EventsListCall {
+	c.opt_["privateExtendedProperty"] = privateExtendedProperty
+	return c
+}
+
 // Q sets the optional parameter "q": Free text search terms to find
 // events that match these terms in any field, except for extended
 // properties.
@@ -3097,6 +3108,16 @@
 	return c
 }
 
+// SharedExtendedProperty sets the optional parameter
+// "sharedExtendedProperty": Extended properties constraint specified as
+// propertyName=value. Matches only shared properties. This parameter
+// might be repeated multiple times to return events that match all
+// given constraints.
+func (c *EventsListCall) SharedExtendedProperty(sharedExtendedProperty string) *EventsListCall {
+	c.opt_["sharedExtendedProperty"] = sharedExtendedProperty
+	return c
+}
+
 // ShowDeleted sets the optional parameter "showDeleted": Whether to
 // include deleted events (with 'status' equals 'cancelled') in the
 // result. Cancelled instances of recurring events (but not the
@@ -3180,9 +3201,15 @@
 	if v, ok := c.opt_["pageToken"]; ok {
 		params.Set("pageToken", fmt.Sprintf("%v", v))
 	}
+	if v, ok := c.opt_["privateExtendedProperty"]; ok {
+		params.Set("privateExtendedProperty", fmt.Sprintf("%v", v))
+	}
 	if v, ok := c.opt_["q"]; ok {
 		params.Set("q", fmt.Sprintf("%v", v))
 	}
+	if v, ok := c.opt_["sharedExtendedProperty"]; ok {
+		params.Set("sharedExtendedProperty", fmt.Sprintf("%v", v))
+	}
 	if v, ok := c.opt_["showDeleted"]; ok {
 		params.Set("showDeleted", fmt.Sprintf("%v", v))
 	}
@@ -3279,11 +3306,23 @@
 	//       "location": "query",
 	//       "type": "string"
 	//     },
+	//     "privateExtendedProperty": {
+	//       "description": "Extended properties constraint specified as propertyName=value. Matches only private properties. This parameter might be repeated multiple times to return events that match all given constraints.",
+	//       "location": "query",
+	//       "repeated": true,
+	//       "type": "string"
+	//     },
 	//     "q": {
 	//       "description": "Free text search terms to find events that match these terms in any field, except for extended properties. Optional.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
+	//     "sharedExtendedProperty": {
+	//       "description": "Extended properties constraint specified as propertyName=value. Matches only shared properties. This parameter might be repeated multiple times to return events that match all given constraints.",
+	//       "location": "query",
+	//       "repeated": true,
+	//       "type": "string"
+	//     },
 	//     "showDeleted": {
 	//       "description": "Whether to include deleted events (with 'status' equals 'cancelled') in the result. Cancelled instances of recurring events (but not the underlying recurring event) will still be included if 'showDeleted' and 'singleEvents' are both False. If 'showDeleted' and 'singleEvents' are both True, only single instances of deleted events (but not the underlying recurring events) are returned. Optional. The default is False.",
 	//       "location": "query",
@@ -3874,6 +3913,16 @@
 	return c
 }
 
+// PrivateExtendedProperty sets the optional parameter
+// "privateExtendedProperty": Extended properties constraint specified
+// as propertyName=value. Matches only private properties. This
+// parameter might be repeated multiple times to return events that
+// match all given constraints.
+func (c *EventsWatchCall) PrivateExtendedProperty(privateExtendedProperty string) *EventsWatchCall {
+	c.opt_["privateExtendedProperty"] = privateExtendedProperty
+	return c
+}
+
 // Q sets the optional parameter "q": Free text search terms to find
 // events that match these terms in any field, except for extended
 // properties.
@@ -3882,6 +3931,16 @@
 	return c
 }
 
+// SharedExtendedProperty sets the optional parameter
+// "sharedExtendedProperty": Extended properties constraint specified as
+// propertyName=value. Matches only shared properties. This parameter
+// might be repeated multiple times to return events that match all
+// given constraints.
+func (c *EventsWatchCall) SharedExtendedProperty(sharedExtendedProperty string) *EventsWatchCall {
+	c.opt_["sharedExtendedProperty"] = sharedExtendedProperty
+	return c
+}
+
 // ShowDeleted sets the optional parameter "showDeleted": Whether to
 // include deleted events (with 'status' equals 'cancelled') in the
 // result. Cancelled instances of recurring events (but not the
@@ -3970,9 +4029,15 @@
 	if v, ok := c.opt_["pageToken"]; ok {
 		params.Set("pageToken", fmt.Sprintf("%v", v))
 	}
+	if v, ok := c.opt_["privateExtendedProperty"]; ok {
+		params.Set("privateExtendedProperty", fmt.Sprintf("%v", v))
+	}
 	if v, ok := c.opt_["q"]; ok {
 		params.Set("q", fmt.Sprintf("%v", v))
 	}
+	if v, ok := c.opt_["sharedExtendedProperty"]; ok {
+		params.Set("sharedExtendedProperty", fmt.Sprintf("%v", v))
+	}
 	if v, ok := c.opt_["showDeleted"]; ok {
 		params.Set("showDeleted", fmt.Sprintf("%v", v))
 	}
@@ -4070,11 +4135,23 @@
 	//       "location": "query",
 	//       "type": "string"
 	//     },
+	//     "privateExtendedProperty": {
+	//       "description": "Extended properties constraint specified as propertyName=value. Matches only private properties. This parameter might be repeated multiple times to return events that match all given constraints.",
+	//       "location": "query",
+	//       "repeated": true,
+	//       "type": "string"
+	//     },
 	//     "q": {
 	//       "description": "Free text search terms to find events that match these terms in any field, except for extended properties. Optional.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
+	//     "sharedExtendedProperty": {
+	//       "description": "Extended properties constraint specified as propertyName=value. Matches only shared properties. This parameter might be repeated multiple times to return events that match all given constraints.",
+	//       "location": "query",
+	//       "repeated": true,
+	//       "type": "string"
+	//     },
 	//     "showDeleted": {
 	//       "description": "Whether to include deleted events (with 'status' equals 'cancelled') in the result. Cancelled instances of recurring events (but not the underlying recurring event) will still be included if 'showDeleted' and 'singleEvents' are both False. If 'showDeleted' and 'singleEvents' are both True, only single instances of deleted events (but not the underlying recurring events) are returned. Optional. The default is False.",
 	//       "location": "query",
diff --git a/civicinfo/us_v1/civicinfo-api.json b/civicinfo/us_v1/civicinfo-api.json
index 5996162..901e7da 100644
--- a/civicinfo/us_v1/civicinfo-api.json
+++ b/civicinfo/us_v1/civicinfo-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/iVqjd-HwY_rWVg6n9kNX13GcQao\"",
+ "etag": "\"qMhxoRFWKZK4K3KdZJuqms1o3fc/gs0lH8i9LWaJL9JhZymkI8TMC-A\"",
  "discoveryVersion": "v1",
  "id": "civicinfo:us_v1",
  "name": "civicinfo",
@@ -361,7 +361,7 @@
     },
     "kind": {
      "type": "string",
-     "description": "The kind, fixed to \"civicinfo#electionsQueryResponse\".",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"civicinfo#electionsQueryResponse\".",
      "default": "civicinfo#electionsQueryResponse"
     }
    }
@@ -385,6 +385,110 @@
     }
    }
   },
+  "GeographicDivision": {
+   "id": "GeographicDivision",
+   "type": "object",
+   "description": "Describes a political geography.",
+   "properties": {
+    "name": {
+     "type": "string",
+     "description": "The name of the division."
+    },
+    "officeIds": {
+     "type": "array",
+     "description": "List of keys in the offices object, one for each office elected from this division. Will only be present if includeOffices was true (or absent) in the request.",
+     "items": {
+      "type": "string"
+     }
+    },
+    "scope": {
+     "type": "string",
+     "description": "The geographic scope of the division. If unspecified, the division's geography is not known. One of: national, statewide, congressional, stateUpper, stateLower, countywide, judicial, schoolBoard, cityWide, township, countyCouncil, cityCouncil, ward, special"
+    }
+   }
+  },
+  "Office": {
+   "id": "Office",
+   "type": "object",
+   "properties": {
+    "level": {
+     "type": "string",
+     "description": "The level of this elected office. One of: federal, state, county, city, other"
+    },
+    "name": {
+     "type": "string",
+     "description": "The human-readable name of the office."
+    },
+    "officialIds": {
+     "type": "array",
+     "description": "List of people who presently hold the office.",
+     "items": {
+      "type": "string"
+     }
+    },
+    "sources": {
+     "type": "array",
+     "description": "A list of sources for this office. If multiple sources are listed, the data has been aggregated from those sources.",
+     "items": {
+      "$ref": "Source"
+     }
+    }
+   }
+  },
+  "Official": {
+   "id": "Official",
+   "type": "object",
+   "description": "Information about a official holding an elected office.",
+   "properties": {
+    "address": {
+     "type": "array",
+     "description": "Addresses at which to contact the official.",
+     "items": {
+      "$ref": "SimpleAddressType"
+     }
+    },
+    "channels": {
+     "type": "array",
+     "description": "A list of known (social) media channels for this official.",
+     "items": {
+      "$ref": "Channel"
+     }
+    },
+    "emails": {
+     "type": "array",
+     "description": "The direct email addresses for the official.",
+     "items": {
+      "type": "string"
+     }
+    },
+    "name": {
+     "type": "string",
+     "description": "The official's name."
+    },
+    "party": {
+     "type": "string",
+     "description": "The full name of the party the official belongs to."
+    },
+    "phones": {
+     "type": "array",
+     "description": "The official's public contact phone numbers.",
+     "items": {
+      "type": "string"
+     }
+    },
+    "photoUrl": {
+     "type": "string",
+     "description": "A URL for a photo of the official."
+    },
+    "urls": {
+     "type": "array",
+     "description": "The official's public website URLs.",
+     "items": {
+      "type": "string"
+     }
+    }
+   }
+  },
   "PollingLocation": {
    "id": "PollingLocation",
    "type": "object",
@@ -431,6 +535,60 @@
     }
    }
   },
+  "RepresentativeInfoRequest": {
+   "id": "RepresentativeInfoRequest",
+   "type": "object",
+   "description": "A request for political geography and representative information for an address.",
+   "properties": {
+    "address": {
+     "type": "string"
+    }
+   }
+  },
+  "RepresentativeInfoResponse": {
+   "id": "RepresentativeInfoResponse",
+   "type": "object",
+   "description": "The result of a representative info lookup query.",
+   "properties": {
+    "divisions": {
+     "type": "object",
+     "description": "Political geographic divisions that contain the requested address.",
+     "additionalProperties": {
+      "$ref": "GeographicDivision",
+      "description": "The unique Open Civic Data identifier for this division."
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"civicinfo#representativeInfoResponse\".",
+     "default": "civicinfo#representativeInfoResponse"
+    },
+    "normalizedInput": {
+     "$ref": "SimpleAddressType",
+     "description": "The normalized version of the requested address"
+    },
+    "offices": {
+     "type": "object",
+     "description": "Elected offices referenced by the divisions listed above. Will only be present if includeOffices was true in the request.",
+     "additionalProperties": {
+      "$ref": "Office",
+      "description": "A unique identifier for this office, within the context of this request. Identifiers are *not* long-lived: the same office may get different IDs on different requests."
+     }
+    },
+    "officials": {
+     "type": "object",
+     "description": "Officials holding the offices listed above. Will only be present if includeOffices was true in the request.",
+     "additionalProperties": {
+      "$ref": "Official",
+      "description": "A unique identifier for this official, within the context of this request. Identifiers are *not* long-lived: the same official may get different IDs on different requests."
+     }
+    },
+    "status": {
+     "type": "string",
+     "description": "The result of the request. One of: success, noStreetSegmentFound, addressUnparseable, noAddressParameter, multipleStreetSegmentsFound, electionOver, electionUnknown, internalLookupFailure"
+    }
+   }
+  },
   "SimpleAddressType": {
    "id": "SimpleAddressType",
    "type": "object",
@@ -517,7 +675,7 @@
     },
     "kind": {
      "type": "string",
-     "description": "The kind, fixed to \"civicinfo#voterInfoResponse\".",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"civicinfo#voterInfoResponse\".",
      "default": "civicinfo#voterInfoResponse"
     },
     "normalizedInput": {
@@ -588,6 +746,30 @@
      }
     }
    }
+  },
+  "representatives": {
+   "methods": {
+    "representativeInfoQuery": {
+     "id": "civicinfo.representatives.representativeInfoQuery",
+     "path": "representatives/lookup",
+     "httpMethod": "POST",
+     "description": "Looks up political geography and (optionally) representative information based on an address.",
+     "parameters": {
+      "includeOffices": {
+       "type": "boolean",
+       "description": "Whether to return information about offices and officials. If false, only the top-level district information will be returned.",
+       "default": "true",
+       "location": "query"
+      }
+     },
+     "request": {
+      "$ref": "RepresentativeInfoRequest"
+     },
+     "response": {
+      "$ref": "RepresentativeInfoResponse"
+     }
+    }
+   }
   }
  }
 }
diff --git a/civicinfo/us_v1/civicinfo-gen.go b/civicinfo/us_v1/civicinfo-gen.go
index dcc9861..f29a876 100644
--- a/civicinfo/us_v1/civicinfo-gen.go
+++ b/civicinfo/us_v1/civicinfo-gen.go
@@ -45,6 +45,7 @@
 	}
 	s := &Service{client: client}
 	s.Elections = NewElectionsService(s)
+	s.Representatives = NewRepresentativesService(s)
 	return s, nil
 }
 
@@ -52,6 +53,8 @@
 	client *http.Client
 
 	Elections *ElectionsService
+
+	Representatives *RepresentativesService
 }
 
 func NewElectionsService(s *Service) *ElectionsService {
@@ -63,6 +66,15 @@
 	s *Service
 }
 
+func NewRepresentativesService(s *Service) *RepresentativesService {
+	rs := &RepresentativesService{s: s}
+	return rs
+}
+
+type RepresentativesService struct {
+	s *Service
+}
+
 type AdministrationRegion struct {
 	// ElectionAdministrationBody: The election administration body for this
 	// area.
@@ -274,7 +286,8 @@
 	// Elections: A list of available elections
 	Elections []*Election `json:"elections,omitempty"`
 
-	// Kind: The kind, fixed to "civicinfo#electionsQueryResponse".
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "civicinfo#electionsQueryResponse".
 	Kind string `json:"kind,omitempty"`
 }
 
@@ -295,6 +308,65 @@
 	Scope string `json:"scope,omitempty"`
 }
 
+type GeographicDivision struct {
+	// Name: The name of the division.
+	Name string `json:"name,omitempty"`
+
+	// OfficeIds: List of keys in the offices object, one for each office
+	// elected from this division. Will only be present if includeOffices
+	// was true (or absent) in the request.
+	OfficeIds []string `json:"officeIds,omitempty"`
+
+	// Scope: The geographic scope of the division. If unspecified, the
+	// division's geography is not known. One of: national, statewide,
+	// congressional, stateUpper, stateLower, countywide, judicial,
+	// schoolBoard, cityWide, township, countyCouncil, cityCouncil, ward,
+	// special
+	Scope string `json:"scope,omitempty"`
+}
+
+type Office struct {
+	// Level: The level of this elected office. One of: federal, state,
+	// county, city, other
+	Level string `json:"level,omitempty"`
+
+	// Name: The human-readable name of the office.
+	Name string `json:"name,omitempty"`
+
+	// OfficialIds: List of people who presently hold the office.
+	OfficialIds []string `json:"officialIds,omitempty"`
+
+	// Sources: A list of sources for this office. If multiple sources are
+	// listed, the data has been aggregated from those sources.
+	Sources []*Source `json:"sources,omitempty"`
+}
+
+type Official struct {
+	// Address: Addresses at which to contact the official.
+	Address []*SimpleAddressType `json:"address,omitempty"`
+
+	// Channels: A list of known (social) media channels for this official.
+	Channels []*Channel `json:"channels,omitempty"`
+
+	// Emails: The direct email addresses for the official.
+	Emails []string `json:"emails,omitempty"`
+
+	// Name: The official's name.
+	Name string `json:"name,omitempty"`
+
+	// Party: The full name of the party the official belongs to.
+	Party string `json:"party,omitempty"`
+
+	// Phones: The official's public contact phone numbers.
+	Phones []string `json:"phones,omitempty"`
+
+	// PhotoUrl: A URL for a photo of the official.
+	PhotoUrl string `json:"photoUrl,omitempty"`
+
+	// Urls: The official's public website URLs.
+	Urls []string `json:"urls,omitempty"`
+}
+
 type PollingLocation struct {
 	// Address: The address of the location
 	Address *SimpleAddressType `json:"address,omitempty"`
@@ -332,6 +404,46 @@
 	VoterServices string `json:"voterServices,omitempty"`
 }
 
+type RepresentativeInfoRequest struct {
+	Address string `json:"address,omitempty"`
+}
+
+type RepresentativeInfoResponse struct {
+	// Divisions: Political geographic divisions that contain the requested
+	// address.
+	Divisions *RepresentativeInfoResponseDivisions `json:"divisions,omitempty"`
+
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "civicinfo#representativeInfoResponse".
+	Kind string `json:"kind,omitempty"`
+
+	// NormalizedInput: The normalized version of the requested address
+	NormalizedInput *SimpleAddressType `json:"normalizedInput,omitempty"`
+
+	// Offices: Elected offices referenced by the divisions listed above.
+	// Will only be present if includeOffices was true in the request.
+	Offices *RepresentativeInfoResponseOffices `json:"offices,omitempty"`
+
+	// Officials: Officials holding the offices listed above. Will only be
+	// present if includeOffices was true in the request.
+	Officials *RepresentativeInfoResponseOfficials `json:"officials,omitempty"`
+
+	// Status: The result of the request. One of: success,
+	// noStreetSegmentFound, addressUnparseable, noAddressParameter,
+	// multipleStreetSegmentsFound, electionOver, electionUnknown,
+	// internalLookupFailure
+	Status string `json:"status,omitempty"`
+}
+
+type RepresentativeInfoResponseDivisions struct {
+}
+
+type RepresentativeInfoResponseOffices struct {
+}
+
+type RepresentativeInfoResponseOfficials struct {
+}
+
 type SimpleAddressType struct {
 	// City: The city or town for the address.
 	City string `json:"city,omitempty"`
@@ -379,7 +491,8 @@
 	// Election: The election that was queried.
 	Election *Election `json:"election,omitempty"`
 
-	// Kind: The kind, fixed to "civicinfo#voterInfoResponse".
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "civicinfo#voterInfoResponse".
 	Kind string `json:"kind,omitempty"`
 
 	// NormalizedInput: The normalized version of the requested address
@@ -538,3 +651,81 @@
 	// }
 
 }
+
+// method id "civicinfo.representatives.representativeInfoQuery":
+
+type RepresentativesRepresentativeInfoQueryCall struct {
+	s                         *Service
+	representativeinforequest *RepresentativeInfoRequest
+	opt_                      map[string]interface{}
+}
+
+// RepresentativeInfoQuery: Looks up political geography and
+// (optionally) representative information based on an address.
+func (r *RepresentativesService) RepresentativeInfoQuery(representativeinforequest *RepresentativeInfoRequest) *RepresentativesRepresentativeInfoQueryCall {
+	c := &RepresentativesRepresentativeInfoQueryCall{s: r.s, opt_: make(map[string]interface{})}
+	c.representativeinforequest = representativeinforequest
+	return c
+}
+
+// IncludeOffices sets the optional parameter "includeOffices": Whether
+// to return information about offices and officials. If false, only the
+// top-level district information will be returned.
+func (c *RepresentativesRepresentativeInfoQueryCall) IncludeOffices(includeOffices bool) *RepresentativesRepresentativeInfoQueryCall {
+	c.opt_["includeOffices"] = includeOffices
+	return c
+}
+
+func (c *RepresentativesRepresentativeInfoQueryCall) Do() (*RepresentativeInfoResponse, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.representativeinforequest)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	if v, ok := c.opt_["includeOffices"]; ok {
+		params.Set("includeOffices", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/civicinfo/us_v1/", "representatives/lookup")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(RepresentativeInfoResponse)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Looks up political geography and (optionally) representative information based on an address.",
+	//   "httpMethod": "POST",
+	//   "id": "civicinfo.representatives.representativeInfoQuery",
+	//   "parameters": {
+	//     "includeOffices": {
+	//       "default": "true",
+	//       "description": "Whether to return information about offices and officials. If false, only the top-level district information will be returned.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     }
+	//   },
+	//   "path": "representatives/lookup",
+	//   "request": {
+	//     "$ref": "RepresentativeInfoRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "RepresentativeInfoResponse"
+	//   }
+	// }
+
+}
diff --git a/compute/v1/compute-api.json b/compute/v1/compute-api.json
new file mode 100644
index 0000000..093e289
--- /dev/null
+++ b/compute/v1/compute-api.json
@@ -0,0 +1,7140 @@
+{
+ "kind": "discovery#restDescription",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/BNByzMPR_MyMUHGT7sidSoKH7pw\"",
+ "discoveryVersion": "v1",
+ "id": "compute:v1",
+ "name": "compute",
+ "version": "v1",
+ "title": "Compute Engine API",
+ "description": "API for the Google Compute Engine service.",
+ "ownerDomain": "google.com",
+ "ownerName": "Google",
+ "icons": {
+  "x16": "http://www.google.com/images/icons/product/compute_engine-16.png",
+  "x32": "http://www.google.com/images/icons/product/compute_engine-32.png"
+ },
+ "documentationLink": "https://developers.google.com/compute/docs/reference/latest/",
+ "protocol": "rest",
+ "baseUrl": "https://www.googleapis.com/compute/v1/projects/",
+ "basePath": "/compute/v1/projects/",
+ "rootUrl": "https://www.googleapis.com/",
+ "servicePath": "compute/v1/projects/",
+ "batchPath": "batch",
+ "parameters": {
+  "alt": {
+   "type": "string",
+   "description": "Data format for the response.",
+   "default": "json",
+   "enum": [
+    "json"
+   ],
+   "enumDescriptions": [
+    "Responses with Content-Type of application/json"
+   ],
+   "location": "query"
+  },
+  "fields": {
+   "type": "string",
+   "description": "Selector specifying which fields to include in a partial response.",
+   "location": "query"
+  },
+  "key": {
+   "type": "string",
+   "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+   "location": "query"
+  },
+  "oauth_token": {
+   "type": "string",
+   "description": "OAuth 2.0 token for the current user.",
+   "location": "query"
+  },
+  "prettyPrint": {
+   "type": "boolean",
+   "description": "Returns response with indentations and line breaks.",
+   "default": "true",
+   "location": "query"
+  },
+  "quotaUser": {
+   "type": "string",
+   "description": "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. Overrides userIp if both are provided.",
+   "location": "query"
+  },
+  "userIp": {
+   "type": "string",
+   "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.",
+   "location": "query"
+  }
+ },
+ "auth": {
+  "oauth2": {
+   "scopes": {
+    "https://www.googleapis.com/auth/compute": {
+     "description": "View and manage your Google Compute Engine resources"
+    },
+    "https://www.googleapis.com/auth/compute.readonly": {
+     "description": "View your Google Compute Engine resources"
+    },
+    "https://www.googleapis.com/auth/devstorage.full_control": {
+     "description": "Manage your data and permissions in Google Cloud Storage"
+    },
+    "https://www.googleapis.com/auth/devstorage.read_only": {
+     "description": "View your data in Google Cloud Storage"
+    },
+    "https://www.googleapis.com/auth/devstorage.read_write": {
+     "description": "Manage your data in Google Cloud Storage"
+    }
+   }
+  }
+ },
+ "schemas": {
+  "AccessConfig": {
+   "id": "AccessConfig",
+   "type": "object",
+   "description": "An access configuration attached to an instance's network interface.",
+   "properties": {
+    "kind": {
+     "type": "string",
+     "description": "Type of the resource.",
+     "default": "compute#accessConfig"
+    },
+    "name": {
+     "type": "string",
+     "description": "Name of this access configuration."
+    },
+    "natIP": {
+     "type": "string",
+     "description": "An external IP address associated with this instance. Specify an unused static IP address available to the project. If not specified, the external IP will be drawn from a shared ephemeral pool."
+    },
+    "type": {
+     "type": "string",
+     "description": "Type of configuration. Must be set to \"ONE_TO_ONE_NAT\". This configures port-for-port NAT to the internet.",
+     "default": "ONE_TO_ONE_NAT",
+     "enum": [
+      "ONE_TO_ONE_NAT"
+     ],
+     "enumDescriptions": [
+      ""
+     ]
+    }
+   }
+  },
+  "Address": {
+   "id": "Address",
+   "type": "object",
+   "description": "A reserved address resource.",
+   "properties": {
+    "address": {
+     "type": "string",
+     "description": "The IP address represented by this resource."
+    },
+    "creationTimestamp": {
+     "type": "string",
+     "description": "Creation timestamp in RFC3339 text format (output only)."
+    },
+    "description": {
+     "type": "string",
+     "description": "An optional textual description of the resource; provided by the client when the resource is created."
+    },
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only).",
+     "format": "uint64"
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of the resource.",
+     "default": "compute#address"
+    },
+    "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.",
+     "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+     "annotations": {
+      "required": [
+       "compute.addresses.insert"
+      ]
+     }
+    },
+    "region": {
+     "type": "string",
+     "description": "URL of the region where the address resides (output only)."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for the resource (output only)."
+    },
+    "status": {
+     "type": "string",
+     "description": "The status of the address (output only).",
+     "enum": [
+      "IN_USE",
+      "RESERVED"
+     ],
+     "enumDescriptions": [
+      "",
+      ""
+     ]
+    },
+    "users": {
+     "type": "array",
+     "description": "The resources that are using this address resource.",
+     "items": {
+      "type": "string"
+     }
+    }
+   }
+  },
+  "AddressAggregatedList": {
+   "id": "AddressAggregatedList",
+   "type": "object",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only)."
+    },
+    "items": {
+     "type": "object",
+     "description": "A map of scoped address lists.",
+     "additionalProperties": {
+      "$ref": "AddressesScopedList",
+      "description": "Name of the scope containing this set of addresses."
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of resource.",
+     "default": "compute#addressAggregatedList"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "A token used to continue a truncated list request (output only)."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for this resource (output only)."
+    }
+   }
+  },
+  "AddressList": {
+   "id": "AddressList",
+   "type": "object",
+   "description": "Contains a list of address resources.",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only)."
+    },
+    "items": {
+     "type": "array",
+     "description": "The address resources.",
+     "items": {
+      "$ref": "Address"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of resource.",
+     "default": "compute#addressList"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "A token used to continue a truncated list request (output only)."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for this resource (output only)."
+    }
+   }
+  },
+  "AddressesScopedList": {
+   "id": "AddressesScopedList",
+   "type": "object",
+   "properties": {
+    "addresses": {
+     "type": "array",
+     "description": "List of addresses contained in this scope.",
+     "items": {
+      "$ref": "Address"
+     }
+    },
+    "warning": {
+     "type": "object",
+     "description": "Informational warning which replaces the list of addresses when the list is empty.",
+     "properties": {
+      "code": {
+       "type": "string",
+       "description": "The warning type identifier for this warning.",
+       "enum": [
+        "DEPRECATED_RESOURCE_USED",
+        "INJECTED_KERNELS_DEPRECATED",
+        "NEXT_HOP_ADDRESS_NOT_ASSIGNED",
+        "NEXT_HOP_CANNOT_IP_FORWARD",
+        "NEXT_HOP_INSTANCE_NOT_FOUND",
+        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK",
+        "NEXT_HOP_NOT_RUNNING",
+        "NO_RESULTS_ON_PAGE",
+        "REQUIRED_TOS_AGREEMENT",
+        "UNREACHABLE"
+       ],
+       "enumDescriptions": [
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        ""
+       ]
+      },
+      "data": {
+       "type": "array",
+       "description": "Metadata for this warning in 'key: value' format.",
+       "items": {
+        "type": "object",
+        "properties": {
+         "key": {
+          "type": "string",
+          "description": "A key for the warning data."
+         },
+         "value": {
+          "type": "string",
+          "description": "A warning data value corresponding to the key."
+         }
+        }
+       }
+      },
+      "message": {
+       "type": "string",
+       "description": "Optional human-readable details for this warning."
+      }
+     }
+    }
+   }
+  },
+  "AttachedDisk": {
+   "id": "AttachedDisk",
+   "type": "object",
+   "description": "An instance-attached disk resource.",
+   "properties": {
+    "boot": {
+     "type": "boolean",
+     "description": "Indicates that this is a boot disk. VM will use the first partition of the disk for its root filesystem."
+    },
+    "deviceName": {
+     "type": "string",
+     "description": "Persistent disk only; must be unique within the instance when specified. This represents a unique device name that is reflected into the /dev/ tree of a Linux operating system running within the instance. If not specified, a default will be chosen by the system."
+    },
+    "index": {
+     "type": "integer",
+     "description": "A zero-based index to assign to this disk, where 0 is reserved for the boot disk. If not specified, the server will choose an appropriate value (output only).",
+     "format": "int32"
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of the resource.",
+     "default": "compute#attachedDisk"
+    },
+    "mode": {
+     "type": "string",
+     "description": "The mode in which to attach this disk, either \"READ_WRITE\" or \"READ_ONLY\".",
+     "enum": [
+      "READ_ONLY",
+      "READ_WRITE"
+     ],
+     "enumDescriptions": [
+      "",
+      ""
+     ]
+    },
+    "source": {
+     "type": "string",
+     "description": "Persistent disk only; the URL of the persistent disk resource."
+    },
+    "type": {
+     "type": "string",
+     "description": "Type of the disk, either \"SCRATCH\" or \"PERSISTENT\". Note that persistent disks must be created before you can specify them here.",
+     "enum": [
+      "PERSISTENT",
+      "SCRATCH"
+     ],
+     "enumDescriptions": [
+      "",
+      ""
+     ],
+     "annotations": {
+      "required": [
+       "compute.instances.insert"
+      ]
+     }
+    }
+   }
+  },
+  "DeprecationStatus": {
+   "id": "DeprecationStatus",
+   "type": "object",
+   "description": "Deprecation status for a public resource.",
+   "properties": {
+    "deleted": {
+     "type": "string",
+     "description": "An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to DELETED."
+    },
+    "deprecated": {
+     "type": "string",
+     "description": "An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to DEPRECATED."
+    },
+    "obsolete": {
+     "type": "string",
+     "description": "An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to OBSOLETE."
+    },
+    "replacement": {
+     "type": "string",
+     "description": "A URL of the suggested replacement for the deprecated resource. The deprecated resource and its replacement must be resources of the same kind."
+    },
+    "state": {
+     "type": "string",
+     "description": "The deprecation state. Can be \"DEPRECATED\", \"OBSOLETE\", or \"DELETED\". Operations which create a new resource using a \"DEPRECATED\" resource will return successfully, but with a warning indicating the deprecated resource and recommending its replacement. New uses of \"OBSOLETE\" or \"DELETED\" resources will result in an error.",
+     "enum": [
+      "DELETED",
+      "DEPRECATED",
+      "OBSOLETE"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      ""
+     ]
+    }
+   }
+  },
+  "Disk": {
+   "id": "Disk",
+   "type": "object",
+   "description": "A persistent disk resource.",
+   "properties": {
+    "creationTimestamp": {
+     "type": "string",
+     "description": "Creation timestamp in RFC3339 text format (output only)."
+    },
+    "description": {
+     "type": "string",
+     "description": "An optional textual description of the resource; provided by the client when the resource is created."
+    },
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only).",
+     "format": "uint64"
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of the resource.",
+     "default": "compute#disk"
+    },
+    "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.",
+     "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+     "annotations": {
+      "required": [
+       "compute.disks.insert"
+      ]
+     }
+    },
+    "options": {
+     "type": "string",
+     "description": "Internal use only."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for the resource (output only)."
+    },
+    "sizeGb": {
+     "type": "string",
+     "description": "Size of the persistent disk, specified in GB. This parameter is optional when creating a disk from a disk image or a snapshot, otherwise it is required.",
+     "format": "int64"
+    },
+    "sourceImage": {
+     "type": "string",
+     "description": "The source image used to create this disk. Once the source image has been deleted from the system, this field will not be set, even if an image with the same name has been re-created."
+    },
+    "sourceImageId": {
+     "type": "string",
+     "description": "The 'id' value of the image used to create this disk. This value may be used to determine whether the disk was created from the current or a previous instance of a given image."
+    },
+    "sourceSnapshot": {
+     "type": "string",
+     "description": "The source snapshot used to create this disk. Once the source snapshot has been deleted from the system, this field will be cleared, and will not be set even if a snapshot with the same name has been re-created."
+    },
+    "sourceSnapshotId": {
+     "type": "string",
+     "description": "The 'id' value of the snapshot used to create this disk. This value may be used to determine whether the disk was created from the current or a previous instance of a given disk snapshot."
+    },
+    "status": {
+     "type": "string",
+     "description": "The status of disk creation (output only).",
+     "enum": [
+      "CREATING",
+      "FAILED",
+      "READY",
+      "RESTORING"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      "",
+      ""
+     ]
+    },
+    "zone": {
+     "type": "string",
+     "description": "URL of the zone where the disk resides (output only)."
+    }
+   }
+  },
+  "DiskAggregatedList": {
+   "id": "DiskAggregatedList",
+   "type": "object",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only)."
+    },
+    "items": {
+     "type": "object",
+     "description": "A map of scoped disk lists.",
+     "additionalProperties": {
+      "$ref": "DisksScopedList",
+      "description": "Name of the scope containing this set of disks."
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of resource.",
+     "default": "compute#diskAggregatedList"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "A token used to continue a truncated list request (output only)."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for this resource (output only)."
+    }
+   }
+  },
+  "DiskList": {
+   "id": "DiskList",
+   "type": "object",
+   "description": "Contains a list of persistent disk resources.",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only)."
+    },
+    "items": {
+     "type": "array",
+     "description": "The persistent disk resources.",
+     "items": {
+      "$ref": "Disk"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of resource.",
+     "default": "compute#diskList"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "A token used to continue a truncated list request (output only)."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for this resource (output only)."
+    }
+   }
+  },
+  "DisksScopedList": {
+   "id": "DisksScopedList",
+   "type": "object",
+   "properties": {
+    "disks": {
+     "type": "array",
+     "description": "List of disks contained in this scope.",
+     "items": {
+      "$ref": "Disk"
+     }
+    },
+    "warning": {
+     "type": "object",
+     "description": "Informational warning which replaces the list of disks when the list is empty.",
+     "properties": {
+      "code": {
+       "type": "string",
+       "description": "The warning type identifier for this warning.",
+       "enum": [
+        "DEPRECATED_RESOURCE_USED",
+        "INJECTED_KERNELS_DEPRECATED",
+        "NEXT_HOP_ADDRESS_NOT_ASSIGNED",
+        "NEXT_HOP_CANNOT_IP_FORWARD",
+        "NEXT_HOP_INSTANCE_NOT_FOUND",
+        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK",
+        "NEXT_HOP_NOT_RUNNING",
+        "NO_RESULTS_ON_PAGE",
+        "REQUIRED_TOS_AGREEMENT",
+        "UNREACHABLE"
+       ],
+       "enumDescriptions": [
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        ""
+       ]
+      },
+      "data": {
+       "type": "array",
+       "description": "Metadata for this warning in 'key: value' format.",
+       "items": {
+        "type": "object",
+        "properties": {
+         "key": {
+          "type": "string",
+          "description": "A key for the warning data."
+         },
+         "value": {
+          "type": "string",
+          "description": "A warning data value corresponding to the key."
+         }
+        }
+       }
+      },
+      "message": {
+       "type": "string",
+       "description": "Optional human-readable details for this warning."
+      }
+     }
+    }
+   }
+  },
+  "Firewall": {
+   "id": "Firewall",
+   "type": "object",
+   "description": "A firewall resource.",
+   "properties": {
+    "allowed": {
+     "type": "array",
+     "description": "The list of rules specified by this firewall. Each rule specifies a protocol and port-range tuple that describes a permitted connection.",
+     "items": {
+      "type": "object",
+      "properties": {
+       "IPProtocol": {
+        "type": "string",
+        "description": "Required; this is the IP protocol that is allowed for this rule. This can either be one of the following well known protocol strings [\"tcp\", \"udp\", \"icmp\", \"esp\", \"ah\", \"sctp\"], or the IP protocol number."
+       },
+       "ports": {
+        "type": "array",
+        "description": "An optional list of ports which are allowed. It is an error to specify this for any protocol that isn't UDP or TCP. Each entry must be either an integer or a range. If not specified, connections through any port are allowed.\n\nExample inputs include: [\"22\"], [\"80\",\"443\"] and [\"12345-12349\"].",
+        "items": {
+         "type": "string"
+        }
+       }
+      }
+     }
+    },
+    "creationTimestamp": {
+     "type": "string",
+     "description": "Creation timestamp in RFC3339 text format (output only)."
+    },
+    "description": {
+     "type": "string",
+     "description": "An optional textual description of the resource; provided by the client when the resource is created."
+    },
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only).",
+     "format": "uint64"
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of the resource.",
+     "default": "compute#firewall"
+    },
+    "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.",
+     "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+     "annotations": {
+      "required": [
+       "compute.firewalls.insert",
+       "compute.firewalls.patch"
+      ]
+     }
+    },
+    "network": {
+     "type": "string",
+     "description": "URL of the network to which this firewall is applied; provided by the client when the firewall is created.",
+     "annotations": {
+      "required": [
+       "compute.firewalls.insert",
+       "compute.firewalls.patch"
+      ]
+     }
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for the resource (output only)."
+    },
+    "sourceRanges": {
+     "type": "array",
+     "description": "A list of IP address blocks expressed in CIDR format which this rule applies to. One or both of sourceRanges and sourceTags may be set; an inbound connection is allowed if either the range or the tag of the source matches.",
+     "items": {
+      "type": "string"
+     }
+    },
+    "sourceTags": {
+     "type": "array",
+     "description": "A list of instance tags which this rule applies to. One or both of sourceRanges and sourceTags may be set; an inbound connection is allowed if either the range or the tag of the source matches.",
+     "items": {
+      "type": "string"
+     }
+    },
+    "targetTags": {
+     "type": "array",
+     "description": "A list of instance tags indicating sets of instances located on network which may make network connections as specified in allowed. If no targetTags are specified, the firewall rule applies to all instances on the specified network.",
+     "items": {
+      "type": "string"
+     }
+    }
+   }
+  },
+  "FirewallList": {
+   "id": "FirewallList",
+   "type": "object",
+   "description": "Contains a list of firewall resources.",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only)."
+    },
+    "items": {
+     "type": "array",
+     "description": "The firewall resources.",
+     "items": {
+      "$ref": "Firewall"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of resource.",
+     "default": "compute#firewallList"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "A token used to continue a truncated list request (output only)."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for this resource (output only)."
+    }
+   }
+  },
+  "ForwardingRule": {
+   "id": "ForwardingRule",
+   "type": "object",
+   "description": "A ForwardingRule resource. A ForwardingRule resource specifies which pool of target VMs to forward a packet to if it matches the given [IPAddress, IPProtocol, portRange] tuple.",
+   "properties": {
+    "IPAddress": {
+     "type": "string",
+     "description": "Value of the reserved IP address that this forwarding rule is serving on behalf of. The address resource must live in the same region as the forwarding rule. If left empty (default value), an ephemeral IP will be assigned."
+    },
+    "IPProtocol": {
+     "type": "string",
+     "description": "The IP protocol to which this rule applies, valid options are 'TCP', 'UDP', 'ESP', 'AH' or 'SCTP'",
+     "enum": [
+      "AH",
+      "ESP",
+      "SCTP",
+      "TCP",
+      "UDP"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      "",
+      "",
+      ""
+     ]
+    },
+    "creationTimestamp": {
+     "type": "string",
+     "description": "Creation timestamp in RFC3339 text format (output only)."
+    },
+    "description": {
+     "type": "string",
+     "description": "An optional textual description of the resource; provided by the client when the resource is created."
+    },
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only).",
+     "format": "uint64"
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of the resource.",
+     "default": "compute#forwardingRule"
+    },
+    "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.",
+     "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?"
+    },
+    "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. @pattern: \\d+(?:-\\d+)?"
+    },
+    "region": {
+     "type": "string",
+     "description": "URL of the region where the forwarding rule resides (output only)."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for the resource (output only)."
+    },
+    "target": {
+     "type": "string",
+     "description": "The URL of the target resource to receive the matched traffic. It must live in the same region as this forwarding rule."
+    }
+   }
+  },
+  "ForwardingRuleAggregatedList": {
+   "id": "ForwardingRuleAggregatedList",
+   "type": "object",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only)."
+    },
+    "items": {
+     "type": "object",
+     "description": "A map of scoped forwarding rule lists.",
+     "additionalProperties": {
+      "$ref": "ForwardingRulesScopedList",
+      "description": "Name of the scope containing this set of addresses."
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of resource.",
+     "default": "compute#forwardingRuleAggregatedList"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "A token used to continue a truncated list request (output only)."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for this resource (output only)."
+    }
+   }
+  },
+  "ForwardingRuleList": {
+   "id": "ForwardingRuleList",
+   "type": "object",
+   "description": "Contains a list of ForwardingRule resources.",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only)."
+    },
+    "items": {
+     "type": "array",
+     "description": "The ForwardingRule resources.",
+     "items": {
+      "$ref": "ForwardingRule"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of resource.",
+     "default": "compute#forwardingRuleList"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "A token used to continue a truncated list request (output only)."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for this resource (output only)."
+    }
+   }
+  },
+  "ForwardingRulesScopedList": {
+   "id": "ForwardingRulesScopedList",
+   "type": "object",
+   "properties": {
+    "forwardingRules": {
+     "type": "array",
+     "description": "List of forwarding rules contained in this scope.",
+     "items": {
+      "$ref": "ForwardingRule"
+     }
+    },
+    "warning": {
+     "type": "object",
+     "description": "Informational warning which replaces the list of forwarding rules when the list is empty.",
+     "properties": {
+      "code": {
+       "type": "string",
+       "description": "The warning type identifier for this warning.",
+       "enum": [
+        "DEPRECATED_RESOURCE_USED",
+        "INJECTED_KERNELS_DEPRECATED",
+        "NEXT_HOP_ADDRESS_NOT_ASSIGNED",
+        "NEXT_HOP_CANNOT_IP_FORWARD",
+        "NEXT_HOP_INSTANCE_NOT_FOUND",
+        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK",
+        "NEXT_HOP_NOT_RUNNING",
+        "NO_RESULTS_ON_PAGE",
+        "REQUIRED_TOS_AGREEMENT",
+        "UNREACHABLE"
+       ],
+       "enumDescriptions": [
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        ""
+       ]
+      },
+      "data": {
+       "type": "array",
+       "description": "Metadata for this warning in 'key: value' format.",
+       "items": {
+        "type": "object",
+        "properties": {
+         "key": {
+          "type": "string",
+          "description": "A key for the warning data."
+         },
+         "value": {
+          "type": "string",
+          "description": "A warning data value corresponding to the key."
+         }
+        }
+       }
+      },
+      "message": {
+       "type": "string",
+       "description": "Optional human-readable details for this warning."
+      }
+     }
+    }
+   }
+  },
+  "HealthCheckReference": {
+   "id": "HealthCheckReference",
+   "type": "object",
+   "properties": {
+    "healthCheck": {
+     "type": "string"
+    }
+   }
+  },
+  "HealthStatus": {
+   "id": "HealthStatus",
+   "type": "object",
+   "properties": {
+    "healthState": {
+     "type": "string",
+     "description": "Health state of the instance.",
+     "enum": [
+      "HEALTHY",
+      "UNHEALTHY"
+     ],
+     "enumDescriptions": [
+      "",
+      ""
+     ]
+    },
+    "instance": {
+     "type": "string",
+     "description": "URL of the instance resource."
+    },
+    "ipAddress": {
+     "type": "string",
+     "description": "The IP address represented by this resource."
+    }
+   }
+  },
+  "HttpHealthCheck": {
+   "id": "HttpHealthCheck",
+   "type": "object",
+   "description": "An HttpHealthCheck resource. This resource defines a template for how individual VMs should be checked for health, via HTTP.",
+   "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": "Creation timestamp in RFC3339 text format (output only)."
+    },
+    "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 VM 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 HTTP 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": "Unique identifier for the resource; defined by the server (output only).",
+     "format": "uint64"
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of the resource.",
+     "default": "compute#httpHealthCheck"
+    },
+    "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.",
+     "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?"
+    },
+    "port": {
+     "type": "integer",
+     "description": "The TCP port number for the HTTP health check request. The default value is 80.",
+     "format": "int32"
+    },
+    "requestPath": {
+     "type": "string",
+     "description": "The request path of the HTTP health check request. The default value is \"/\"."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for the resource (output only)."
+    },
+    "timeoutSec": {
+     "type": "integer",
+     "description": "How long (in seconds) to wait before claiming failure. The default value is 5 seconds.",
+     "format": "int32"
+    },
+    "unhealthyThreshold": {
+     "type": "integer",
+     "description": "A so-far healthy VM will be marked unhealthy after this many consecutive failures. The default value is 2.",
+     "format": "int32"
+    }
+   }
+  },
+  "HttpHealthCheckList": {
+   "id": "HttpHealthCheckList",
+   "type": "object",
+   "description": "Contains a list of HttpHealthCheck resources.",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only)."
+    },
+    "items": {
+     "type": "array",
+     "description": "The HttpHealthCheck resources.",
+     "items": {
+      "$ref": "HttpHealthCheck"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of resource.",
+     "default": "compute#httpHealthCheckList"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "A token used to continue a truncated list request (output only)."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for this resource (output only)."
+    }
+   }
+  },
+  "Image": {
+   "id": "Image",
+   "type": "object",
+   "description": "A disk image resource.",
+   "properties": {
+    "archiveSizeBytes": {
+     "type": "string",
+     "description": "Size of the image tar.gz archive stored in Google Cloud Storage (in bytes).",
+     "format": "int64"
+    },
+    "creationTimestamp": {
+     "type": "string",
+     "description": "Creation timestamp in RFC3339 text format (output only)."
+    },
+    "deprecated": {
+     "$ref": "DeprecationStatus",
+     "description": "The deprecation status associated with this image."
+    },
+    "description": {
+     "type": "string",
+     "description": "Textual description of the resource; provided by the client when the resource is created."
+    },
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only).",
+     "format": "uint64"
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of the resource.",
+     "default": "compute#image"
+    },
+    "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.",
+     "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+     "annotations": {
+      "required": [
+       "compute.images.insert"
+      ]
+     }
+    },
+    "rawDisk": {
+     "type": "object",
+     "description": "The raw disk image parameters.",
+     "properties": {
+      "containerType": {
+       "type": "string",
+       "description": "The format used to encode and transmit the block device. Should be TAR. This is just a container and transmission format and not a runtime format. Provided by the client when the disk image is created.",
+       "default": "TAR"
+      },
+      "sha1Checksum": {
+       "type": "string",
+       "description": "An optional SHA1 checksum of the disk image before unpackaging; provided by the client when the disk image is created.",
+       "pattern": "[a-f0-9]{40}"
+      },
+      "source": {
+       "type": "string",
+       "description": "The full Google Cloud Storage URL where the disk image is stored; provided by the client when the disk image is created.",
+       "annotations": {
+        "required": [
+         "compute.images.insert"
+        ]
+       }
+      }
+     }
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for the resource (output only)."
+    },
+    "sourceType": {
+     "type": "string",
+     "description": "Must be \"RAW\"; provided by the client when the disk image is created.",
+     "default": "RAW",
+     "enum": [
+      "RAW"
+     ],
+     "enumDescriptions": [
+      ""
+     ],
+     "annotations": {
+      "required": [
+       "compute.images.insert"
+      ]
+     }
+    },
+    "status": {
+     "type": "string",
+     "description": "Status of the image (output only). It will be one of the following READY - after image has been successfully created and is ready for use FAILED - if creating the image fails for some reason PENDING - the image creation is in progress An image can be used to create other resources suck as instances only after the image has been successfully created and the status is set to READY.",
+     "enum": [
+      "FAILED",
+      "PENDING",
+      "READY"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      ""
+     ]
+    }
+   }
+  },
+  "ImageList": {
+   "id": "ImageList",
+   "type": "object",
+   "description": "Contains a list of disk image resources.",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only)."
+    },
+    "items": {
+     "type": "array",
+     "description": "The disk image resources.",
+     "items": {
+      "$ref": "Image"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of resource.",
+     "default": "compute#imageList"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "A token used to continue a truncated list request (output only)."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for this resource (output only)."
+    }
+   }
+  },
+  "Instance": {
+   "id": "Instance",
+   "type": "object",
+   "description": "An instance resource.",
+   "properties": {
+    "canIpForward": {
+     "type": "boolean",
+     "description": "Allows this instance to send packets with source IP addresses other than its own and receive packets with destination IP addresses other than its own. If this instance will be used as an IP gateway or it will be set as the next-hop in a Route resource, say true. If unsure, leave this set to false."
+    },
+    "creationTimestamp": {
+     "type": "string",
+     "description": "Creation timestamp in RFC3339 text format (output only)."
+    },
+    "description": {
+     "type": "string",
+     "description": "An optional textual description of the resource; provided by the client when the resource is created."
+    },
+    "disks": {
+     "type": "array",
+     "description": "Array of disks associated with this instance. Persistent disks must be created before you can assign them.",
+     "items": {
+      "$ref": "AttachedDisk"
+     }
+    },
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only).",
+     "format": "uint64"
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of the resource.",
+     "default": "compute#instance"
+    },
+    "machineType": {
+     "type": "string",
+     "description": "URL of the machine type resource describing which machine type to use to host the instance; provided by the client when the instance is created.",
+     "annotations": {
+      "required": [
+       "compute.instances.insert"
+      ]
+     }
+    },
+    "metadata": {
+     "$ref": "Metadata",
+     "description": "Metadata key/value pairs assigned to this instance. Consists of custom metadata or predefined keys; see Instance documentation for more information."
+    },
+    "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.",
+     "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+     "annotations": {
+      "required": [
+       "compute.instances.insert"
+      ]
+     }
+    },
+    "networkInterfaces": {
+     "type": "array",
+     "description": "Array of 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 access config supported. If there are no accessConfigs specified, then this instance will have no external internet access.",
+     "items": {
+      "$ref": "NetworkInterface"
+     }
+    },
+    "scheduling": {
+     "$ref": "Scheduling",
+     "description": "Scheduling options for this instance."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for this resource (output only)."
+    },
+    "serviceAccounts": {
+     "type": "array",
+     "description": "A list of service accounts each with specified scopes, for which access tokens are to be made available to the instance through metadata queries.",
+     "items": {
+      "$ref": "ServiceAccount"
+     }
+    },
+    "status": {
+     "type": "string",
+     "description": "Instance status. One of the following values: \"PROVISIONING\", \"STAGING\", \"RUNNING\", \"STOPPING\", \"STOPPED\", \"TERMINATED\" (output only).",
+     "enum": [
+      "PROVISIONING",
+      "RUNNING",
+      "STAGING",
+      "STOPPED",
+      "STOPPING",
+      "TERMINATED"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      "",
+      "",
+      "",
+      ""
+     ]
+    },
+    "statusMessage": {
+     "type": "string",
+     "description": "An optional, human-readable explanation of the status (output only)."
+    },
+    "tags": {
+     "$ref": "Tags",
+     "description": "A list of tags to be applied to this instance. Used to identify valid sources or targets for network firewalls. Provided by the client on instance creation. The tags can be later modified by the setTags method. Each tag within the list must comply with RFC1035."
+    },
+    "zone": {
+     "type": "string",
+     "description": "URL of the zone where the instance resides (output only)."
+    }
+   }
+  },
+  "InstanceAggregatedList": {
+   "id": "InstanceAggregatedList",
+   "type": "object",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only)."
+    },
+    "items": {
+     "type": "object",
+     "description": "A map of scoped instance lists.",
+     "additionalProperties": {
+      "$ref": "InstancesScopedList",
+      "description": "Name of the scope containing this set of instances."
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of resource.",
+     "default": "compute#instanceAggregatedList"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "A token used to continue a truncated list request (output only)."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for this resource (output only)."
+    }
+   }
+  },
+  "InstanceList": {
+   "id": "InstanceList",
+   "type": "object",
+   "description": "Contains a list of instance resources.",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only)."
+    },
+    "items": {
+     "type": "array",
+     "description": "A list of instance resources.",
+     "items": {
+      "$ref": "Instance"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of resource.",
+     "default": "compute#instanceList"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "A token used to continue a truncated list request (output only)."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for this resource (output only)."
+    }
+   }
+  },
+  "InstanceReference": {
+   "id": "InstanceReference",
+   "type": "object",
+   "properties": {
+    "instance": {
+     "type": "string"
+    }
+   }
+  },
+  "InstancesScopedList": {
+   "id": "InstancesScopedList",
+   "type": "object",
+   "properties": {
+    "instances": {
+     "type": "array",
+     "description": "List of instances contained in this scope.",
+     "items": {
+      "$ref": "Instance"
+     }
+    },
+    "warning": {
+     "type": "object",
+     "description": "Informational warning which replaces the list of instances when the list is empty.",
+     "properties": {
+      "code": {
+       "type": "string",
+       "description": "The warning type identifier for this warning.",
+       "enum": [
+        "DEPRECATED_RESOURCE_USED",
+        "INJECTED_KERNELS_DEPRECATED",
+        "NEXT_HOP_ADDRESS_NOT_ASSIGNED",
+        "NEXT_HOP_CANNOT_IP_FORWARD",
+        "NEXT_HOP_INSTANCE_NOT_FOUND",
+        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK",
+        "NEXT_HOP_NOT_RUNNING",
+        "NO_RESULTS_ON_PAGE",
+        "REQUIRED_TOS_AGREEMENT",
+        "UNREACHABLE"
+       ],
+       "enumDescriptions": [
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        ""
+       ]
+      },
+      "data": {
+       "type": "array",
+       "description": "Metadata for this warning in 'key: value' format.",
+       "items": {
+        "type": "object",
+        "properties": {
+         "key": {
+          "type": "string",
+          "description": "A key for the warning data."
+         },
+         "value": {
+          "type": "string",
+          "description": "A warning data value corresponding to the key."
+         }
+        }
+       }
+      },
+      "message": {
+       "type": "string",
+       "description": "Optional human-readable details for this warning."
+      }
+     }
+    }
+   }
+  },
+  "MachineType": {
+   "id": "MachineType",
+   "type": "object",
+   "description": "A machine type resource.",
+   "properties": {
+    "creationTimestamp": {
+     "type": "string",
+     "description": "Creation timestamp in RFC3339 text format (output only)."
+    },
+    "deprecated": {
+     "$ref": "DeprecationStatus",
+     "description": "The deprecation status associated with this machine type."
+    },
+    "description": {
+     "type": "string",
+     "description": "An optional textual description of the resource."
+    },
+    "guestCpus": {
+     "type": "integer",
+     "description": "Count of CPUs exposed to the instance.",
+     "format": "int32"
+    },
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only).",
+     "format": "uint64"
+    },
+    "imageSpaceGb": {
+     "type": "integer",
+     "description": "Space allotted for the image, defined in GB.",
+     "format": "int32"
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of the resource.",
+     "default": "compute#machineType"
+    },
+    "maximumPersistentDisks": {
+     "type": "integer",
+     "description": "Maximum persistent disks allowed.",
+     "format": "int32"
+    },
+    "maximumPersistentDisksSizeGb": {
+     "type": "string",
+     "description": "Maximum total persistent disks size (GB) allowed.",
+     "format": "int64"
+    },
+    "memoryMb": {
+     "type": "integer",
+     "description": "Physical memory assigned to the instance, defined in MB.",
+     "format": "int32"
+    },
+    "name": {
+     "type": "string",
+     "description": "Name of the resource.",
+     "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?"
+    },
+    "scratchDisks": {
+     "type": "array",
+     "description": "List of extended scratch disks assigned to the instance.",
+     "items": {
+      "type": "object",
+      "properties": {
+       "diskGb": {
+        "type": "integer",
+        "description": "Size of the scratch disk, defined in GB.",
+        "format": "int32"
+       }
+      }
+     }
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for the resource (output only)."
+    },
+    "zone": {
+     "type": "string",
+     "description": "Url of the zone where the machine type resides (output only)."
+    }
+   }
+  },
+  "MachineTypeAggregatedList": {
+   "id": "MachineTypeAggregatedList",
+   "type": "object",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only)."
+    },
+    "items": {
+     "type": "object",
+     "description": "A map of scoped machine type lists.",
+     "additionalProperties": {
+      "$ref": "MachineTypesScopedList",
+      "description": "Name of the scope containing this set of machine types."
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of resource.",
+     "default": "compute#machineTypeAggregatedList"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "A token used to continue a truncated list request (output only)."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for this resource (output only)."
+    }
+   }
+  },
+  "MachineTypeList": {
+   "id": "MachineTypeList",
+   "type": "object",
+   "description": "Contains a list of machine type resources.",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only)."
+    },
+    "items": {
+     "type": "array",
+     "description": "The machine type resources.",
+     "items": {
+      "$ref": "MachineType"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of resource.",
+     "default": "compute#machineTypeList"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "A token used to continue a truncated list request (output only)."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for this resource (output only)."
+    }
+   }
+  },
+  "MachineTypesScopedList": {
+   "id": "MachineTypesScopedList",
+   "type": "object",
+   "properties": {
+    "machineTypes": {
+     "type": "array",
+     "description": "List of machine types contained in this scope.",
+     "items": {
+      "$ref": "MachineType"
+     }
+    },
+    "warning": {
+     "type": "object",
+     "description": "Informational warning which replaces the list of machine types when the list is empty.",
+     "properties": {
+      "code": {
+       "type": "string",
+       "description": "The warning type identifier for this warning.",
+       "enum": [
+        "DEPRECATED_RESOURCE_USED",
+        "INJECTED_KERNELS_DEPRECATED",
+        "NEXT_HOP_ADDRESS_NOT_ASSIGNED",
+        "NEXT_HOP_CANNOT_IP_FORWARD",
+        "NEXT_HOP_INSTANCE_NOT_FOUND",
+        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK",
+        "NEXT_HOP_NOT_RUNNING",
+        "NO_RESULTS_ON_PAGE",
+        "REQUIRED_TOS_AGREEMENT",
+        "UNREACHABLE"
+       ],
+       "enumDescriptions": [
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        ""
+       ]
+      },
+      "data": {
+       "type": "array",
+       "description": "Metadata for this warning in 'key: value' format.",
+       "items": {
+        "type": "object",
+        "properties": {
+         "key": {
+          "type": "string",
+          "description": "A key for the warning data."
+         },
+         "value": {
+          "type": "string",
+          "description": "A warning data value corresponding to the key."
+         }
+        }
+       }
+      },
+      "message": {
+       "type": "string",
+       "description": "Optional human-readable details for this warning."
+      }
+     }
+    }
+   }
+  },
+  "Metadata": {
+   "id": "Metadata",
+   "type": "object",
+   "description": "A metadata key/value entry.",
+   "properties": {
+    "fingerprint": {
+     "type": "string",
+     "description": "Fingerprint of this resource. A hash of the metadata's contents. This field is used for optimistic locking. An up-to-date metadata fingerprint must be provided in order to modify metadata.",
+     "format": "byte"
+    },
+    "items": {
+     "type": "array",
+     "description": "Array of key/value pairs. The total size of all keys and values must be less than 512 KB.",
+     "items": {
+      "type": "object",
+      "properties": {
+       "key": {
+        "type": "string",
+        "description": "Key for the metadata entry. Keys must conform to the following regexp: [a-zA-Z0-9-_]+, and be less than 128 bytes in length. This is reflected as part of a URL in the metadata server. Additionally, to avoid ambiguity, keys must not conflict with any other metadata keys for the project.",
+        "pattern": "[a-zA-Z0-9-_]{1,128}",
+        "annotations": {
+         "required": [
+          "compute.instances.insert",
+          "compute.projects.setCommonInstanceMetadata"
+         ]
+        }
+       },
+       "value": {
+        "type": "string",
+        "description": "Value for the metadata entry. These are free-form strings, and only have meaning as interpreted by the image running in the instance. The only restriction placed on values is that their size must be less than or equal to 32768 bytes.",
+        "annotations": {
+         "required": [
+          "compute.instances.insert",
+          "compute.projects.setCommonInstanceMetadata"
+         ]
+        }
+       }
+      }
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of the resource.",
+     "default": "compute#metadata"
+    }
+   }
+  },
+  "Network": {
+   "id": "Network",
+   "type": "object",
+   "description": "A network resource.",
+   "properties": {
+    "IPv4Range": {
+     "type": "string",
+     "description": "Required; 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"
+      ]
+     }
+    },
+    "creationTimestamp": {
+     "type": "string",
+     "description": "Creation timestamp in RFC3339 text format (output only)."
+    },
+    "description": {
+     "type": "string",
+     "description": "An optional textual description of the resource; provided by the client when the resource is created."
+    },
+    "gatewayIPv4": {
+     "type": "string",
+     "description": "An optional address that is used for default routing to other networks. This must be within the range specified by IPv4Range, and is typically the first usable address in that range. If not specified, the default value is the first usable address in IPv4Range.",
+     "pattern": "[0-9]{1,3}(?:\\.[0-9]{1,3}){3}"
+    },
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only).",
+     "format": "uint64"
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of the resource.",
+     "default": "compute#network"
+    },
+    "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.",
+     "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+     "annotations": {
+      "required": [
+       "compute.networks.insert"
+      ]
+     }
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for the resource (output only)."
+    }
+   }
+  },
+  "NetworkInterface": {
+   "id": "NetworkInterface",
+   "type": "object",
+   "description": "A network interface resource attached to an instance.",
+   "properties": {
+    "accessConfigs": {
+     "type": "array",
+     "description": "Array of 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 access config supported. If there are no accessConfigs specified, then this instance will have no external internet access.",
+     "items": {
+      "$ref": "AccessConfig"
+     }
+    },
+    "name": {
+     "type": "string",
+     "description": "Name of the network interface, determined by the server; for network devices, these are e.g. eth0, eth1, etc. (output only)."
+    },
+    "network": {
+     "type": "string",
+     "description": "URL of the network resource attached to this interface.",
+     "annotations": {
+      "required": [
+       "compute.instances.insert"
+      ]
+     }
+    },
+    "networkIP": {
+     "type": "string",
+     "description": "An optional IPV4 internal network address assigned to the instance for this network interface (output only)."
+    }
+   }
+  },
+  "NetworkList": {
+   "id": "NetworkList",
+   "type": "object",
+   "description": "Contains a list of network resources.",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only)."
+    },
+    "items": {
+     "type": "array",
+     "description": "The network resources.",
+     "items": {
+      "$ref": "Network"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of resource.",
+     "default": "compute#networkList"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "A token used to continue a truncated list request (output only)."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for this resource (output only)."
+    }
+   }
+  },
+  "Operation": {
+   "id": "Operation",
+   "type": "object",
+   "description": "An operation resource, used to manage asynchronous API requests.",
+   "properties": {
+    "clientOperationId": {
+     "type": "string",
+     "description": "An optional identifier specified by the client when the mutation was initiated. Must be unique for all operation resources in the project (output only)."
+    },
+    "creationTimestamp": {
+     "type": "string",
+     "description": "Creation timestamp in RFC3339 text format (output only)."
+    },
+    "endTime": {
+     "type": "string",
+     "description": "The time that this operation was completed. This is in RFC 3339 format (output only)."
+    },
+    "error": {
+     "type": "object",
+     "description": "If errors occurred during processing of this operation, this field will be populated (output only).",
+     "properties": {
+      "errors": {
+       "type": "array",
+       "description": "The array of errors encountered while processing this operation.",
+       "items": {
+        "type": "object",
+        "properties": {
+         "code": {
+          "type": "string",
+          "description": "The error type identifier for this error."
+         },
+         "location": {
+          "type": "string",
+          "description": "Indicates the field in the request which caused the error. This property is optional."
+         },
+         "message": {
+          "type": "string",
+          "description": "An optional, human-readable error message."
+         }
+        }
+       }
+      }
+     }
+    },
+    "httpErrorMessage": {
+     "type": "string",
+     "description": "If operation fails, the HTTP error message returned, e.g. NOT FOUND. (output only)."
+    },
+    "httpErrorStatusCode": {
+     "type": "integer",
+     "description": "If operation fails, the HTTP error status code returned, e.g. 404. (output only).",
+     "format": "int32"
+    },
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only).",
+     "format": "uint64"
+    },
+    "insertTime": {
+     "type": "string",
+     "description": "The time that this operation was requested. This is in RFC 3339 format (output only)."
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of the resource.",
+     "default": "compute#operation"
+    },
+    "name": {
+     "type": "string",
+     "description": "Name of the resource (output only)."
+    },
+    "operationType": {
+     "type": "string",
+     "description": "Type of the operation. Examples include \"insert\", \"update\", and \"delete\" (output only)."
+    },
+    "progress": {
+     "type": "integer",
+     "description": "An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess at when the operation will be complete. This number should be monotonically increasing as the operation progresses (output only).",
+     "format": "int32"
+    },
+    "region": {
+     "type": "string",
+     "description": "URL of the region where the operation resides (output only)."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for the resource (output only)."
+    },
+    "startTime": {
+     "type": "string",
+     "description": "The time that this operation was started by the server. This is in RFC 3339 format (output only)."
+    },
+    "status": {
+     "type": "string",
+     "description": "Status of the operation. Can be one of the following: \"PENDING\", \"RUNNING\", or \"DONE\" (output only).",
+     "enum": [
+      "DONE",
+      "PENDING",
+      "RUNNING"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      ""
+     ]
+    },
+    "statusMessage": {
+     "type": "string",
+     "description": "An optional textual description of the current status of the operation (output only)."
+    },
+    "targetId": {
+     "type": "string",
+     "description": "Unique target id which identifies a particular incarnation of the target (output only).",
+     "format": "uint64"
+    },
+    "targetLink": {
+     "type": "string",
+     "description": "URL of the resource the operation is mutating (output only)."
+    },
+    "user": {
+     "type": "string",
+     "description": "User who requested the operation, for example \"user@example.com\" (output only)."
+    },
+    "warnings": {
+     "type": "array",
+     "description": "If warning messages generated during processing of this operation, this field will be populated (output only).",
+     "items": {
+      "type": "object",
+      "properties": {
+       "code": {
+        "type": "string",
+        "description": "The warning type identifier for this warning.",
+        "enum": [
+         "DEPRECATED_RESOURCE_USED",
+         "INJECTED_KERNELS_DEPRECATED",
+         "NEXT_HOP_ADDRESS_NOT_ASSIGNED",
+         "NEXT_HOP_CANNOT_IP_FORWARD",
+         "NEXT_HOP_INSTANCE_NOT_FOUND",
+         "NEXT_HOP_INSTANCE_NOT_ON_NETWORK",
+         "NEXT_HOP_NOT_RUNNING",
+         "NO_RESULTS_ON_PAGE",
+         "REQUIRED_TOS_AGREEMENT",
+         "UNREACHABLE"
+        ],
+        "enumDescriptions": [
+         "",
+         "",
+         "",
+         "",
+         "",
+         "",
+         "",
+         "",
+         "",
+         ""
+        ]
+       },
+       "data": {
+        "type": "array",
+        "description": "Metadata for this warning in 'key: value' format.",
+        "items": {
+         "type": "object",
+         "properties": {
+          "key": {
+           "type": "string",
+           "description": "A key for the warning data."
+          },
+          "value": {
+           "type": "string",
+           "description": "A warning data value corresponding to the key."
+          }
+         }
+        }
+       },
+       "message": {
+        "type": "string",
+        "description": "Optional human-readable details for this warning."
+       }
+      }
+     }
+    },
+    "zone": {
+     "type": "string",
+     "description": "URL of the zone where the operation resides (output only)."
+    }
+   }
+  },
+  "OperationAggregatedList": {
+   "id": "OperationAggregatedList",
+   "type": "object",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only)."
+    },
+    "items": {
+     "type": "object",
+     "description": "A map of scoped operation lists.",
+     "additionalProperties": {
+      "$ref": "OperationsScopedList",
+      "description": "Name of the scope containing this set of operations."
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of resource.",
+     "default": "compute#operationAggregatedList"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "A token used to continue a truncated list request (output only)."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for this resource (output only)."
+    }
+   }
+  },
+  "OperationList": {
+   "id": "OperationList",
+   "type": "object",
+   "description": "Contains a list of operation resources.",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only)."
+    },
+    "items": {
+     "type": "array",
+     "description": "The operation resources.",
+     "items": {
+      "$ref": "Operation"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of resource.",
+     "default": "compute#operationList"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "A token used to continue a truncated list request (output only)."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for this resource (output only)."
+    }
+   }
+  },
+  "OperationsScopedList": {
+   "id": "OperationsScopedList",
+   "type": "object",
+   "properties": {
+    "operations": {
+     "type": "array",
+     "description": "List of operations contained in this scope.",
+     "items": {
+      "$ref": "Operation"
+     }
+    },
+    "warning": {
+     "type": "object",
+     "description": "Informational warning which replaces the list of operations when the list is empty.",
+     "properties": {
+      "code": {
+       "type": "string",
+       "description": "The warning type identifier for this warning.",
+       "enum": [
+        "DEPRECATED_RESOURCE_USED",
+        "INJECTED_KERNELS_DEPRECATED",
+        "NEXT_HOP_ADDRESS_NOT_ASSIGNED",
+        "NEXT_HOP_CANNOT_IP_FORWARD",
+        "NEXT_HOP_INSTANCE_NOT_FOUND",
+        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK",
+        "NEXT_HOP_NOT_RUNNING",
+        "NO_RESULTS_ON_PAGE",
+        "REQUIRED_TOS_AGREEMENT",
+        "UNREACHABLE"
+       ],
+       "enumDescriptions": [
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        ""
+       ]
+      },
+      "data": {
+       "type": "array",
+       "description": "Metadata for this warning in 'key: value' format.",
+       "items": {
+        "type": "object",
+        "properties": {
+         "key": {
+          "type": "string",
+          "description": "A key for the warning data."
+         },
+         "value": {
+          "type": "string",
+          "description": "A warning data value corresponding to the key."
+         }
+        }
+       }
+      },
+      "message": {
+       "type": "string",
+       "description": "Optional human-readable details for this warning."
+      }
+     }
+    }
+   }
+  },
+  "Project": {
+   "id": "Project",
+   "type": "object",
+   "description": "A project resource. Projects can be created only in the APIs Console. Unless marked otherwise, values can only be modified in the console.",
+   "properties": {
+    "commonInstanceMetadata": {
+     "$ref": "Metadata",
+     "description": "Metadata key/value pairs available to all instances contained in this project."
+    },
+    "creationTimestamp": {
+     "type": "string",
+     "description": "Creation timestamp in RFC3339 text format (output only)."
+    },
+    "description": {
+     "type": "string",
+     "description": "An optional textual description of the resource."
+    },
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only).",
+     "format": "uint64"
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of the resource.",
+     "default": "compute#project"
+    },
+    "name": {
+     "type": "string",
+     "description": "Name of the resource."
+    },
+    "quotas": {
+     "type": "array",
+     "description": "Quotas assigned to this project.",
+     "items": {
+      "$ref": "Quota"
+     }
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for the resource (output only)."
+    }
+   }
+  },
+  "Quota": {
+   "id": "Quota",
+   "type": "object",
+   "description": "A quotas entry.",
+   "properties": {
+    "limit": {
+     "type": "number",
+     "description": "Quota limit for this metric.",
+     "format": "double"
+    },
+    "metric": {
+     "type": "string",
+     "description": "Name of the quota metric.",
+     "enum": [
+      "CPUS",
+      "DISKS",
+      "DISKS_TOTAL_GB",
+      "EPHEMERAL_ADDRESSES",
+      "FIREWALLS",
+      "FORWARDING_RULES",
+      "HEALTH_CHECKS",
+      "IMAGES",
+      "IMAGES_TOTAL_GB",
+      "INSTANCES",
+      "IN_USE_ADDRESSES",
+      "KERNELS",
+      "KERNELS_TOTAL_GB",
+      "NETWORKS",
+      "OPERATIONS",
+      "ROUTES",
+      "SNAPSHOTS",
+      "STATIC_ADDRESSES",
+      "TARGET_INSTANCES",
+      "TARGET_POOLS"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      "",
+      "",
+      "",
+      "",
+      "",
+      "",
+      "",
+      "",
+      "",
+      "",
+      "",
+      "",
+      "",
+      "",
+      "",
+      "",
+      "",
+      ""
+     ]
+    },
+    "usage": {
+     "type": "number",
+     "description": "Current usage of this metric.",
+     "format": "double"
+    }
+   }
+  },
+  "Region": {
+   "id": "Region",
+   "type": "object",
+   "description": "Region resource.",
+   "properties": {
+    "creationTimestamp": {
+     "type": "string",
+     "description": "Creation timestamp in RFC3339 text format (output only)."
+    },
+    "deprecated": {
+     "$ref": "DeprecationStatus",
+     "description": "The deprecation status associated with this region."
+    },
+    "description": {
+     "type": "string",
+     "description": "Textual description of the resource."
+    },
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only).",
+     "format": "uint64"
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of the resource.",
+     "default": "compute#region"
+    },
+    "name": {
+     "type": "string",
+     "description": "Name of the resource."
+    },
+    "quotas": {
+     "type": "array",
+     "description": "Quotas assigned to this region.",
+     "items": {
+      "$ref": "Quota"
+     }
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for the resource (output only)."
+    },
+    "status": {
+     "type": "string",
+     "description": "Status of the region, \"UP\" or \"DOWN\".",
+     "enum": [
+      "DOWN",
+      "UP"
+     ],
+     "enumDescriptions": [
+      "",
+      ""
+     ]
+    },
+    "zones": {
+     "type": "array",
+     "description": "A list of zones homed in this region, in the form of resource URLs.",
+     "items": {
+      "type": "string"
+     }
+    }
+   }
+  },
+  "RegionList": {
+   "id": "RegionList",
+   "type": "object",
+   "description": "Contains a list of region resources.",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only)."
+    },
+    "items": {
+     "type": "array",
+     "description": "The region resources.",
+     "items": {
+      "$ref": "Region"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of resource.",
+     "default": "compute#regionList"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "A token used to continue a truncated list request (output only)."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for this resource (output only)."
+    }
+   }
+  },
+  "Route": {
+   "id": "Route",
+   "type": "object",
+   "description": "The route resource. A Route is a rule that specifies how certain packets should be handled by the virtual network. Routes are associated with VMs by tag and the set of Routes for a particular VM is called its routing table. For each packet leaving a VM, the system searches that VM's routing table for a single best matching Route. Routes match packets by destination IP address, preferring smaller or more specific ranges over larger ones. If there is a tie, the system selects the Route with the smallest priority value. If there is still a tie, it uses the layer three and four packet headers to select just one of the remaining matching Routes. The packet is then forwarded as specified by the next_hop field of the winning Route -- either to another VM destination, a VM gateway or a GCE operated gateway. Packets that do not match any Route in the sending VM's routing table will be dropped.",
+   "properties": {
+    "creationTimestamp": {
+     "type": "string",
+     "description": "Creation timestamp in RFC3339 text format (output only)."
+    },
+    "description": {
+     "type": "string",
+     "description": "An optional textual description of the resource; provided by the client when the resource is created."
+    },
+    "destRange": {
+     "type": "string",
+     "description": "Which packets does this route apply to?",
+     "annotations": {
+      "required": [
+       "compute.routes.insert"
+      ]
+     }
+    },
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only).",
+     "format": "uint64"
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of the resource.",
+     "default": "compute#route"
+    },
+    "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.",
+     "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+     "annotations": {
+      "required": [
+       "compute.routes.insert"
+      ]
+     }
+    },
+    "network": {
+     "type": "string",
+     "description": "URL of the network to which this route is applied; provided by the client when the route is created.",
+     "annotations": {
+      "required": [
+       "compute.routes.insert"
+      ]
+     }
+    },
+    "nextHopGateway": {
+     "type": "string",
+     "description": "The URL to a gateway that should handle matching packets."
+    },
+    "nextHopInstance": {
+     "type": "string",
+     "description": "The URL to an instance that should handle matching packets."
+    },
+    "nextHopIp": {
+     "type": "string",
+     "description": "The network IP address of an instance that should handle matching packets."
+    },
+    "nextHopNetwork": {
+     "type": "string",
+     "description": "The URL of the local network if it should handle matching packets."
+    },
+    "priority": {
+     "type": "integer",
+     "description": "Breaks ties between Routes of equal specificity. Routes with smaller values win when tied with routes with larger values.",
+     "format": "uint32",
+     "annotations": {
+      "required": [
+       "compute.routes.insert"
+      ]
+     }
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for the resource (output only)."
+    },
+    "tags": {
+     "type": "array",
+     "description": "A list of instance tags to which this route applies.",
+     "items": {
+      "type": "string"
+     },
+     "annotations": {
+      "required": [
+       "compute.routes.insert"
+      ]
+     }
+    },
+    "warnings": {
+     "type": "array",
+     "description": "If potential misconfigurations are detected for this route, this field will be populated with warning messages.",
+     "items": {
+      "type": "object",
+      "properties": {
+       "code": {
+        "type": "string",
+        "description": "The warning type identifier for this warning.",
+        "enum": [
+         "DEPRECATED_RESOURCE_USED",
+         "INJECTED_KERNELS_DEPRECATED",
+         "NEXT_HOP_ADDRESS_NOT_ASSIGNED",
+         "NEXT_HOP_CANNOT_IP_FORWARD",
+         "NEXT_HOP_INSTANCE_NOT_FOUND",
+         "NEXT_HOP_INSTANCE_NOT_ON_NETWORK",
+         "NEXT_HOP_NOT_RUNNING",
+         "NO_RESULTS_ON_PAGE",
+         "REQUIRED_TOS_AGREEMENT",
+         "UNREACHABLE"
+        ],
+        "enumDescriptions": [
+         "",
+         "",
+         "",
+         "",
+         "",
+         "",
+         "",
+         "",
+         "",
+         ""
+        ]
+       },
+       "data": {
+        "type": "array",
+        "description": "Metadata for this warning in 'key: value' format.",
+        "items": {
+         "type": "object",
+         "properties": {
+          "key": {
+           "type": "string",
+           "description": "A key for the warning data."
+          },
+          "value": {
+           "type": "string",
+           "description": "A warning data value corresponding to the key."
+          }
+         }
+        }
+       },
+       "message": {
+        "type": "string",
+        "description": "Optional human-readable details for this warning."
+       }
+      }
+     }
+    }
+   }
+  },
+  "RouteList": {
+   "id": "RouteList",
+   "type": "object",
+   "description": "Contains a list of route resources.",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only)."
+    },
+    "items": {
+     "type": "array",
+     "description": "The route resources.",
+     "items": {
+      "$ref": "Route"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of resource.",
+     "default": "compute#routeList"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "A token used to continue a truncated list request (output only)."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for this resource (output only)."
+    }
+   }
+  },
+  "Scheduling": {
+   "id": "Scheduling",
+   "type": "object",
+   "description": "Scheduling options for an Instance.",
+   "properties": {
+    "automaticRestart": {
+     "type": "boolean",
+     "description": "Whether the Instance should be automatically restarted whenever it is terminated by Compute Engine (not terminated by user)."
+    },
+    "onHostMaintenance": {
+     "type": "string",
+     "description": "How the instance should behave when the host machine undergoes maintenance that may temporarily impact instance performance.",
+     "enum": [
+      "MIGRATE",
+      "TERMINATE"
+     ],
+     "enumDescriptions": [
+      "",
+      ""
+     ]
+    }
+   }
+  },
+  "SerialPortOutput": {
+   "id": "SerialPortOutput",
+   "type": "object",
+   "description": "An instance serial console output.",
+   "properties": {
+    "contents": {
+     "type": "string",
+     "description": "The contents of the console output."
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of the resource.",
+     "default": "compute#serialPortOutput"
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for the resource (output only)."
+    }
+   }
+  },
+  "ServiceAccount": {
+   "id": "ServiceAccount",
+   "type": "object",
+   "description": "A service account.",
+   "properties": {
+    "email": {
+     "type": "string",
+     "description": "Email address of the service account."
+    },
+    "scopes": {
+     "type": "array",
+     "description": "The list of scopes to be made available for this service account.",
+     "items": {
+      "type": "string"
+     }
+    }
+   }
+  },
+  "Snapshot": {
+   "id": "Snapshot",
+   "type": "object",
+   "description": "A persistent disk snapshot resource.",
+   "properties": {
+    "creationTimestamp": {
+     "type": "string",
+     "description": "Creation timestamp in RFC3339 text format (output only)."
+    },
+    "description": {
+     "type": "string",
+     "description": "An optional textual description of the resource; provided by the client when the resource is created."
+    },
+    "diskSizeGb": {
+     "type": "string",
+     "description": "Size of the persistent disk snapshot, specified in GB (output only).",
+     "format": "int64"
+    },
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only).",
+     "format": "uint64"
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of the resource.",
+     "default": "compute#snapshot"
+    },
+    "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.",
+     "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?"
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for the resource (output only)."
+    },
+    "sourceDisk": {
+     "type": "string",
+     "description": "The source disk used to create this snapshot. Once the source disk has been deleted from the system, this field will be cleared, and will not be set even if a disk with the same name has been re-created (output only)."
+    },
+    "sourceDiskId": {
+     "type": "string",
+     "description": "The 'id' value of the disk used to create this snapshot. This value may be used to determine whether the snapshot was taken from the current or a previous instance of a given disk name."
+    },
+    "status": {
+     "type": "string",
+     "description": "The status of the persistent disk snapshot (output only).",
+     "enum": [
+      "CREATING",
+      "DELETING",
+      "FAILED",
+      "READY",
+      "UPLOADING"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      "",
+      "",
+      ""
+     ]
+    },
+    "storageBytes": {
+     "type": "string",
+     "description": "A size of the the storage used by the snapshot. As snapshots share storage this number is expected to change with snapshot creation/deletion.",
+     "format": "int64"
+    },
+    "storageBytesStatus": {
+     "type": "string",
+     "description": "An indicator whether storageBytes is in a stable state, or it is being adjusted as a result of shared storage reallocation.",
+     "enum": [
+      "UPDATING",
+      "UP_TO_DATE"
+     ],
+     "enumDescriptions": [
+      "",
+      ""
+     ]
+    }
+   }
+  },
+  "SnapshotList": {
+   "id": "SnapshotList",
+   "type": "object",
+   "description": "Contains a list of persistent disk snapshot resources.",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only)."
+    },
+    "items": {
+     "type": "array",
+     "description": "The persistent snapshot resources.",
+     "items": {
+      "$ref": "Snapshot"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of resource.",
+     "default": "compute#snapshotList"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "A token used to continue a truncated list request (output only)."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for this resource (output only)."
+    }
+   }
+  },
+  "Tags": {
+   "id": "Tags",
+   "type": "object",
+   "description": "A set of instance tags.",
+   "properties": {
+    "fingerprint": {
+     "type": "string",
+     "description": "Fingerprint of this resource. A hash of the tags stored in this object. This field is used optimistic locking. An up-to-date tags fingerprint must be provided in order to modify tags.",
+     "format": "byte"
+    },
+    "items": {
+     "type": "array",
+     "description": "An array of tags. Each tag must be 1-63 characters long, and comply with RFC1035.",
+     "items": {
+      "type": "string"
+     }
+    }
+   }
+  },
+  "TargetInstance": {
+   "id": "TargetInstance",
+   "type": "object",
+   "description": "A TargetInstance resource. This resource defines an endpoint VM that terminates traffic of certain protocols.",
+   "properties": {
+    "creationTimestamp": {
+     "type": "string",
+     "description": "Creation timestamp in RFC3339 text format (output only)."
+    },
+    "description": {
+     "type": "string",
+     "description": "An optional textual description of the resource; provided by the client when the resource is created."
+    },
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only).",
+     "format": "uint64"
+    },
+    "instance": {
+     "type": "string",
+     "description": "The URL to the instance that terminates the relevant traffic."
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of the resource.",
+     "default": "compute#targetInstance"
+    },
+    "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.",
+     "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?"
+    },
+    "natPolicy": {
+     "type": "string",
+     "description": "NAT option controlling how IPs are NAT'ed to the VM. Currently only NO_NAT (default value) is supported.",
+     "enum": [
+      "NO_NAT"
+     ],
+     "enumDescriptions": [
+      ""
+     ]
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for the resource (output only)."
+    },
+    "zone": {
+     "type": "string",
+     "description": "URL of the zone where the target instance resides (output only)."
+    }
+   }
+  },
+  "TargetInstanceAggregatedList": {
+   "id": "TargetInstanceAggregatedList",
+   "type": "object",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only)."
+    },
+    "items": {
+     "type": "object",
+     "description": "A map of scoped target instance lists.",
+     "additionalProperties": {
+      "$ref": "TargetInstancesScopedList",
+      "description": "Name of the scope containing this set of target instances."
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of resource.",
+     "default": "compute#targetInstanceAggregatedList"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "A token used to continue a truncated list request (output only)."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for this resource (output only)."
+    }
+   }
+  },
+  "TargetInstanceList": {
+   "id": "TargetInstanceList",
+   "type": "object",
+   "description": "Contains a list of TargetInstance resources.",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only)."
+    },
+    "items": {
+     "type": "array",
+     "description": "The TargetInstance resources.",
+     "items": {
+      "$ref": "TargetInstance"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of resource.",
+     "default": "compute#targetInstanceList"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "A token used to continue a truncated list request (output only)."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for this resource (output only)."
+    }
+   }
+  },
+  "TargetInstancesScopedList": {
+   "id": "TargetInstancesScopedList",
+   "type": "object",
+   "properties": {
+    "targetInstances": {
+     "type": "array",
+     "description": "List of target instances contained in this scope.",
+     "items": {
+      "$ref": "TargetInstance"
+     }
+    },
+    "warning": {
+     "type": "object",
+     "description": "Informational warning which replaces the list of addresses when the list is empty.",
+     "properties": {
+      "code": {
+       "type": "string",
+       "description": "The warning type identifier for this warning.",
+       "enum": [
+        "DEPRECATED_RESOURCE_USED",
+        "INJECTED_KERNELS_DEPRECATED",
+        "NEXT_HOP_ADDRESS_NOT_ASSIGNED",
+        "NEXT_HOP_CANNOT_IP_FORWARD",
+        "NEXT_HOP_INSTANCE_NOT_FOUND",
+        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK",
+        "NEXT_HOP_NOT_RUNNING",
+        "NO_RESULTS_ON_PAGE",
+        "REQUIRED_TOS_AGREEMENT",
+        "UNREACHABLE"
+       ],
+       "enumDescriptions": [
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        ""
+       ]
+      },
+      "data": {
+       "type": "array",
+       "description": "Metadata for this warning in 'key: value' format.",
+       "items": {
+        "type": "object",
+        "properties": {
+         "key": {
+          "type": "string",
+          "description": "A key for the warning data."
+         },
+         "value": {
+          "type": "string",
+          "description": "A warning data value corresponding to the key."
+         }
+        }
+       }
+      },
+      "message": {
+       "type": "string",
+       "description": "Optional human-readable details for this warning."
+      }
+     }
+    }
+   }
+  },
+  "TargetPool": {
+   "id": "TargetPool",
+   "type": "object",
+   "description": "A TargetPool resource. This resource defines a pool of VMs, associated HttpHealthCheck resources, and the fallback TargetPool.",
+   "properties": {
+    "backupPool": {
+     "type": "string",
+     "description": "This field is applicable only when the containing target pool is serving a forwarding rule as the primary pool, and its 'failoverRatio' field is properly set to a value between [0, 1].\n\n'backupPool' and 'failoverRatio' together define the fallback behavior of the primary target pool: if the ratio of the healthy VMs in the primary pool is at or below 'failoverRatio', traffic arriving at the load-balanced IP will be directed to the backup pool.\n\nIn case where 'failoverRatio' and 'backupPool' are not set, or all the VMs in the backup pool are unhealthy, the traffic will be directed back to the primary pool in the \"force\" mode, where traffic will be spread to the healthy VMs with the best effort, or to all VMs when no VM is healthy."
+    },
+    "creationTimestamp": {
+     "type": "string",
+     "description": "Creation timestamp in RFC3339 text format (output only)."
+    },
+    "description": {
+     "type": "string",
+     "description": "An optional textual description of the resource; provided by the client when the resource is created."
+    },
+    "failoverRatio": {
+     "type": "number",
+     "description": "This field is applicable only when the containing target pool is serving a forwarding rule as the primary pool (i.e., not as a backup pool to some other target pool). The value of the field must be in [0, 1].\n\nIf set, 'backupPool' must also be set. They together define the fallback behavior of the primary target pool: if the ratio of the healthy VMs in the primary pool is at or below this number, traffic arriving at the load-balanced IP will be directed to the backup pool.\n\nIn case where 'failoverRatio' is not set or all the VMs in the backup pool are unhealthy, the traffic will be directed back to the primary pool in the \"force\" mode, where traffic will be spread to the healthy VMs with the best effort, or to all VMs when no VM is healthy.",
+     "format": "float"
+    },
+    "healthChecks": {
+     "type": "array",
+     "description": "A list of URLs to the HttpHealthCheck resource. A member VM in this pool is considered healthy if and only if all specified health checks pass. An empty list means all member VMs will be considered healthy at all times.",
+     "items": {
+      "type": "string"
+     }
+    },
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only).",
+     "format": "uint64"
+    },
+    "instances": {
+     "type": "array",
+     "description": "A list of resource URLs to the member VMs serving this pool. They must live in zones contained in the same region as this pool.",
+     "items": {
+      "type": "string"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of the resource.",
+     "default": "compute#targetPool"
+    },
+    "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.",
+     "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?"
+    },
+    "region": {
+     "type": "string",
+     "description": "URL of the region where the target pool resides (output only)."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for the resource (output only)."
+    },
+    "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 VM in the pool; 'CLIENT_IP': Connections from the same client IP will go to the same VM in the pool while that VM remains healthy. 'CLIENT_IP_PROTO': Connections from the same client IP with the same IP protocol will go to the same VM in the pool while that VM remains healthy.",
+     "enum": [
+      "CLIENT_IP",
+      "CLIENT_IP_PROTO",
+      "NONE"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      ""
+     ]
+    }
+   }
+  },
+  "TargetPoolAggregatedList": {
+   "id": "TargetPoolAggregatedList",
+   "type": "object",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only)."
+    },
+    "items": {
+     "type": "object",
+     "description": "A map of scoped target pool lists.",
+     "additionalProperties": {
+      "$ref": "TargetPoolsScopedList",
+      "description": "Name of the scope containing this set of target pools."
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of resource.",
+     "default": "compute#targetPoolAggregatedList"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "A token used to continue a truncated list request (output only)."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for this resource (output only)."
+    }
+   }
+  },
+  "TargetPoolInstanceHealth": {
+   "id": "TargetPoolInstanceHealth",
+   "type": "object",
+   "properties": {
+    "healthStatus": {
+     "type": "array",
+     "items": {
+      "$ref": "HealthStatus"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of resource.",
+     "default": "compute#targetPoolInstanceHealth"
+    }
+   }
+  },
+  "TargetPoolList": {
+   "id": "TargetPoolList",
+   "type": "object",
+   "description": "Contains a list of TargetPool resources.",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only)."
+    },
+    "items": {
+     "type": "array",
+     "description": "The TargetPool resources.",
+     "items": {
+      "$ref": "TargetPool"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of resource.",
+     "default": "compute#targetPoolList"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "A token used to continue a truncated list request (output only)."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for this resource (output only)."
+    }
+   }
+  },
+  "TargetPoolsAddHealthCheckRequest": {
+   "id": "TargetPoolsAddHealthCheckRequest",
+   "type": "object",
+   "properties": {
+    "healthChecks": {
+     "type": "array",
+     "description": "Health check URLs to be added to targetPool.",
+     "items": {
+      "$ref": "HealthCheckReference"
+     }
+    }
+   }
+  },
+  "TargetPoolsAddInstanceRequest": {
+   "id": "TargetPoolsAddInstanceRequest",
+   "type": "object",
+   "properties": {
+    "instances": {
+     "type": "array",
+     "description": "URLs of the instances to be added to targetPool.",
+     "items": {
+      "$ref": "InstanceReference"
+     }
+    }
+   }
+  },
+  "TargetPoolsRemoveHealthCheckRequest": {
+   "id": "TargetPoolsRemoveHealthCheckRequest",
+   "type": "object",
+   "properties": {
+    "healthChecks": {
+     "type": "array",
+     "description": "Health check URLs to be removed from targetPool.",
+     "items": {
+      "$ref": "HealthCheckReference"
+     }
+    }
+   }
+  },
+  "TargetPoolsRemoveInstanceRequest": {
+   "id": "TargetPoolsRemoveInstanceRequest",
+   "type": "object",
+   "properties": {
+    "instances": {
+     "type": "array",
+     "description": "URLs of the instances to be removed from targetPool.",
+     "items": {
+      "$ref": "InstanceReference"
+     }
+    }
+   }
+  },
+  "TargetPoolsScopedList": {
+   "id": "TargetPoolsScopedList",
+   "type": "object",
+   "properties": {
+    "targetPools": {
+     "type": "array",
+     "description": "List of target pools contained in this scope.",
+     "items": {
+      "$ref": "TargetPool"
+     }
+    },
+    "warning": {
+     "type": "object",
+     "description": "Informational warning which replaces the list of addresses when the list is empty.",
+     "properties": {
+      "code": {
+       "type": "string",
+       "description": "The warning type identifier for this warning.",
+       "enum": [
+        "DEPRECATED_RESOURCE_USED",
+        "INJECTED_KERNELS_DEPRECATED",
+        "NEXT_HOP_ADDRESS_NOT_ASSIGNED",
+        "NEXT_HOP_CANNOT_IP_FORWARD",
+        "NEXT_HOP_INSTANCE_NOT_FOUND",
+        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK",
+        "NEXT_HOP_NOT_RUNNING",
+        "NO_RESULTS_ON_PAGE",
+        "REQUIRED_TOS_AGREEMENT",
+        "UNREACHABLE"
+       ],
+       "enumDescriptions": [
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        ""
+       ]
+      },
+      "data": {
+       "type": "array",
+       "description": "Metadata for this warning in 'key: value' format.",
+       "items": {
+        "type": "object",
+        "properties": {
+         "key": {
+          "type": "string",
+          "description": "A key for the warning data."
+         },
+         "value": {
+          "type": "string",
+          "description": "A warning data value corresponding to the key."
+         }
+        }
+       }
+      },
+      "message": {
+       "type": "string",
+       "description": "Optional human-readable details for this warning."
+      }
+     }
+    }
+   }
+  },
+  "TargetReference": {
+   "id": "TargetReference",
+   "type": "object",
+   "properties": {
+    "target": {
+     "type": "string"
+    }
+   }
+  },
+  "Zone": {
+   "id": "Zone",
+   "type": "object",
+   "description": "A zone resource.",
+   "properties": {
+    "creationTimestamp": {
+     "type": "string",
+     "description": "Creation timestamp in RFC3339 text format (output only)."
+    },
+    "deprecated": {
+     "$ref": "DeprecationStatus",
+     "description": "The deprecation status associated with this zone."
+    },
+    "description": {
+     "type": "string",
+     "description": "Textual description of the resource."
+    },
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only).",
+     "format": "uint64"
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of the resource.",
+     "default": "compute#zone"
+    },
+    "maintenanceWindows": {
+     "type": "array",
+     "description": "Scheduled maintenance windows for the zone. When the zone is in a maintenance window, all resources which reside in the zone will be unavailable.",
+     "items": {
+      "type": "object",
+      "properties": {
+       "beginTime": {
+        "type": "string",
+        "description": "Begin time of the maintenance window, in RFC 3339 format."
+       },
+       "description": {
+        "type": "string",
+        "description": "Textual description of the maintenance window."
+       },
+       "endTime": {
+        "type": "string",
+        "description": "End time of the maintenance window, in RFC 3339 format."
+       },
+       "name": {
+        "type": "string",
+        "description": "Name of the maintenance window."
+       }
+      }
+     }
+    },
+    "name": {
+     "type": "string",
+     "description": "Name of the resource."
+    },
+    "region": {
+     "type": "string",
+     "description": "Full URL reference to the region which hosts the zone (output only)."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for the resource (output only)."
+    },
+    "status": {
+     "type": "string",
+     "description": "Status of the zone. \"UP\" or \"DOWN\".",
+     "enum": [
+      "DOWN",
+      "UP"
+     ],
+     "enumDescriptions": [
+      "",
+      ""
+     ]
+    }
+   }
+  },
+  "ZoneList": {
+   "id": "ZoneList",
+   "type": "object",
+   "description": "Contains a list of zone resources.",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "Unique identifier for the resource; defined by the server (output only)."
+    },
+    "items": {
+     "type": "array",
+     "description": "The zone resources.",
+     "items": {
+      "$ref": "Zone"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Type of resource.",
+     "default": "compute#zoneList"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "A token used to continue a truncated list request (output only)."
+    },
+    "selfLink": {
+     "type": "string",
+     "description": "Server defined URL for this resource (output only)."
+    }
+   }
+  }
+ },
+ "resources": {
+  "addresses": {
+   "methods": {
+    "aggregatedList": {
+     "id": "compute.addresses.aggregatedList",
+     "path": "{project}/aggregated/addresses",
+     "httpMethod": "GET",
+     "description": "Retrieves the list of addresses grouped by scope.",
+     "parameters": {
+      "filter": {
+       "type": "string",
+       "description": "Optional. Filter expression for filtering listed resources.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+       "default": "100",
+       "format": "uint32",
+       "minimum": "0",
+       "maximum": "500",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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": "AddressAggregatedList"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "delete": {
+     "id": "compute.addresses.delete",
+     "path": "{project}/regions/{region}/addresses/{address}",
+     "httpMethod": "DELETE",
+     "description": "Deletes the specified address resource.",
+     "parameters": {
+      "address": {
+       "type": "string",
+       "description": "Name of the address 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"
+      },
+      "region": {
+       "type": "string",
+       "description": "Name of the region scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "region",
+      "address"
+     ],
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "get": {
+     "id": "compute.addresses.get",
+     "path": "{project}/regions/{region}/addresses/{address}",
+     "httpMethod": "GET",
+     "description": "Returns the specified address resource.",
+     "parameters": {
+      "address": {
+       "type": "string",
+       "description": "Name of the address 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"
+      },
+      "region": {
+       "type": "string",
+       "description": "Name of the region scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "region",
+      "address"
+     ],
+     "response": {
+      "$ref": "Address"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "insert": {
+     "id": "compute.addresses.insert",
+     "path": "{project}/regions/{region}/addresses",
+     "httpMethod": "POST",
+     "description": "Creates an address 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"
+      },
+      "region": {
+       "type": "string",
+       "description": "Name of the region scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "region"
+     ],
+     "request": {
+      "$ref": "Address"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "list": {
+     "id": "compute.addresses.list",
+     "path": "{project}/regions/{region}/addresses",
+     "httpMethod": "GET",
+     "description": "Retrieves the list of address resources contained within the specified region.",
+     "parameters": {
+      "filter": {
+       "type": "string",
+       "description": "Optional. Filter expression for filtering listed resources.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+       "default": "100",
+       "format": "uint32",
+       "minimum": "0",
+       "maximum": "500",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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"
+      },
+      "region": {
+       "type": "string",
+       "description": "Name of the region scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "region"
+     ],
+     "response": {
+      "$ref": "AddressList"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    }
+   }
+  },
+  "disks": {
+   "methods": {
+    "aggregatedList": {
+     "id": "compute.disks.aggregatedList",
+     "path": "{project}/aggregated/disks",
+     "httpMethod": "GET",
+     "description": "Retrieves the list of disks grouped by scope.",
+     "parameters": {
+      "filter": {
+       "type": "string",
+       "description": "Optional. Filter expression for filtering listed resources.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+       "default": "100",
+       "format": "uint32",
+       "minimum": "0",
+       "maximum": "500",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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": "DiskAggregatedList"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "createSnapshot": {
+     "id": "compute.disks.createSnapshot",
+     "path": "{project}/zones/{zone}/disks/{disk}/createSnapshot",
+     "httpMethod": "POST",
+     "parameters": {
+      "disk": {
+       "type": "string",
+       "description": "Name of the persistent disk 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"
+      },
+      "zone": {
+       "type": "string",
+       "description": "Name of the zone scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "zone",
+      "disk"
+     ],
+     "request": {
+      "$ref": "Snapshot"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "delete": {
+     "id": "compute.disks.delete",
+     "path": "{project}/zones/{zone}/disks/{disk}",
+     "httpMethod": "DELETE",
+     "description": "Deletes the specified persistent disk resource.",
+     "parameters": {
+      "disk": {
+       "type": "string",
+       "description": "Name of the persistent disk 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"
+      },
+      "zone": {
+       "type": "string",
+       "description": "Name of the zone scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "zone",
+      "disk"
+     ],
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "get": {
+     "id": "compute.disks.get",
+     "path": "{project}/zones/{zone}/disks/{disk}",
+     "httpMethod": "GET",
+     "description": "Returns the specified persistent disk resource.",
+     "parameters": {
+      "disk": {
+       "type": "string",
+       "description": "Name of the persistent disk 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"
+      },
+      "zone": {
+       "type": "string",
+       "description": "Name of the zone scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "zone",
+      "disk"
+     ],
+     "response": {
+      "$ref": "Disk"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "insert": {
+     "id": "compute.disks.insert",
+     "path": "{project}/zones/{zone}/disks",
+     "httpMethod": "POST",
+     "description": "Creates a persistent disk 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"
+      },
+      "sourceImage": {
+       "type": "string",
+       "description": "Optional. Source image to restore onto a disk.",
+       "location": "query"
+      },
+      "zone": {
+       "type": "string",
+       "description": "Name of the zone scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "zone"
+     ],
+     "request": {
+      "$ref": "Disk"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "list": {
+     "id": "compute.disks.list",
+     "path": "{project}/zones/{zone}/disks",
+     "httpMethod": "GET",
+     "description": "Retrieves the list of persistent disk resources contained within the specified zone.",
+     "parameters": {
+      "filter": {
+       "type": "string",
+       "description": "Optional. Filter expression for filtering listed resources.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+       "default": "100",
+       "format": "uint32",
+       "minimum": "0",
+       "maximum": "500",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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"
+      },
+      "zone": {
+       "type": "string",
+       "description": "Name of the zone scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "zone"
+     ],
+     "response": {
+      "$ref": "DiskList"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    }
+   }
+  },
+  "firewalls": {
+   "methods": {
+    "delete": {
+     "id": "compute.firewalls.delete",
+     "path": "{project}/global/firewalls/{firewall}",
+     "httpMethod": "DELETE",
+     "description": "Deletes the specified firewall resource.",
+     "parameters": {
+      "firewall": {
+       "type": "string",
+       "description": "Name of the firewall 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",
+      "firewall"
+     ],
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "get": {
+     "id": "compute.firewalls.get",
+     "path": "{project}/global/firewalls/{firewall}",
+     "httpMethod": "GET",
+     "description": "Returns the specified firewall resource.",
+     "parameters": {
+      "firewall": {
+       "type": "string",
+       "description": "Name of the firewall 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",
+      "firewall"
+     ],
+     "response": {
+      "$ref": "Firewall"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "insert": {
+     "id": "compute.firewalls.insert",
+     "path": "{project}/global/firewalls",
+     "httpMethod": "POST",
+     "description": "Creates a firewall 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": "Firewall"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "list": {
+     "id": "compute.firewalls.list",
+     "path": "{project}/global/firewalls",
+     "httpMethod": "GET",
+     "description": "Retrieves the list of firewall resources available to the specified project.",
+     "parameters": {
+      "filter": {
+       "type": "string",
+       "description": "Optional. Filter expression for filtering listed resources.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+       "default": "100",
+       "format": "uint32",
+       "minimum": "0",
+       "maximum": "500",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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": "FirewallList"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "patch": {
+     "id": "compute.firewalls.patch",
+     "path": "{project}/global/firewalls/{firewall}",
+     "httpMethod": "PATCH",
+     "description": "Updates the specified firewall resource with the data included in the request. This method supports patch semantics.",
+     "parameters": {
+      "firewall": {
+       "type": "string",
+       "description": "Name of the firewall 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",
+      "firewall"
+     ],
+     "request": {
+      "$ref": "Firewall"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "update": {
+     "id": "compute.firewalls.update",
+     "path": "{project}/global/firewalls/{firewall}",
+     "httpMethod": "PUT",
+     "description": "Updates the specified firewall resource with the data included in the request.",
+     "parameters": {
+      "firewall": {
+       "type": "string",
+       "description": "Name of the firewall 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",
+      "firewall"
+     ],
+     "request": {
+      "$ref": "Firewall"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    }
+   }
+  },
+  "forwardingRules": {
+   "methods": {
+    "aggregatedList": {
+     "id": "compute.forwardingRules.aggregatedList",
+     "path": "{project}/aggregated/forwardingRules",
+     "httpMethod": "GET",
+     "description": "Retrieves the list of forwarding rules grouped by scope.",
+     "parameters": {
+      "filter": {
+       "type": "string",
+       "description": "Optional. Filter expression for filtering listed resources.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+       "default": "100",
+       "format": "uint32",
+       "minimum": "0",
+       "maximum": "500",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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": "ForwardingRuleAggregatedList"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "delete": {
+     "id": "compute.forwardingRules.delete",
+     "path": "{project}/regions/{region}/forwardingRules/{forwardingRule}",
+     "httpMethod": "DELETE",
+     "description": "Deletes the specified ForwardingRule resource.",
+     "parameters": {
+      "forwardingRule": {
+       "type": "string",
+       "description": "Name of the ForwardingRule 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"
+      },
+      "region": {
+       "type": "string",
+       "description": "Name of the region scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "region",
+      "forwardingRule"
+     ],
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "get": {
+     "id": "compute.forwardingRules.get",
+     "path": "{project}/regions/{region}/forwardingRules/{forwardingRule}",
+     "httpMethod": "GET",
+     "description": "Returns the specified ForwardingRule resource.",
+     "parameters": {
+      "forwardingRule": {
+       "type": "string",
+       "description": "Name of the ForwardingRule 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"
+      },
+      "region": {
+       "type": "string",
+       "description": "Name of the region scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "region",
+      "forwardingRule"
+     ],
+     "response": {
+      "$ref": "ForwardingRule"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "insert": {
+     "id": "compute.forwardingRules.insert",
+     "path": "{project}/regions/{region}/forwardingRules",
+     "httpMethod": "POST",
+     "description": "Creates a ForwardingRule resource in the specified project and region 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"
+      },
+      "region": {
+       "type": "string",
+       "description": "Name of the region scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "region"
+     ],
+     "request": {
+      "$ref": "ForwardingRule"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "list": {
+     "id": "compute.forwardingRules.list",
+     "path": "{project}/regions/{region}/forwardingRules",
+     "httpMethod": "GET",
+     "description": "Retrieves the list of ForwardingRule resources available to the specified project and region.",
+     "parameters": {
+      "filter": {
+       "type": "string",
+       "description": "Optional. Filter expression for filtering listed resources.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+       "default": "100",
+       "format": "uint32",
+       "minimum": "0",
+       "maximum": "500",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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"
+      },
+      "region": {
+       "type": "string",
+       "description": "Name of the region scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "region"
+     ],
+     "response": {
+      "$ref": "ForwardingRuleList"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "setTarget": {
+     "id": "compute.forwardingRules.setTarget",
+     "path": "{project}/regions/{region}/forwardingRules/{forwardingRule}/setTarget",
+     "httpMethod": "POST",
+     "description": "Changes target url for forwarding rule.",
+     "parameters": {
+      "forwardingRule": {
+       "type": "string",
+       "description": "Name of the ForwardingRule resource in which target is to be set.",
+       "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"
+      },
+      "region": {
+       "type": "string",
+       "description": "Name of the region scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "region",
+      "forwardingRule"
+     ],
+     "request": {
+      "$ref": "TargetReference"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    }
+   }
+  },
+  "globalOperations": {
+   "methods": {
+    "aggregatedList": {
+     "id": "compute.globalOperations.aggregatedList",
+     "path": "{project}/aggregated/operations",
+     "httpMethod": "GET",
+     "description": "Retrieves the list of all operations grouped by scope.",
+     "parameters": {
+      "filter": {
+       "type": "string",
+       "description": "Optional. Filter expression for filtering listed resources.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+       "default": "100",
+       "format": "uint32",
+       "minimum": "0",
+       "maximum": "500",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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": "OperationAggregatedList"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "delete": {
+     "id": "compute.globalOperations.delete",
+     "path": "{project}/global/operations/{operation}",
+     "httpMethod": "DELETE",
+     "description": "Deletes the specified operation resource.",
+     "parameters": {
+      "operation": {
+       "type": "string",
+       "description": "Name of the operation 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",
+      "operation"
+     ],
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "get": {
+     "id": "compute.globalOperations.get",
+     "path": "{project}/global/operations/{operation}",
+     "httpMethod": "GET",
+     "description": "Retrieves the specified operation resource.",
+     "parameters": {
+      "operation": {
+       "type": "string",
+       "description": "Name of the operation 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",
+      "operation"
+     ],
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "list": {
+     "id": "compute.globalOperations.list",
+     "path": "{project}/global/operations",
+     "httpMethod": "GET",
+     "description": "Retrieves the list of operation resources contained within the specified project.",
+     "parameters": {
+      "filter": {
+       "type": "string",
+       "description": "Optional. Filter expression for filtering listed resources.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+       "default": "100",
+       "format": "uint32",
+       "minimum": "0",
+       "maximum": "500",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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": "OperationList"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    }
+   }
+  },
+  "httpHealthChecks": {
+   "methods": {
+    "delete": {
+     "id": "compute.httpHealthChecks.delete",
+     "path": "{project}/global/httpHealthChecks/{httpHealthCheck}",
+     "httpMethod": "DELETE",
+     "description": "Deletes the specified HttpHealthCheck resource.",
+     "parameters": {
+      "httpHealthCheck": {
+       "type": "string",
+       "description": "Name of the HttpHealthCheck 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",
+      "httpHealthCheck"
+     ],
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "get": {
+     "id": "compute.httpHealthChecks.get",
+     "path": "{project}/global/httpHealthChecks/{httpHealthCheck}",
+     "httpMethod": "GET",
+     "description": "Returns the specified HttpHealthCheck resource.",
+     "parameters": {
+      "httpHealthCheck": {
+       "type": "string",
+       "description": "Name of the HttpHealthCheck 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",
+      "httpHealthCheck"
+     ],
+     "response": {
+      "$ref": "HttpHealthCheck"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "insert": {
+     "id": "compute.httpHealthChecks.insert",
+     "path": "{project}/global/httpHealthChecks",
+     "httpMethod": "POST",
+     "description": "Creates a HttpHealthCheck 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": "HttpHealthCheck"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "list": {
+     "id": "compute.httpHealthChecks.list",
+     "path": "{project}/global/httpHealthChecks",
+     "httpMethod": "GET",
+     "description": "Retrieves the list of HttpHealthCheck resources available to the specified project.",
+     "parameters": {
+      "filter": {
+       "type": "string",
+       "description": "Optional. Filter expression for filtering listed resources.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+       "default": "100",
+       "format": "uint32",
+       "minimum": "0",
+       "maximum": "500",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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": "HttpHealthCheckList"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "patch": {
+     "id": "compute.httpHealthChecks.patch",
+     "path": "{project}/global/httpHealthChecks/{httpHealthCheck}",
+     "httpMethod": "PATCH",
+     "description": "Updates a HttpHealthCheck resource in the specified project using the data included in the request. This method supports patch semantics.",
+     "parameters": {
+      "httpHealthCheck": {
+       "type": "string",
+       "description": "Name of the HttpHealthCheck 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",
+      "httpHealthCheck"
+     ],
+     "request": {
+      "$ref": "HttpHealthCheck"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "update": {
+     "id": "compute.httpHealthChecks.update",
+     "path": "{project}/global/httpHealthChecks/{httpHealthCheck}",
+     "httpMethod": "PUT",
+     "description": "Updates a HttpHealthCheck resource in the specified project using the data included in the request.",
+     "parameters": {
+      "httpHealthCheck": {
+       "type": "string",
+       "description": "Name of the HttpHealthCheck 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",
+      "httpHealthCheck"
+     ],
+     "request": {
+      "$ref": "HttpHealthCheck"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    }
+   }
+  },
+  "images": {
+   "methods": {
+    "delete": {
+     "id": "compute.images.delete",
+     "path": "{project}/global/images/{image}",
+     "httpMethod": "DELETE",
+     "description": "Deletes the specified image resource.",
+     "parameters": {
+      "image": {
+       "type": "string",
+       "description": "Name of the image 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",
+      "image"
+     ],
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "deprecate": {
+     "id": "compute.images.deprecate",
+     "path": "{project}/global/images/{image}/deprecate",
+     "httpMethod": "POST",
+     "description": "Sets the deprecation status of an image. If no message body is given, clears the deprecation status instead.",
+     "parameters": {
+      "image": {
+       "type": "string",
+       "description": "Image name.",
+       "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",
+      "image"
+     ],
+     "request": {
+      "$ref": "DeprecationStatus"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "get": {
+     "id": "compute.images.get",
+     "path": "{project}/global/images/{image}",
+     "httpMethod": "GET",
+     "description": "Returns the specified image resource.",
+     "parameters": {
+      "image": {
+       "type": "string",
+       "description": "Name of the image 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",
+      "image"
+     ],
+     "response": {
+      "$ref": "Image"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "insert": {
+     "id": "compute.images.insert",
+     "path": "{project}/global/images",
+     "httpMethod": "POST",
+     "description": "Creates an image 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": "Image"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/devstorage.full_control",
+      "https://www.googleapis.com/auth/devstorage.read_only",
+      "https://www.googleapis.com/auth/devstorage.read_write"
+     ]
+    },
+    "list": {
+     "id": "compute.images.list",
+     "path": "{project}/global/images",
+     "httpMethod": "GET",
+     "description": "Retrieves the list of image resources available to the specified project.",
+     "parameters": {
+      "filter": {
+       "type": "string",
+       "description": "Optional. Filter expression for filtering listed resources.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+       "default": "100",
+       "format": "uint32",
+       "minimum": "0",
+       "maximum": "500",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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": "ImageList"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    }
+   }
+  },
+  "instances": {
+   "methods": {
+    "addAccessConfig": {
+     "id": "compute.instances.addAccessConfig",
+     "path": "{project}/zones/{zone}/instances/{instance}/addAccessConfig",
+     "httpMethod": "POST",
+     "description": "Adds an access config to an instance's network interface.",
+     "parameters": {
+      "instance": {
+       "type": "string",
+       "description": "Instance name.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      },
+      "networkInterface": {
+       "type": "string",
+       "description": "Network interface name.",
+       "required": true,
+       "location": "query"
+      },
+      "project": {
+       "type": "string",
+       "description": "Project name.",
+       "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": "Name of the zone scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "zone",
+      "instance",
+      "networkInterface"
+     ],
+     "request": {
+      "$ref": "AccessConfig"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "aggregatedList": {
+     "id": "compute.instances.aggregatedList",
+     "path": "{project}/aggregated/instances",
+     "httpMethod": "GET",
+     "parameters": {
+      "filter": {
+       "type": "string",
+       "description": "Optional. Filter expression for filtering listed resources.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+       "default": "100",
+       "format": "uint32",
+       "minimum": "0",
+       "maximum": "500",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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": "InstanceAggregatedList"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "attachDisk": {
+     "id": "compute.instances.attachDisk",
+     "path": "{project}/zones/{zone}/instances/{instance}/attachDisk",
+     "httpMethod": "POST",
+     "description": "Attaches a disk resource to an instance.",
+     "parameters": {
+      "instance": {
+       "type": "string",
+       "description": "Instance name.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      },
+      "project": {
+       "type": "string",
+       "description": "Project name.",
+       "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": "Name of the zone scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "zone",
+      "instance"
+     ],
+     "request": {
+      "$ref": "AttachedDisk"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "delete": {
+     "id": "compute.instances.delete",
+     "path": "{project}/zones/{zone}/instances/{instance}",
+     "httpMethod": "DELETE",
+     "description": "Deletes the specified instance resource.",
+     "parameters": {
+      "instance": {
+       "type": "string",
+       "description": "Name of the instance 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"
+      },
+      "zone": {
+       "type": "string",
+       "description": "Name of the zone scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "zone",
+      "instance"
+     ],
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "deleteAccessConfig": {
+     "id": "compute.instances.deleteAccessConfig",
+     "path": "{project}/zones/{zone}/instances/{instance}/deleteAccessConfig",
+     "httpMethod": "POST",
+     "description": "Deletes an access config from an instance's network interface.",
+     "parameters": {
+      "accessConfig": {
+       "type": "string",
+       "description": "Access config name.",
+       "required": true,
+       "location": "query"
+      },
+      "instance": {
+       "type": "string",
+       "description": "Instance name.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      },
+      "networkInterface": {
+       "type": "string",
+       "description": "Network interface name.",
+       "required": true,
+       "location": "query"
+      },
+      "project": {
+       "type": "string",
+       "description": "Project name.",
+       "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": "Name of the zone scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "zone",
+      "instance",
+      "accessConfig",
+      "networkInterface"
+     ],
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "detachDisk": {
+     "id": "compute.instances.detachDisk",
+     "path": "{project}/zones/{zone}/instances/{instance}/detachDisk",
+     "httpMethod": "POST",
+     "description": "Detaches a disk from an instance.",
+     "parameters": {
+      "deviceName": {
+       "type": "string",
+       "description": "Disk device name to detach.",
+       "required": true,
+       "pattern": "\\w[\\w.-]{0,254}",
+       "location": "query"
+      },
+      "instance": {
+       "type": "string",
+       "description": "Instance name.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      },
+      "project": {
+       "type": "string",
+       "description": "Project name.",
+       "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": "Name of the zone scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "zone",
+      "instance",
+      "deviceName"
+     ],
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "get": {
+     "id": "compute.instances.get",
+     "path": "{project}/zones/{zone}/instances/{instance}",
+     "httpMethod": "GET",
+     "description": "Returns the specified instance resource.",
+     "parameters": {
+      "instance": {
+       "type": "string",
+       "description": "Name of the instance 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"
+      },
+      "zone": {
+       "type": "string",
+       "description": "Name of the zone scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "zone",
+      "instance"
+     ],
+     "response": {
+      "$ref": "Instance"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "getSerialPortOutput": {
+     "id": "compute.instances.getSerialPortOutput",
+     "path": "{project}/zones/{zone}/instances/{instance}/serialPort",
+     "httpMethod": "GET",
+     "description": "Returns the specified instance's serial port output.",
+     "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": "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"
+      },
+      "zone": {
+       "type": "string",
+       "description": "Name of the zone scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "zone",
+      "instance"
+     ],
+     "response": {
+      "$ref": "SerialPortOutput"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "insert": {
+     "id": "compute.instances.insert",
+     "path": "{project}/zones/{zone}/instances",
+     "httpMethod": "POST",
+     "description": "Creates an instance 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"
+      },
+      "zone": {
+       "type": "string",
+       "description": "Name of the zone scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "zone"
+     ],
+     "request": {
+      "$ref": "Instance"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "list": {
+     "id": "compute.instances.list",
+     "path": "{project}/zones/{zone}/instances",
+     "httpMethod": "GET",
+     "description": "Retrieves the list of instance resources contained within the specified zone.",
+     "parameters": {
+      "filter": {
+       "type": "string",
+       "description": "Optional. Filter expression for filtering listed resources.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+       "default": "100",
+       "format": "uint32",
+       "minimum": "0",
+       "maximum": "500",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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"
+      },
+      "zone": {
+       "type": "string",
+       "description": "Name of the zone scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "zone"
+     ],
+     "response": {
+      "$ref": "InstanceList"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "reset": {
+     "id": "compute.instances.reset",
+     "path": "{project}/zones/{zone}/instances/{instance}/reset",
+     "httpMethod": "POST",
+     "description": "Performs a hard reset on the instance.",
+     "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": "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"
+      },
+      "zone": {
+       "type": "string",
+       "description": "Name of the zone scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "zone",
+      "instance"
+     ],
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "setMetadata": {
+     "id": "compute.instances.setMetadata",
+     "path": "{project}/zones/{zone}/instances/{instance}/setMetadata",
+     "httpMethod": "POST",
+     "description": "Sets metadata 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": "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"
+      },
+      "zone": {
+       "type": "string",
+       "description": "Name of the zone scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "zone",
+      "instance"
+     ],
+     "request": {
+      "$ref": "Metadata"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "setScheduling": {
+     "id": "compute.instances.setScheduling",
+     "path": "{project}/zones/{zone}/instances/{instance}/setScheduling",
+     "httpMethod": "POST",
+     "description": "Sets an instance's scheduling options.",
+     "parameters": {
+      "instance": {
+       "type": "string",
+       "description": "Instance name.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      },
+      "project": {
+       "type": "string",
+       "description": "Project name.",
+       "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": "Name of the zone scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "zone",
+      "instance"
+     ],
+     "request": {
+      "$ref": "Scheduling"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "setTags": {
+     "id": "compute.instances.setTags",
+     "path": "{project}/zones/{zone}/instances/{instance}/setTags",
+     "httpMethod": "POST",
+     "description": "Sets tags 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": "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"
+      },
+      "zone": {
+       "type": "string",
+       "description": "Name of the zone scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "zone",
+      "instance"
+     ],
+     "request": {
+      "$ref": "Tags"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    }
+   }
+  },
+  "machineTypes": {
+   "methods": {
+    "aggregatedList": {
+     "id": "compute.machineTypes.aggregatedList",
+     "path": "{project}/aggregated/machineTypes",
+     "httpMethod": "GET",
+     "description": "Retrieves the list of machine type resources grouped by scope.",
+     "parameters": {
+      "filter": {
+       "type": "string",
+       "description": "Optional. Filter expression for filtering listed resources.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+       "default": "100",
+       "format": "uint32",
+       "minimum": "0",
+       "maximum": "500",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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": "MachineTypeAggregatedList"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "get": {
+     "id": "compute.machineTypes.get",
+     "path": "{project}/zones/{zone}/machineTypes/{machineType}",
+     "httpMethod": "GET",
+     "description": "Returns the specified machine type resource.",
+     "parameters": {
+      "machineType": {
+       "type": "string",
+       "description": "Name of the machine type 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"
+      },
+      "zone": {
+       "type": "string",
+       "description": "Name of the zone scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "zone",
+      "machineType"
+     ],
+     "response": {
+      "$ref": "MachineType"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "list": {
+     "id": "compute.machineTypes.list",
+     "path": "{project}/zones/{zone}/machineTypes",
+     "httpMethod": "GET",
+     "description": "Retrieves the list of machine type resources available to the specified project.",
+     "parameters": {
+      "filter": {
+       "type": "string",
+       "description": "Optional. Filter expression for filtering listed resources.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+       "default": "100",
+       "format": "uint32",
+       "minimum": "0",
+       "maximum": "500",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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"
+      },
+      "zone": {
+       "type": "string",
+       "description": "Name of the zone scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "zone"
+     ],
+     "response": {
+      "$ref": "MachineTypeList"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    }
+   }
+  },
+  "networks": {
+   "methods": {
+    "delete": {
+     "id": "compute.networks.delete",
+     "path": "{project}/global/networks/{network}",
+     "httpMethod": "DELETE",
+     "description": "Deletes the specified network resource.",
+     "parameters": {
+      "network": {
+       "type": "string",
+       "description": "Name of the network 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",
+      "network"
+     ],
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "get": {
+     "id": "compute.networks.get",
+     "path": "{project}/global/networks/{network}",
+     "httpMethod": "GET",
+     "description": "Returns the specified network resource.",
+     "parameters": {
+      "network": {
+       "type": "string",
+       "description": "Name of the network 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",
+      "network"
+     ],
+     "response": {
+      "$ref": "Network"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "insert": {
+     "id": "compute.networks.insert",
+     "path": "{project}/global/networks",
+     "httpMethod": "POST",
+     "description": "Creates a network 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": "Network"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "list": {
+     "id": "compute.networks.list",
+     "path": "{project}/global/networks",
+     "httpMethod": "GET",
+     "description": "Retrieves the list of network resources available to the specified project.",
+     "parameters": {
+      "filter": {
+       "type": "string",
+       "description": "Optional. Filter expression for filtering listed resources.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+       "default": "100",
+       "format": "uint32",
+       "minimum": "0",
+       "maximum": "500",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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": "NetworkList"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    }
+   }
+  },
+  "projects": {
+   "methods": {
+    "get": {
+     "id": "compute.projects.get",
+     "path": "{project}",
+     "httpMethod": "GET",
+     "description": "Returns the specified project resource.",
+     "parameters": {
+      "project": {
+       "type": "string",
+       "description": "Name of the project resource to retrieve.",
+       "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": "Project"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "setCommonInstanceMetadata": {
+     "id": "compute.projects.setCommonInstanceMetadata",
+     "path": "{project}/setCommonInstanceMetadata",
+     "httpMethod": "POST",
+     "description": "Sets metadata common to all instances within 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": "Metadata"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    }
+   }
+  },
+  "regionOperations": {
+   "methods": {
+    "delete": {
+     "id": "compute.regionOperations.delete",
+     "path": "{project}/regions/{region}/operations/{operation}",
+     "httpMethod": "DELETE",
+     "description": "Deletes the specified region-specific operation resource.",
+     "parameters": {
+      "operation": {
+       "type": "string",
+       "description": "Name of the operation 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"
+      },
+      "region": {
+       "type": "string",
+       "description": "Name of the region scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "region",
+      "operation"
+     ],
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "get": {
+     "id": "compute.regionOperations.get",
+     "path": "{project}/regions/{region}/operations/{operation}",
+     "httpMethod": "GET",
+     "description": "Retrieves the specified region-specific operation resource.",
+     "parameters": {
+      "operation": {
+       "type": "string",
+       "description": "Name of the operation 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"
+      },
+      "region": {
+       "type": "string",
+       "description": "Name of the zone scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "region",
+      "operation"
+     ],
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "list": {
+     "id": "compute.regionOperations.list",
+     "path": "{project}/regions/{region}/operations",
+     "httpMethod": "GET",
+     "description": "Retrieves the list of operation resources contained within the specified region.",
+     "parameters": {
+      "filter": {
+       "type": "string",
+       "description": "Optional. Filter expression for filtering listed resources.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+       "default": "100",
+       "format": "uint32",
+       "minimum": "0",
+       "maximum": "500",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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"
+      },
+      "region": {
+       "type": "string",
+       "description": "Name of the region scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "region"
+     ],
+     "response": {
+      "$ref": "OperationList"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    }
+   }
+  },
+  "regions": {
+   "methods": {
+    "get": {
+     "id": "compute.regions.get",
+     "path": "{project}/regions/{region}",
+     "httpMethod": "GET",
+     "description": "Returns the specified region 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"
+      },
+      "region": {
+       "type": "string",
+       "description": "Name of the region resource to return.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "region"
+     ],
+     "response": {
+      "$ref": "Region"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "list": {
+     "id": "compute.regions.list",
+     "path": "{project}/regions",
+     "httpMethod": "GET",
+     "description": "Retrieves the list of region resources available to the specified project.",
+     "parameters": {
+      "filter": {
+       "type": "string",
+       "description": "Optional. Filter expression for filtering listed resources.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+       "default": "100",
+       "format": "uint32",
+       "minimum": "0",
+       "maximum": "500",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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": "RegionList"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    }
+   }
+  },
+  "routes": {
+   "methods": {
+    "delete": {
+     "id": "compute.routes.delete",
+     "path": "{project}/global/routes/{route}",
+     "httpMethod": "DELETE",
+     "description": "Deletes the specified route 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"
+      },
+      "route": {
+       "type": "string",
+       "description": "Name of the route resource to delete.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "route"
+     ],
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "get": {
+     "id": "compute.routes.get",
+     "path": "{project}/global/routes/{route}",
+     "httpMethod": "GET",
+     "description": "Returns the specified route 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"
+      },
+      "route": {
+       "type": "string",
+       "description": "Name of the route resource to return.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "route"
+     ],
+     "response": {
+      "$ref": "Route"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "insert": {
+     "id": "compute.routes.insert",
+     "path": "{project}/global/routes",
+     "httpMethod": "POST",
+     "description": "Creates a route 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": "Route"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "list": {
+     "id": "compute.routes.list",
+     "path": "{project}/global/routes",
+     "httpMethod": "GET",
+     "description": "Retrieves the list of route resources available to the specified project.",
+     "parameters": {
+      "filter": {
+       "type": "string",
+       "description": "Optional. Filter expression for filtering listed resources.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+       "default": "100",
+       "format": "uint32",
+       "minimum": "0",
+       "maximum": "500",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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": "RouteList"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    }
+   }
+  },
+  "snapshots": {
+   "methods": {
+    "delete": {
+     "id": "compute.snapshots.delete",
+     "path": "{project}/global/snapshots/{snapshot}",
+     "httpMethod": "DELETE",
+     "description": "Deletes the specified persistent disk snapshot 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"
+      },
+      "snapshot": {
+       "type": "string",
+       "description": "Name of the persistent disk snapshot resource to delete.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "snapshot"
+     ],
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "get": {
+     "id": "compute.snapshots.get",
+     "path": "{project}/global/snapshots/{snapshot}",
+     "httpMethod": "GET",
+     "description": "Returns the specified persistent disk snapshot 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"
+      },
+      "snapshot": {
+       "type": "string",
+       "description": "Name of the persistent disk snapshot resource to return.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "snapshot"
+     ],
+     "response": {
+      "$ref": "Snapshot"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "list": {
+     "id": "compute.snapshots.list",
+     "path": "{project}/global/snapshots",
+     "httpMethod": "GET",
+     "description": "Retrieves the list of persistent disk snapshot resources contained within the specified project.",
+     "parameters": {
+      "filter": {
+       "type": "string",
+       "description": "Optional. Filter expression for filtering listed resources.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+       "default": "100",
+       "format": "uint32",
+       "minimum": "0",
+       "maximum": "500",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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": "SnapshotList"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    }
+   }
+  },
+  "targetInstances": {
+   "methods": {
+    "aggregatedList": {
+     "id": "compute.targetInstances.aggregatedList",
+     "path": "{project}/aggregated/targetInstances",
+     "httpMethod": "GET",
+     "description": "Retrieves the list of target instances grouped by scope.",
+     "parameters": {
+      "filter": {
+       "type": "string",
+       "description": "Optional. Filter expression for filtering listed resources.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+       "default": "100",
+       "format": "uint32",
+       "minimum": "0",
+       "maximum": "500",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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": "TargetInstanceAggregatedList"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "delete": {
+     "id": "compute.targetInstances.delete",
+     "path": "{project}/zones/{zone}/targetInstances/{targetInstance}",
+     "httpMethod": "DELETE",
+     "description": "Deletes the specified TargetInstance 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"
+      },
+      "targetInstance": {
+       "type": "string",
+       "description": "Name of the TargetInstance resource to delete.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      },
+      "zone": {
+       "type": "string",
+       "description": "Name of the zone scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "zone",
+      "targetInstance"
+     ],
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "get": {
+     "id": "compute.targetInstances.get",
+     "path": "{project}/zones/{zone}/targetInstances/{targetInstance}",
+     "httpMethod": "GET",
+     "description": "Returns the specified TargetInstance 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"
+      },
+      "targetInstance": {
+       "type": "string",
+       "description": "Name of the TargetInstance resource to return.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      },
+      "zone": {
+       "type": "string",
+       "description": "Name of the zone scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "zone",
+      "targetInstance"
+     ],
+     "response": {
+      "$ref": "TargetInstance"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "insert": {
+     "id": "compute.targetInstances.insert",
+     "path": "{project}/zones/{zone}/targetInstances",
+     "httpMethod": "POST",
+     "description": "Creates a TargetInstance resource in the specified project and zone 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"
+      },
+      "zone": {
+       "type": "string",
+       "description": "Name of the zone scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "zone"
+     ],
+     "request": {
+      "$ref": "TargetInstance"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "list": {
+     "id": "compute.targetInstances.list",
+     "path": "{project}/zones/{zone}/targetInstances",
+     "httpMethod": "GET",
+     "description": "Retrieves the list of TargetInstance resources available to the specified project and zone.",
+     "parameters": {
+      "filter": {
+       "type": "string",
+       "description": "Optional. Filter expression for filtering listed resources.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+       "default": "100",
+       "format": "uint32",
+       "minimum": "0",
+       "maximum": "500",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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"
+      },
+      "zone": {
+       "type": "string",
+       "description": "Name of the zone scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "zone"
+     ],
+     "response": {
+      "$ref": "TargetInstanceList"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    }
+   }
+  },
+  "targetPools": {
+   "methods": {
+    "addHealthCheck": {
+     "id": "compute.targetPools.addHealthCheck",
+     "path": "{project}/regions/{region}/targetPools/{targetPool}/addHealthCheck",
+     "httpMethod": "POST",
+     "description": "Adds health check URL to targetPool.",
+     "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"
+      },
+      "region": {
+       "type": "string",
+       "description": "Name of the region scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      },
+      "targetPool": {
+       "type": "string",
+       "description": "Name of the TargetPool resource to which health_check_url is to be added.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "region",
+      "targetPool"
+     ],
+     "request": {
+      "$ref": "TargetPoolsAddHealthCheckRequest"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "addInstance": {
+     "id": "compute.targetPools.addInstance",
+     "path": "{project}/regions/{region}/targetPools/{targetPool}/addInstance",
+     "httpMethod": "POST",
+     "description": "Adds instance url to targetPool.",
+     "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"
+      },
+      "region": {
+       "type": "string",
+       "description": "Name of the region scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      },
+      "targetPool": {
+       "type": "string",
+       "description": "Name of the TargetPool resource to which instance_url is to be added.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "region",
+      "targetPool"
+     ],
+     "request": {
+      "$ref": "TargetPoolsAddInstanceRequest"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "aggregatedList": {
+     "id": "compute.targetPools.aggregatedList",
+     "path": "{project}/aggregated/targetPools",
+     "httpMethod": "GET",
+     "description": "Retrieves the list of target pools grouped by scope.",
+     "parameters": {
+      "filter": {
+       "type": "string",
+       "description": "Optional. Filter expression for filtering listed resources.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+       "default": "100",
+       "format": "uint32",
+       "minimum": "0",
+       "maximum": "500",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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": "TargetPoolAggregatedList"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "delete": {
+     "id": "compute.targetPools.delete",
+     "path": "{project}/regions/{region}/targetPools/{targetPool}",
+     "httpMethod": "DELETE",
+     "description": "Deletes the specified TargetPool 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"
+      },
+      "region": {
+       "type": "string",
+       "description": "Name of the region scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      },
+      "targetPool": {
+       "type": "string",
+       "description": "Name of the TargetPool resource to delete.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "region",
+      "targetPool"
+     ],
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "get": {
+     "id": "compute.targetPools.get",
+     "path": "{project}/regions/{region}/targetPools/{targetPool}",
+     "httpMethod": "GET",
+     "description": "Returns the specified TargetPool 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"
+      },
+      "region": {
+       "type": "string",
+       "description": "Name of the region scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      },
+      "targetPool": {
+       "type": "string",
+       "description": "Name of the TargetPool resource to return.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "region",
+      "targetPool"
+     ],
+     "response": {
+      "$ref": "TargetPool"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "getHealth": {
+     "id": "compute.targetPools.getHealth",
+     "path": "{project}/regions/{region}/targetPools/{targetPool}/getHealth",
+     "httpMethod": "POST",
+     "description": "Gets the most recent health check results for each IP for the given instance that is referenced by given TargetPool.",
+     "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"
+      },
+      "region": {
+       "type": "string",
+       "description": "Name of the region scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      },
+      "targetPool": {
+       "type": "string",
+       "description": "Name of the TargetPool resource to which the queried instance belongs.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "region",
+      "targetPool"
+     ],
+     "request": {
+      "$ref": "InstanceReference"
+     },
+     "response": {
+      "$ref": "TargetPoolInstanceHealth"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "insert": {
+     "id": "compute.targetPools.insert",
+     "path": "{project}/regions/{region}/targetPools",
+     "httpMethod": "POST",
+     "description": "Creates a TargetPool resource in the specified project and region 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"
+      },
+      "region": {
+       "type": "string",
+       "description": "Name of the region scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "region"
+     ],
+     "request": {
+      "$ref": "TargetPool"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "list": {
+     "id": "compute.targetPools.list",
+     "path": "{project}/regions/{region}/targetPools",
+     "httpMethod": "GET",
+     "description": "Retrieves the list of TargetPool resources available to the specified project and region.",
+     "parameters": {
+      "filter": {
+       "type": "string",
+       "description": "Optional. Filter expression for filtering listed resources.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+       "default": "100",
+       "format": "uint32",
+       "minimum": "0",
+       "maximum": "500",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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"
+      },
+      "region": {
+       "type": "string",
+       "description": "Name of the region scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "region"
+     ],
+     "response": {
+      "$ref": "TargetPoolList"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "removeHealthCheck": {
+     "id": "compute.targetPools.removeHealthCheck",
+     "path": "{project}/regions/{region}/targetPools/{targetPool}/removeHealthCheck",
+     "httpMethod": "POST",
+     "description": "Removes health check URL from targetPool.",
+     "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"
+      },
+      "region": {
+       "type": "string",
+       "description": "Name of the region scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      },
+      "targetPool": {
+       "type": "string",
+       "description": "Name of the TargetPool resource to which health_check_url is to be removed.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "region",
+      "targetPool"
+     ],
+     "request": {
+      "$ref": "TargetPoolsRemoveHealthCheckRequest"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "removeInstance": {
+     "id": "compute.targetPools.removeInstance",
+     "path": "{project}/regions/{region}/targetPools/{targetPool}/removeInstance",
+     "httpMethod": "POST",
+     "description": "Removes instance URL from targetPool.",
+     "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"
+      },
+      "region": {
+       "type": "string",
+       "description": "Name of the region scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      },
+      "targetPool": {
+       "type": "string",
+       "description": "Name of the TargetPool resource to which instance_url is to be removed.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "region",
+      "targetPool"
+     ],
+     "request": {
+      "$ref": "TargetPoolsRemoveInstanceRequest"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "setBackup": {
+     "id": "compute.targetPools.setBackup",
+     "path": "{project}/regions/{region}/targetPools/{targetPool}/setBackup",
+     "httpMethod": "POST",
+     "description": "Changes backup pool configurations.",
+     "parameters": {
+      "failoverRatio": {
+       "type": "number",
+       "description": "New failoverRatio value for the containing target pool.",
+       "format": "float",
+       "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"
+      },
+      "region": {
+       "type": "string",
+       "description": "Name of the region scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      },
+      "targetPool": {
+       "type": "string",
+       "description": "Name of the TargetPool resource for which the backup is to be set.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "region",
+      "targetPool"
+     ],
+     "request": {
+      "$ref": "TargetReference"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    }
+   }
+  },
+  "zoneOperations": {
+   "methods": {
+    "delete": {
+     "id": "compute.zoneOperations.delete",
+     "path": "{project}/zones/{zone}/operations/{operation}",
+     "httpMethod": "DELETE",
+     "description": "Deletes the specified zone-specific operation resource.",
+     "parameters": {
+      "operation": {
+       "type": "string",
+       "description": "Name of the operation 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"
+      },
+      "zone": {
+       "type": "string",
+       "description": "Name of the zone scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "zone",
+      "operation"
+     ],
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "get": {
+     "id": "compute.zoneOperations.get",
+     "path": "{project}/zones/{zone}/operations/{operation}",
+     "httpMethod": "GET",
+     "description": "Retrieves the specified zone-specific operation resource.",
+     "parameters": {
+      "operation": {
+       "type": "string",
+       "description": "Name of the operation 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"
+      },
+      "zone": {
+       "type": "string",
+       "description": "Name of the zone scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "zone",
+      "operation"
+     ],
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "list": {
+     "id": "compute.zoneOperations.list",
+     "path": "{project}/zones/{zone}/operations",
+     "httpMethod": "GET",
+     "description": "Retrieves the list of operation resources contained within the specified zone.",
+     "parameters": {
+      "filter": {
+       "type": "string",
+       "description": "Optional. Filter expression for filtering listed resources.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+       "default": "100",
+       "format": "uint32",
+       "minimum": "0",
+       "maximum": "500",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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"
+      },
+      "zone": {
+       "type": "string",
+       "description": "Name of the zone scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "zone"
+     ],
+     "response": {
+      "$ref": "OperationList"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    }
+   }
+  },
+  "zones": {
+   "methods": {
+    "get": {
+     "id": "compute.zones.get",
+     "path": "{project}/zones/{zone}",
+     "httpMethod": "GET",
+     "description": "Returns the specified zone 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"
+      },
+      "zone": {
+       "type": "string",
+       "description": "Name of the zone resource to return.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "zone"
+     ],
+     "response": {
+      "$ref": "Zone"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    },
+    "list": {
+     "id": "compute.zones.list",
+     "path": "{project}/zones",
+     "httpMethod": "GET",
+     "description": "Retrieves the list of zone resources available to the specified project.",
+     "parameters": {
+      "filter": {
+       "type": "string",
+       "description": "Optional. Filter expression for filtering listed resources.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+       "default": "100",
+       "format": "uint32",
+       "minimum": "0",
+       "maximum": "500",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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": "ZoneList"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
+     ]
+    }
+   }
+  }
+ }
+}
diff --git a/compute/v1/compute-gen.go b/compute/v1/compute-gen.go
new file mode 100644
index 0000000..f6eefa3
--- /dev/null
+++ b/compute/v1/compute-gen.go
@@ -0,0 +1,11289 @@
+// Package compute provides access to the Compute Engine API.
+//
+// See https://developers.google.com/compute/docs/reference/latest/
+//
+// Usage example:
+//
+//   import "code.google.com/p/google-api-go-client/compute/v1"
+//   ...
+//   computeService, err := compute.New(oauthHttpClient)
+package compute
+
+import (
+	"bytes"
+	"code.google.com/p/google-api-go-client/googleapi"
+	"encoding/json"
+	"errors"
+	"fmt"
+	"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
+
+const apiId = "compute:v1"
+const apiName = "compute"
+const apiVersion = "v1"
+const basePath = "https://www.googleapis.com/compute/v1/projects/"
+
+// OAuth2 scopes used by this API.
+const (
+	// View and manage your Google Compute Engine resources
+	ComputeScope = "https://www.googleapis.com/auth/compute"
+
+	// View your Google Compute Engine resources
+	ComputeReadonlyScope = "https://www.googleapis.com/auth/compute.readonly"
+
+	// Manage your data and permissions in Google Cloud Storage
+	DevstorageFull_controlScope = "https://www.googleapis.com/auth/devstorage.full_control"
+
+	// View your data in Google Cloud Storage
+	DevstorageRead_onlyScope = "https://www.googleapis.com/auth/devstorage.read_only"
+
+	// Manage your data in Google Cloud Storage
+	DevstorageRead_writeScope = "https://www.googleapis.com/auth/devstorage.read_write"
+)
+
+func New(client *http.Client) (*Service, error) {
+	if client == nil {
+		return nil, errors.New("client is nil")
+	}
+	s := &Service{client: client}
+	s.Addresses = NewAddressesService(s)
+	s.Disks = NewDisksService(s)
+	s.Firewalls = NewFirewallsService(s)
+	s.ForwardingRules = NewForwardingRulesService(s)
+	s.GlobalOperations = NewGlobalOperationsService(s)
+	s.HttpHealthChecks = NewHttpHealthChecksService(s)
+	s.Images = NewImagesService(s)
+	s.Instances = NewInstancesService(s)
+	s.MachineTypes = NewMachineTypesService(s)
+	s.Networks = NewNetworksService(s)
+	s.Projects = NewProjectsService(s)
+	s.RegionOperations = NewRegionOperationsService(s)
+	s.Regions = NewRegionsService(s)
+	s.Routes = NewRoutesService(s)
+	s.Snapshots = NewSnapshotsService(s)
+	s.TargetInstances = NewTargetInstancesService(s)
+	s.TargetPools = NewTargetPoolsService(s)
+	s.ZoneOperations = NewZoneOperationsService(s)
+	s.Zones = NewZonesService(s)
+	return s, nil
+}
+
+type Service struct {
+	client *http.Client
+
+	Addresses *AddressesService
+
+	Disks *DisksService
+
+	Firewalls *FirewallsService
+
+	ForwardingRules *ForwardingRulesService
+
+	GlobalOperations *GlobalOperationsService
+
+	HttpHealthChecks *HttpHealthChecksService
+
+	Images *ImagesService
+
+	Instances *InstancesService
+
+	MachineTypes *MachineTypesService
+
+	Networks *NetworksService
+
+	Projects *ProjectsService
+
+	RegionOperations *RegionOperationsService
+
+	Regions *RegionsService
+
+	Routes *RoutesService
+
+	Snapshots *SnapshotsService
+
+	TargetInstances *TargetInstancesService
+
+	TargetPools *TargetPoolsService
+
+	ZoneOperations *ZoneOperationsService
+
+	Zones *ZonesService
+}
+
+func NewAddressesService(s *Service) *AddressesService {
+	rs := &AddressesService{s: s}
+	return rs
+}
+
+type AddressesService struct {
+	s *Service
+}
+
+func NewDisksService(s *Service) *DisksService {
+	rs := &DisksService{s: s}
+	return rs
+}
+
+type DisksService struct {
+	s *Service
+}
+
+func NewFirewallsService(s *Service) *FirewallsService {
+	rs := &FirewallsService{s: s}
+	return rs
+}
+
+type FirewallsService struct {
+	s *Service
+}
+
+func NewForwardingRulesService(s *Service) *ForwardingRulesService {
+	rs := &ForwardingRulesService{s: s}
+	return rs
+}
+
+type ForwardingRulesService struct {
+	s *Service
+}
+
+func NewGlobalOperationsService(s *Service) *GlobalOperationsService {
+	rs := &GlobalOperationsService{s: s}
+	return rs
+}
+
+type GlobalOperationsService struct {
+	s *Service
+}
+
+func NewHttpHealthChecksService(s *Service) *HttpHealthChecksService {
+	rs := &HttpHealthChecksService{s: s}
+	return rs
+}
+
+type HttpHealthChecksService struct {
+	s *Service
+}
+
+func NewImagesService(s *Service) *ImagesService {
+	rs := &ImagesService{s: s}
+	return rs
+}
+
+type ImagesService struct {
+	s *Service
+}
+
+func NewInstancesService(s *Service) *InstancesService {
+	rs := &InstancesService{s: s}
+	return rs
+}
+
+type InstancesService struct {
+	s *Service
+}
+
+func NewMachineTypesService(s *Service) *MachineTypesService {
+	rs := &MachineTypesService{s: s}
+	return rs
+}
+
+type MachineTypesService struct {
+	s *Service
+}
+
+func NewNetworksService(s *Service) *NetworksService {
+	rs := &NetworksService{s: s}
+	return rs
+}
+
+type NetworksService struct {
+	s *Service
+}
+
+func NewProjectsService(s *Service) *ProjectsService {
+	rs := &ProjectsService{s: s}
+	return rs
+}
+
+type ProjectsService struct {
+	s *Service
+}
+
+func NewRegionOperationsService(s *Service) *RegionOperationsService {
+	rs := &RegionOperationsService{s: s}
+	return rs
+}
+
+type RegionOperationsService struct {
+	s *Service
+}
+
+func NewRegionsService(s *Service) *RegionsService {
+	rs := &RegionsService{s: s}
+	return rs
+}
+
+type RegionsService struct {
+	s *Service
+}
+
+func NewRoutesService(s *Service) *RoutesService {
+	rs := &RoutesService{s: s}
+	return rs
+}
+
+type RoutesService struct {
+	s *Service
+}
+
+func NewSnapshotsService(s *Service) *SnapshotsService {
+	rs := &SnapshotsService{s: s}
+	return rs
+}
+
+type SnapshotsService struct {
+	s *Service
+}
+
+func NewTargetInstancesService(s *Service) *TargetInstancesService {
+	rs := &TargetInstancesService{s: s}
+	return rs
+}
+
+type TargetInstancesService struct {
+	s *Service
+}
+
+func NewTargetPoolsService(s *Service) *TargetPoolsService {
+	rs := &TargetPoolsService{s: s}
+	return rs
+}
+
+type TargetPoolsService struct {
+	s *Service
+}
+
+func NewZoneOperationsService(s *Service) *ZoneOperationsService {
+	rs := &ZoneOperationsService{s: s}
+	return rs
+}
+
+type ZoneOperationsService struct {
+	s *Service
+}
+
+func NewZonesService(s *Service) *ZonesService {
+	rs := &ZonesService{s: s}
+	return rs
+}
+
+type ZonesService struct {
+	s *Service
+}
+
+type AccessConfig struct {
+	// Kind: Type of the resource.
+	Kind string `json:"kind,omitempty"`
+
+	// Name: Name of this access configuration.
+	Name string `json:"name,omitempty"`
+
+	// NatIP: An external IP address associated with this instance. Specify
+	// an unused static IP address available to the project. If not
+	// specified, the external IP will be drawn from a shared ephemeral
+	// pool.
+	NatIP string `json:"natIP,omitempty"`
+
+	// Type: Type of configuration. Must be set to "ONE_TO_ONE_NAT". This
+	// configures port-for-port NAT to the internet.
+	Type string `json:"type,omitempty"`
+}
+
+type Address struct {
+	// Address: The IP address represented by this resource.
+	Address string `json:"address,omitempty"`
+
+	// CreationTimestamp: Creation timestamp in RFC3339 text format (output
+	// only).
+	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: Unique identifier for the resource; defined by the server (output
+	// only).
+	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.
+	Name string `json:"name,omitempty"`
+
+	// Region: URL of the region where the address resides (output only).
+	Region string `json:"region,omitempty"`
+
+	// SelfLink: Server defined URL for the resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+
+	// Status: The status of the address (output only).
+	Status string `json:"status,omitempty"`
+
+	// Users: The resources that are using this address resource.
+	Users []string `json:"users,omitempty"`
+}
+
+type AddressAggregatedList struct {
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	Id string `json:"id,omitempty"`
+
+	// Items: A map of scoped address lists.
+	Items *AddressAggregatedListItems `json:"items,omitempty"`
+
+	// Kind: Type of resource.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: A token used to continue a truncated list request
+	// (output only).
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// SelfLink: Server defined URL for this resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+}
+
+type AddressAggregatedListItems struct {
+}
+
+type AddressList struct {
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	Id string `json:"id,omitempty"`
+
+	// Items: The address resources.
+	Items []*Address `json:"items,omitempty"`
+
+	// Kind: Type of resource.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: A token used to continue a truncated list request
+	// (output only).
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// SelfLink: Server defined URL for this resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+}
+
+type AddressesScopedList struct {
+	// Addresses: List of addresses contained in this scope.
+	Addresses []*Address `json:"addresses,omitempty"`
+
+	// Warning: Informational warning which replaces the list of addresses
+	// when the list is empty.
+	Warning *AddressesScopedListWarning `json:"warning,omitempty"`
+}
+
+type AddressesScopedListWarning struct {
+	// Code: The warning type identifier for this warning.
+	Code string `json:"code,omitempty"`
+
+	// Data: Metadata for this warning in 'key: value' format.
+	Data []*AddressesScopedListWarningData `json:"data,omitempty"`
+
+	// Message: Optional human-readable details for this warning.
+	Message string `json:"message,omitempty"`
+}
+
+type AddressesScopedListWarningData struct {
+	// Key: A key for the warning data.
+	Key string `json:"key,omitempty"`
+
+	// Value: A warning data value corresponding to the key.
+	Value string `json:"value,omitempty"`
+}
+
+type AttachedDisk struct {
+	// Boot: Indicates that this is a boot disk. VM will use the first
+	// partition of the disk for its root filesystem.
+	Boot bool `json:"boot,omitempty"`
+
+	// DeviceName: Persistent disk only; must be unique within the instance
+	// when specified. This represents a unique device name that is
+	// reflected into the /dev/ tree of a Linux operating system running
+	// within the instance. If not specified, a default will be chosen by
+	// the system.
+	DeviceName string `json:"deviceName,omitempty"`
+
+	// Index: A zero-based index to assign to this disk, where 0 is reserved
+	// for the boot disk. If not specified, the server will choose an
+	// appropriate value (output only).
+	Index int64 `json:"index,omitempty"`
+
+	// Kind: Type of the resource.
+	Kind string `json:"kind,omitempty"`
+
+	// Mode: The mode in which to attach this disk, either "READ_WRITE" or
+	// "READ_ONLY".
+	Mode string `json:"mode,omitempty"`
+
+	// Source: Persistent disk only; the URL of the persistent disk
+	// resource.
+	Source string `json:"source,omitempty"`
+
+	// Type: Type of the disk, either "SCRATCH" or "PERSISTENT". Note that
+	// persistent disks must be created before you can specify them here.
+	Type string `json:"type,omitempty"`
+}
+
+type DeprecationStatus struct {
+	// Deleted: An optional RFC3339 timestamp on or after which the
+	// deprecation state of this resource will be changed to DELETED.
+	Deleted string `json:"deleted,omitempty"`
+
+	// Deprecated: An optional RFC3339 timestamp on or after which the
+	// deprecation state of this resource will be changed to DEPRECATED.
+	Deprecated string `json:"deprecated,omitempty"`
+
+	// Obsolete: An optional RFC3339 timestamp on or after which the
+	// deprecation state of this resource will be changed to OBSOLETE.
+	Obsolete string `json:"obsolete,omitempty"`
+
+	// Replacement: A URL of the suggested replacement for the deprecated
+	// resource. The deprecated resource and its replacement must be
+	// resources of the same kind.
+	Replacement string `json:"replacement,omitempty"`
+
+	// State: The deprecation state. Can be "DEPRECATED", "OBSOLETE", or
+	// "DELETED". Operations which create a new resource using a
+	// "DEPRECATED" resource will return successfully, but with a warning
+	// indicating the deprecated resource and recommending its replacement.
+	// New uses of "OBSOLETE" or "DELETED" resources will result in an
+	// error.
+	State string `json:"state,omitempty"`
+}
+
+type Disk struct {
+	// CreationTimestamp: Creation timestamp in RFC3339 text format (output
+	// only).
+	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: Unique identifier for the resource; defined by the server (output
+	// only).
+	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.
+	Name string `json:"name,omitempty"`
+
+	// Options: Internal use only.
+	Options string `json:"options,omitempty"`
+
+	// SelfLink: Server defined URL for the resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+
+	// SizeGb: Size of the persistent disk, specified in GB. This parameter
+	// is optional when creating a disk from a disk image or a snapshot,
+	// otherwise it is required.
+	SizeGb int64 `json:"sizeGb,omitempty,string"`
+
+	// SourceImage: The source image used to create this disk. Once the
+	// source image has been deleted from the system, this field will not be
+	// set, even if an image with the same name has been re-created.
+	SourceImage string `json:"sourceImage,omitempty"`
+
+	// SourceImageId: The 'id' value of the image used to create this disk.
+	// This value may be used to determine whether the disk was created from
+	// the current or a previous instance of a given image.
+	SourceImageId string `json:"sourceImageId,omitempty"`
+
+	// SourceSnapshot: The source snapshot used to create this disk. Once
+	// the source snapshot has been deleted from the system, this field will
+	// be cleared, and will not be set even if a snapshot with the same name
+	// has been re-created.
+	SourceSnapshot string `json:"sourceSnapshot,omitempty"`
+
+	// SourceSnapshotId: The 'id' value of the snapshot used to create this
+	// disk. This value may be used to determine whether the disk was
+	// created from the current or a previous instance of a given disk
+	// snapshot.
+	SourceSnapshotId string `json:"sourceSnapshotId,omitempty"`
+
+	// Status: The status of disk creation (output only).
+	Status string `json:"status,omitempty"`
+
+	// Zone: URL of the zone where the disk resides (output only).
+	Zone string `json:"zone,omitempty"`
+}
+
+type DiskAggregatedList struct {
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	Id string `json:"id,omitempty"`
+
+	// Items: A map of scoped disk lists.
+	Items *DiskAggregatedListItems `json:"items,omitempty"`
+
+	// Kind: Type of resource.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: A token used to continue a truncated list request
+	// (output only).
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// SelfLink: Server defined URL for this resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+}
+
+type DiskAggregatedListItems struct {
+}
+
+type DiskList struct {
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	Id string `json:"id,omitempty"`
+
+	// Items: The persistent disk resources.
+	Items []*Disk `json:"items,omitempty"`
+
+	// Kind: Type of resource.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: A token used to continue a truncated list request
+	// (output only).
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// SelfLink: Server defined URL for this resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+}
+
+type DisksScopedList struct {
+	// Disks: List of disks contained in this scope.
+	Disks []*Disk `json:"disks,omitempty"`
+
+	// Warning: Informational warning which replaces the list of disks when
+	// the list is empty.
+	Warning *DisksScopedListWarning `json:"warning,omitempty"`
+}
+
+type DisksScopedListWarning struct {
+	// Code: The warning type identifier for this warning.
+	Code string `json:"code,omitempty"`
+
+	// Data: Metadata for this warning in 'key: value' format.
+	Data []*DisksScopedListWarningData `json:"data,omitempty"`
+
+	// Message: Optional human-readable details for this warning.
+	Message string `json:"message,omitempty"`
+}
+
+type DisksScopedListWarningData struct {
+	// Key: A key for the warning data.
+	Key string `json:"key,omitempty"`
+
+	// Value: A warning data value corresponding to the key.
+	Value string `json:"value,omitempty"`
+}
+
+type Firewall struct {
+	// Allowed: The list of rules specified by this firewall. Each rule
+	// specifies a protocol and port-range tuple that describes a permitted
+	// connection.
+	Allowed []*FirewallAllowed `json:"allowed,omitempty"`
+
+	// CreationTimestamp: Creation timestamp in RFC3339 text format (output
+	// only).
+	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: Unique identifier for the resource; defined by the server (output
+	// only).
+	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.
+	Name string `json:"name,omitempty"`
+
+	// Network: URL of the network to which this firewall is applied;
+	// provided by the client when the firewall is created.
+	Network string `json:"network,omitempty"`
+
+	// SelfLink: Server defined URL for the resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+
+	// SourceRanges: A list of IP address blocks expressed in CIDR format
+	// which this rule applies to. One or both of sourceRanges and
+	// sourceTags may be set; an inbound connection is allowed if either the
+	// range or the tag of the source matches.
+	SourceRanges []string `json:"sourceRanges,omitempty"`
+
+	// SourceTags: A list of instance tags which this rule applies to. One
+	// or both of sourceRanges and sourceTags may be set; an inbound
+	// connection is allowed if either the range or the tag of the source
+	// matches.
+	SourceTags []string `json:"sourceTags,omitempty"`
+
+	// TargetTags: A list of instance tags indicating sets of instances
+	// located on network which may make network connections as specified in
+	// allowed. If no targetTags are specified, the firewall rule applies to
+	// all instances on the specified network.
+	TargetTags []string `json:"targetTags,omitempty"`
+}
+
+type FirewallAllowed struct {
+	// IPProtocol: Required; this is the IP protocol that is allowed for
+	// this rule. This can either be one of the following well known
+	// protocol strings ["tcp", "udp", "icmp", "esp", "ah", "sctp"], or the
+	// IP protocol number.
+	IPProtocol string `json:"IPProtocol,omitempty"`
+
+	// Ports: An optional list of ports which are allowed. It is an error to
+	// specify this for any protocol that isn't UDP or TCP. Each entry must
+	// be either an integer or a range. If not specified, connections
+	// through any port are allowed.
+	//
+	// Example inputs include: ["22"],
+	// ["80","443"] and ["12345-12349"].
+	Ports []string `json:"ports,omitempty"`
+}
+
+type FirewallList struct {
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	Id string `json:"id,omitempty"`
+
+	// Items: The firewall resources.
+	Items []*Firewall `json:"items,omitempty"`
+
+	// Kind: Type of resource.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: A token used to continue a truncated list request
+	// (output only).
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// SelfLink: Server defined URL for this resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+}
+
+type ForwardingRule struct {
+	// IPAddress: Value of the reserved IP address that this forwarding rule
+	// is serving on behalf of. The address resource must live in the same
+	// region as the forwarding rule. If left empty (default value), an
+	// ephemeral IP will be assigned.
+	IPAddress string `json:"IPAddress,omitempty"`
+
+	// IPProtocol: The IP protocol to which this rule applies, valid options
+	// are 'TCP', 'UDP', 'ESP', 'AH' or 'SCTP'
+	IPProtocol string `json:"IPProtocol,omitempty"`
+
+	// CreationTimestamp: Creation timestamp in RFC3339 text format (output
+	// only).
+	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: Unique identifier for the resource; defined by the server (output
+	// only).
+	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.
+	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.
+	// @pattern: \d+(?:-\d+)?
+	PortRange string `json:"portRange,omitempty"`
+
+	// Region: URL of the region where the forwarding rule resides (output
+	// only).
+	Region string `json:"region,omitempty"`
+
+	// SelfLink: Server defined URL for the resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+
+	// Target: The URL of the target resource to receive the matched
+	// traffic. It must live in the same region as this forwarding rule.
+	Target string `json:"target,omitempty"`
+}
+
+type ForwardingRuleAggregatedList struct {
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	Id string `json:"id,omitempty"`
+
+	// Items: A map of scoped forwarding rule lists.
+	Items *ForwardingRuleAggregatedListItems `json:"items,omitempty"`
+
+	// Kind: Type of resource.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: A token used to continue a truncated list request
+	// (output only).
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// SelfLink: Server defined URL for this resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+}
+
+type ForwardingRuleAggregatedListItems struct {
+}
+
+type ForwardingRuleList struct {
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	Id string `json:"id,omitempty"`
+
+	// Items: The ForwardingRule resources.
+	Items []*ForwardingRule `json:"items,omitempty"`
+
+	// Kind: Type of resource.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: A token used to continue a truncated list request
+	// (output only).
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// SelfLink: Server defined URL for this resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+}
+
+type ForwardingRulesScopedList struct {
+	// ForwardingRules: List of forwarding rules contained in this scope.
+	ForwardingRules []*ForwardingRule `json:"forwardingRules,omitempty"`
+
+	// Warning: Informational warning which replaces the list of forwarding
+	// rules when the list is empty.
+	Warning *ForwardingRulesScopedListWarning `json:"warning,omitempty"`
+}
+
+type ForwardingRulesScopedListWarning struct {
+	// Code: The warning type identifier for this warning.
+	Code string `json:"code,omitempty"`
+
+	// Data: Metadata for this warning in 'key: value' format.
+	Data []*ForwardingRulesScopedListWarningData `json:"data,omitempty"`
+
+	// Message: Optional human-readable details for this warning.
+	Message string `json:"message,omitempty"`
+}
+
+type ForwardingRulesScopedListWarningData struct {
+	// Key: A key for the warning data.
+	Key string `json:"key,omitempty"`
+
+	// Value: A warning data value corresponding to the key.
+	Value string `json:"value,omitempty"`
+}
+
+type HealthCheckReference struct {
+	HealthCheck string `json:"healthCheck,omitempty"`
+}
+
+type HealthStatus struct {
+	// HealthState: Health state of the instance.
+	HealthState string `json:"healthState,omitempty"`
+
+	// Instance: URL of the instance resource.
+	Instance string `json:"instance,omitempty"`
+
+	// IpAddress: The IP address represented by this resource.
+	IpAddress string `json:"ipAddress,omitempty"`
+}
+
+type HttpHealthCheck struct {
+	// CheckIntervalSec: How often (in seconds) to send a health check. The
+	// default value is 5 seconds.
+	CheckIntervalSec int64 `json:"checkIntervalSec,omitempty"`
+
+	// CreationTimestamp: Creation timestamp in RFC3339 text format (output
+	// only).
+	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 VM 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 HTTP 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: Unique identifier for the resource; defined by the server (output
+	// only).
+	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.
+	Name string `json:"name,omitempty"`
+
+	// Port: The TCP port number for the HTTP health check request. The
+	// default value is 80.
+	Port int64 `json:"port,omitempty"`
+
+	// RequestPath: The request path of the HTTP health check request. The
+	// default value is "/".
+	RequestPath string `json:"requestPath,omitempty"`
+
+	// SelfLink: Server defined URL for the resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+
+	// TimeoutSec: How long (in seconds) to wait before claiming failure.
+	// The default value is 5 seconds.
+	TimeoutSec int64 `json:"timeoutSec,omitempty"`
+
+	// UnhealthyThreshold: A so-far healthy VM will be marked unhealthy
+	// after this many consecutive failures. The default value is 2.
+	UnhealthyThreshold int64 `json:"unhealthyThreshold,omitempty"`
+}
+
+type HttpHealthCheckList struct {
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	Id string `json:"id,omitempty"`
+
+	// Items: The HttpHealthCheck resources.
+	Items []*HttpHealthCheck `json:"items,omitempty"`
+
+	// Kind: Type of resource.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: A token used to continue a truncated list request
+	// (output only).
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// SelfLink: Server defined URL for this resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+}
+
+type Image struct {
+	// ArchiveSizeBytes: Size of the image tar.gz archive stored in Google
+	// Cloud Storage (in bytes).
+	ArchiveSizeBytes int64 `json:"archiveSizeBytes,omitempty,string"`
+
+	// CreationTimestamp: Creation timestamp in RFC3339 text format (output
+	// only).
+	CreationTimestamp string `json:"creationTimestamp,omitempty"`
+
+	// Deprecated: The deprecation status associated with this image.
+	Deprecated *DeprecationStatus `json:"deprecated,omitempty"`
+
+	// Description: Textual description of the resource; provided by the
+	// client when the resource is created.
+	Description string `json:"description,omitempty"`
+
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	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.
+	Name string `json:"name,omitempty"`
+
+	// RawDisk: The raw disk image parameters.
+	RawDisk *ImageRawDisk `json:"rawDisk,omitempty"`
+
+	// SelfLink: Server defined URL for the resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+
+	// SourceType: Must be "RAW"; provided by the client when the disk image
+	// is created.
+	SourceType string `json:"sourceType,omitempty"`
+
+	// Status: Status of the image (output only). It will be one of the
+	// following READY - after image has been successfully created and is
+	// ready for use FAILED - if creating the image fails for some reason
+	// PENDING - the image creation is in progress An image can be used to
+	// create other resources suck as instances only after the image has
+	// been successfully created and the status is set to READY.
+	Status string `json:"status,omitempty"`
+}
+
+type ImageRawDisk struct {
+	// ContainerType: The format used to encode and transmit the block
+	// device. Should be TAR. This is just a container and transmission
+	// format and not a runtime format. Provided by the client when the disk
+	// image is created.
+	ContainerType string `json:"containerType,omitempty"`
+
+	// Sha1Checksum: An optional SHA1 checksum of the disk image before
+	// unpackaging; provided by the client when the disk image is created.
+	Sha1Checksum string `json:"sha1Checksum,omitempty"`
+
+	// Source: The full Google Cloud Storage URL where the disk image is
+	// stored; provided by the client when the disk image is created.
+	Source string `json:"source,omitempty"`
+}
+
+type ImageList struct {
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	Id string `json:"id,omitempty"`
+
+	// Items: The disk image resources.
+	Items []*Image `json:"items,omitempty"`
+
+	// Kind: Type of resource.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: A token used to continue a truncated list request
+	// (output only).
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// SelfLink: Server defined URL for this resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+}
+
+type Instance struct {
+	// CanIpForward: Allows this instance to send packets with source IP
+	// addresses other than its own and receive packets with destination IP
+	// addresses other than its own. If this instance will be used as an IP
+	// gateway or it will be set as the next-hop in a Route resource, say
+	// true. If unsure, leave this set to false.
+	CanIpForward bool `json:"canIpForward,omitempty"`
+
+	// CreationTimestamp: Creation timestamp in RFC3339 text format (output
+	// only).
+	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"`
+
+	// Disks: Array of disks associated with this instance. Persistent disks
+	// must be created before you can assign them.
+	Disks []*AttachedDisk `json:"disks,omitempty"`
+
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	Id uint64 `json:"id,omitempty,string"`
+
+	// Kind: Type of the resource.
+	Kind string `json:"kind,omitempty"`
+
+	// MachineType: URL of the machine type resource describing which
+	// machine type to use to host the instance; provided by the client when
+	// the instance is created.
+	MachineType string `json:"machineType,omitempty"`
+
+	// Metadata: Metadata key/value pairs assigned to this instance.
+	// Consists of custom metadata or predefined keys; see Instance
+	// documentation for more information.
+	Metadata *Metadata `json:"metadata,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.
+	Name string `json:"name,omitempty"`
+
+	// NetworkInterfaces: Array of 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 access config supported. If there are no
+	// accessConfigs specified, then this instance will have no external
+	// internet access.
+	NetworkInterfaces []*NetworkInterface `json:"networkInterfaces,omitempty"`
+
+	// Scheduling: Scheduling options for this instance.
+	Scheduling *Scheduling `json:"scheduling,omitempty"`
+
+	// SelfLink: Server defined URL for this resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+
+	// ServiceAccounts: A list of service accounts each with specified
+	// scopes, for which access tokens are to be made available to the
+	// instance through metadata queries.
+	ServiceAccounts []*ServiceAccount `json:"serviceAccounts,omitempty"`
+
+	// Status: Instance status. One of the following values: "PROVISIONING",
+	// "STAGING", "RUNNING", "STOPPING", "STOPPED", "TERMINATED" (output
+	// only).
+	Status string `json:"status,omitempty"`
+
+	// StatusMessage: An optional, human-readable explanation of the status
+	// (output only).
+	StatusMessage string `json:"statusMessage,omitempty"`
+
+	// Tags: A list of tags to be applied to this instance. Used to identify
+	// valid sources or targets for network firewalls. Provided by the
+	// client on instance creation. The tags can be later modified by the
+	// setTags method. Each tag within the list must comply with RFC1035.
+	Tags *Tags `json:"tags,omitempty"`
+
+	// Zone: URL of the zone where the instance resides (output only).
+	Zone string `json:"zone,omitempty"`
+}
+
+type InstanceAggregatedList struct {
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	Id string `json:"id,omitempty"`
+
+	// Items: A map of scoped instance lists.
+	Items *InstanceAggregatedListItems `json:"items,omitempty"`
+
+	// Kind: Type of resource.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: A token used to continue a truncated list request
+	// (output only).
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// SelfLink: Server defined URL for this resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+}
+
+type InstanceAggregatedListItems struct {
+}
+
+type InstanceList struct {
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	Id string `json:"id,omitempty"`
+
+	// Items: A list of instance resources.
+	Items []*Instance `json:"items,omitempty"`
+
+	// Kind: Type of resource.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: A token used to continue a truncated list request
+	// (output only).
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// SelfLink: Server defined URL for this resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+}
+
+type InstanceReference struct {
+	Instance string `json:"instance,omitempty"`
+}
+
+type InstancesScopedList struct {
+	// Instances: List of instances contained in this scope.
+	Instances []*Instance `json:"instances,omitempty"`
+
+	// Warning: Informational warning which replaces the list of instances
+	// when the list is empty.
+	Warning *InstancesScopedListWarning `json:"warning,omitempty"`
+}
+
+type InstancesScopedListWarning struct {
+	// Code: The warning type identifier for this warning.
+	Code string `json:"code,omitempty"`
+
+	// Data: Metadata for this warning in 'key: value' format.
+	Data []*InstancesScopedListWarningData `json:"data,omitempty"`
+
+	// Message: Optional human-readable details for this warning.
+	Message string `json:"message,omitempty"`
+}
+
+type InstancesScopedListWarningData struct {
+	// Key: A key for the warning data.
+	Key string `json:"key,omitempty"`
+
+	// Value: A warning data value corresponding to the key.
+	Value string `json:"value,omitempty"`
+}
+
+type MachineType struct {
+	// CreationTimestamp: Creation timestamp in RFC3339 text format (output
+	// only).
+	CreationTimestamp string `json:"creationTimestamp,omitempty"`
+
+	// Deprecated: The deprecation status associated with this machine type.
+	Deprecated *DeprecationStatus `json:"deprecated,omitempty"`
+
+	// Description: An optional textual description of the resource.
+	Description string `json:"description,omitempty"`
+
+	// GuestCpus: Count of CPUs exposed to the instance.
+	GuestCpus int64 `json:"guestCpus,omitempty"`
+
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	Id uint64 `json:"id,omitempty,string"`
+
+	// ImageSpaceGb: Space allotted for the image, defined in GB.
+	ImageSpaceGb int64 `json:"imageSpaceGb,omitempty"`
+
+	// Kind: Type of the resource.
+	Kind string `json:"kind,omitempty"`
+
+	// MaximumPersistentDisks: Maximum persistent disks allowed.
+	MaximumPersistentDisks int64 `json:"maximumPersistentDisks,omitempty"`
+
+	// MaximumPersistentDisksSizeGb: Maximum total persistent disks size
+	// (GB) allowed.
+	MaximumPersistentDisksSizeGb int64 `json:"maximumPersistentDisksSizeGb,omitempty,string"`
+
+	// MemoryMb: Physical memory assigned to the instance, defined in MB.
+	MemoryMb int64 `json:"memoryMb,omitempty"`
+
+	// Name: Name of the resource.
+	Name string `json:"name,omitempty"`
+
+	// ScratchDisks: List of extended scratch disks assigned to the
+	// instance.
+	ScratchDisks []*MachineTypeScratchDisks `json:"scratchDisks,omitempty"`
+
+	// SelfLink: Server defined URL for the resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+
+	// Zone: Url of the zone where the machine type resides (output only).
+	Zone string `json:"zone,omitempty"`
+}
+
+type MachineTypeScratchDisks struct {
+	// DiskGb: Size of the scratch disk, defined in GB.
+	DiskGb int64 `json:"diskGb,omitempty"`
+}
+
+type MachineTypeAggregatedList struct {
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	Id string `json:"id,omitempty"`
+
+	// Items: A map of scoped machine type lists.
+	Items *MachineTypeAggregatedListItems `json:"items,omitempty"`
+
+	// Kind: Type of resource.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: A token used to continue a truncated list request
+	// (output only).
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// SelfLink: Server defined URL for this resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+}
+
+type MachineTypeAggregatedListItems struct {
+}
+
+type MachineTypeList struct {
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	Id string `json:"id,omitempty"`
+
+	// Items: The machine type resources.
+	Items []*MachineType `json:"items,omitempty"`
+
+	// Kind: Type of resource.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: A token used to continue a truncated list request
+	// (output only).
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// SelfLink: Server defined URL for this resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+}
+
+type MachineTypesScopedList struct {
+	// MachineTypes: List of machine types contained in this scope.
+	MachineTypes []*MachineType `json:"machineTypes,omitempty"`
+
+	// Warning: Informational warning which replaces the list of machine
+	// types when the list is empty.
+	Warning *MachineTypesScopedListWarning `json:"warning,omitempty"`
+}
+
+type MachineTypesScopedListWarning struct {
+	// Code: The warning type identifier for this warning.
+	Code string `json:"code,omitempty"`
+
+	// Data: Metadata for this warning in 'key: value' format.
+	Data []*MachineTypesScopedListWarningData `json:"data,omitempty"`
+
+	// Message: Optional human-readable details for this warning.
+	Message string `json:"message,omitempty"`
+}
+
+type MachineTypesScopedListWarningData struct {
+	// Key: A key for the warning data.
+	Key string `json:"key,omitempty"`
+
+	// Value: A warning data value corresponding to the key.
+	Value string `json:"value,omitempty"`
+}
+
+type Metadata struct {
+	// Fingerprint: Fingerprint of this resource. A hash of the metadata's
+	// contents. This field is used for optimistic locking. An up-to-date
+	// metadata fingerprint must be provided in order to modify metadata.
+	Fingerprint string `json:"fingerprint,omitempty"`
+
+	// Items: Array of key/value pairs. The total size of all keys and
+	// values must be less than 512 KB.
+	Items []*MetadataItems `json:"items,omitempty"`
+
+	// Kind: Type of the resource.
+	Kind string `json:"kind,omitempty"`
+}
+
+type MetadataItems struct {
+	// Key: Key for the metadata entry. Keys must conform to the following
+	// regexp: [a-zA-Z0-9-_]+, and be less than 128 bytes in length. This is
+	// reflected as part of a URL in the metadata server. Additionally, to
+	// avoid ambiguity, keys must not conflict with any other metadata keys
+	// for the project.
+	Key string `json:"key,omitempty"`
+
+	// Value: Value for the metadata entry. These are free-form strings, and
+	// only have meaning as interpreted by the image running in the
+	// instance. The only restriction placed on values is that their size
+	// must be less than or equal to 32768 bytes.
+	Value string `json:"value,omitempty"`
+}
+
+type Network struct {
+	// IPv4Range: Required; 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.
+	IPv4Range string `json:"IPv4Range,omitempty"`
+
+	// CreationTimestamp: Creation timestamp in RFC3339 text format (output
+	// only).
+	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"`
+
+	// GatewayIPv4: An optional address that is used for default routing to
+	// other networks. This must be within the range specified by IPv4Range,
+	// and is typically the first usable address in that range. If not
+	// specified, the default value is the first usable address in
+	// IPv4Range.
+	GatewayIPv4 string `json:"gatewayIPv4,omitempty"`
+
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	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.
+	Name string `json:"name,omitempty"`
+
+	// SelfLink: Server defined URL for the resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+}
+
+type NetworkInterface struct {
+	// AccessConfigs: Array of 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 access config supported. If there are no
+	// accessConfigs specified, then this instance will have no external
+	// internet access.
+	AccessConfigs []*AccessConfig `json:"accessConfigs,omitempty"`
+
+	// Name: Name of the network interface, determined by the server; for
+	// network devices, these are e.g. eth0, eth1, etc. (output only).
+	Name string `json:"name,omitempty"`
+
+	// Network: URL of the network resource attached to this interface.
+	Network string `json:"network,omitempty"`
+
+	// NetworkIP: An optional IPV4 internal network address assigned to the
+	// instance for this network interface (output only).
+	NetworkIP string `json:"networkIP,omitempty"`
+}
+
+type NetworkList struct {
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	Id string `json:"id,omitempty"`
+
+	// Items: The network resources.
+	Items []*Network `json:"items,omitempty"`
+
+	// Kind: Type of resource.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: A token used to continue a truncated list request
+	// (output only).
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// SelfLink: Server defined URL for this resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+}
+
+type Operation struct {
+	// ClientOperationId: An optional identifier specified by the client
+	// when the mutation was initiated. Must be unique for all operation
+	// resources in the project (output only).
+	ClientOperationId string `json:"clientOperationId,omitempty"`
+
+	// CreationTimestamp: Creation timestamp in RFC3339 text format (output
+	// only).
+	CreationTimestamp string `json:"creationTimestamp,omitempty"`
+
+	// EndTime: The time that this operation was completed. This is in RFC
+	// 3339 format (output only).
+	EndTime string `json:"endTime,omitempty"`
+
+	// Error: If errors occurred during processing of this operation, this
+	// field will be populated (output only).
+	Error *OperationError `json:"error,omitempty"`
+
+	// HttpErrorMessage: If operation fails, the HTTP error message
+	// returned, e.g. NOT FOUND. (output only).
+	HttpErrorMessage string `json:"httpErrorMessage,omitempty"`
+
+	// HttpErrorStatusCode: If operation fails, the HTTP error status code
+	// returned, e.g. 404. (output only).
+	HttpErrorStatusCode int64 `json:"httpErrorStatusCode,omitempty"`
+
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	Id uint64 `json:"id,omitempty,string"`
+
+	// InsertTime: The time that this operation was requested. This is in
+	// RFC 3339 format (output only).
+	InsertTime string `json:"insertTime,omitempty"`
+
+	// Kind: Type of the resource.
+	Kind string `json:"kind,omitempty"`
+
+	// Name: Name of the resource (output only).
+	Name string `json:"name,omitempty"`
+
+	// OperationType: Type of the operation. Examples include "insert",
+	// "update", and "delete" (output only).
+	OperationType string `json:"operationType,omitempty"`
+
+	// Progress: An optional progress indicator that ranges from 0 to 100.
+	// There is no requirement that this be linear or support any
+	// granularity of operations. This should not be used to guess at when
+	// the operation will be complete. This number should be monotonically
+	// increasing as the operation progresses (output only).
+	Progress int64 `json:"progress,omitempty"`
+
+	// Region: URL of the region where the operation resides (output only).
+	Region string `json:"region,omitempty"`
+
+	// SelfLink: Server defined URL for the resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+
+	// StartTime: The time that this operation was started by the server.
+	// This is in RFC 3339 format (output only).
+	StartTime string `json:"startTime,omitempty"`
+
+	// Status: Status of the operation. Can be one of the following:
+	// "PENDING", "RUNNING", or "DONE" (output only).
+	Status string `json:"status,omitempty"`
+
+	// StatusMessage: An optional textual description of the current status
+	// of the operation (output only).
+	StatusMessage string `json:"statusMessage,omitempty"`
+
+	// TargetId: Unique target id which identifies a particular incarnation
+	// of the target (output only).
+	TargetId uint64 `json:"targetId,omitempty,string"`
+
+	// TargetLink: URL of the resource the operation is mutating (output
+	// only).
+	TargetLink string `json:"targetLink,omitempty"`
+
+	// User: User who requested the operation, for example
+	// "user@example.com" (output only).
+	User string `json:"user,omitempty"`
+
+	// Warnings: If warning messages generated during processing of this
+	// operation, this field will be populated (output only).
+	Warnings []*OperationWarnings `json:"warnings,omitempty"`
+
+	// Zone: URL of the zone where the operation resides (output only).
+	Zone string `json:"zone,omitempty"`
+}
+
+type OperationError struct {
+	// Errors: The array of errors encountered while processing this
+	// operation.
+	Errors []*OperationErrorErrors `json:"errors,omitempty"`
+}
+
+type OperationErrorErrors struct {
+	// Code: The error type identifier for this error.
+	Code string `json:"code,omitempty"`
+
+	// Location: Indicates the field in the request which caused the error.
+	// This property is optional.
+	Location string `json:"location,omitempty"`
+
+	// Message: An optional, human-readable error message.
+	Message string `json:"message,omitempty"`
+}
+
+type OperationWarnings struct {
+	// Code: The warning type identifier for this warning.
+	Code string `json:"code,omitempty"`
+
+	// Data: Metadata for this warning in 'key: value' format.
+	Data []*OperationWarningsData `json:"data,omitempty"`
+
+	// Message: Optional human-readable details for this warning.
+	Message string `json:"message,omitempty"`
+}
+
+type OperationWarningsData struct {
+	// Key: A key for the warning data.
+	Key string `json:"key,omitempty"`
+
+	// Value: A warning data value corresponding to the key.
+	Value string `json:"value,omitempty"`
+}
+
+type OperationAggregatedList struct {
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	Id string `json:"id,omitempty"`
+
+	// Items: A map of scoped operation lists.
+	Items *OperationAggregatedListItems `json:"items,omitempty"`
+
+	// Kind: Type of resource.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: A token used to continue a truncated list request
+	// (output only).
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// SelfLink: Server defined URL for this resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+}
+
+type OperationAggregatedListItems struct {
+}
+
+type OperationList struct {
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	Id string `json:"id,omitempty"`
+
+	// Items: The operation resources.
+	Items []*Operation `json:"items,omitempty"`
+
+	// Kind: Type of resource.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: A token used to continue a truncated list request
+	// (output only).
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// SelfLink: Server defined URL for this resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+}
+
+type OperationsScopedList struct {
+	// Operations: List of operations contained in this scope.
+	Operations []*Operation `json:"operations,omitempty"`
+
+	// Warning: Informational warning which replaces the list of operations
+	// when the list is empty.
+	Warning *OperationsScopedListWarning `json:"warning,omitempty"`
+}
+
+type OperationsScopedListWarning struct {
+	// Code: The warning type identifier for this warning.
+	Code string `json:"code,omitempty"`
+
+	// Data: Metadata for this warning in 'key: value' format.
+	Data []*OperationsScopedListWarningData `json:"data,omitempty"`
+
+	// Message: Optional human-readable details for this warning.
+	Message string `json:"message,omitempty"`
+}
+
+type OperationsScopedListWarningData struct {
+	// Key: A key for the warning data.
+	Key string `json:"key,omitempty"`
+
+	// Value: A warning data value corresponding to the key.
+	Value string `json:"value,omitempty"`
+}
+
+type Project struct {
+	// CommonInstanceMetadata: Metadata key/value pairs available to all
+	// instances contained in this project.
+	CommonInstanceMetadata *Metadata `json:"commonInstanceMetadata,omitempty"`
+
+	// CreationTimestamp: Creation timestamp in RFC3339 text format (output
+	// only).
+	CreationTimestamp string `json:"creationTimestamp,omitempty"`
+
+	// Description: An optional textual description of the resource.
+	Description string `json:"description,omitempty"`
+
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	Id uint64 `json:"id,omitempty,string"`
+
+	// Kind: Type of the resource.
+	Kind string `json:"kind,omitempty"`
+
+	// Name: Name of the resource.
+	Name string `json:"name,omitempty"`
+
+	// Quotas: Quotas assigned to this project.
+	Quotas []*Quota `json:"quotas,omitempty"`
+
+	// SelfLink: Server defined URL for the resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+}
+
+type Quota struct {
+	// Limit: Quota limit for this metric.
+	Limit float64 `json:"limit,omitempty"`
+
+	// Metric: Name of the quota metric.
+	Metric string `json:"metric,omitempty"`
+
+	// Usage: Current usage of this metric.
+	Usage float64 `json:"usage,omitempty"`
+}
+
+type Region struct {
+	// CreationTimestamp: Creation timestamp in RFC3339 text format (output
+	// only).
+	CreationTimestamp string `json:"creationTimestamp,omitempty"`
+
+	// Deprecated: The deprecation status associated with this region.
+	Deprecated *DeprecationStatus `json:"deprecated,omitempty"`
+
+	// Description: Textual description of the resource.
+	Description string `json:"description,omitempty"`
+
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	Id uint64 `json:"id,omitempty,string"`
+
+	// Kind: Type of the resource.
+	Kind string `json:"kind,omitempty"`
+
+	// Name: Name of the resource.
+	Name string `json:"name,omitempty"`
+
+	// Quotas: Quotas assigned to this region.
+	Quotas []*Quota `json:"quotas,omitempty"`
+
+	// SelfLink: Server defined URL for the resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+
+	// Status: Status of the region, "UP" or "DOWN".
+	Status string `json:"status,omitempty"`
+
+	// Zones: A list of zones homed in this region, in the form of resource
+	// URLs.
+	Zones []string `json:"zones,omitempty"`
+}
+
+type RegionList struct {
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	Id string `json:"id,omitempty"`
+
+	// Items: The region resources.
+	Items []*Region `json:"items,omitempty"`
+
+	// Kind: Type of resource.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: A token used to continue a truncated list request
+	// (output only).
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// SelfLink: Server defined URL for this resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+}
+
+type Route struct {
+	// CreationTimestamp: Creation timestamp in RFC3339 text format (output
+	// only).
+	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"`
+
+	// DestRange: Which packets does this route apply to?
+	DestRange string `json:"destRange,omitempty"`
+
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	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.
+	Name string `json:"name,omitempty"`
+
+	// Network: URL of the network to which this route is applied; provided
+	// by the client when the route is created.
+	Network string `json:"network,omitempty"`
+
+	// NextHopGateway: The URL to a gateway that should handle matching
+	// packets.
+	NextHopGateway string `json:"nextHopGateway,omitempty"`
+
+	// NextHopInstance: The URL to an instance that should handle matching
+	// packets.
+	NextHopInstance string `json:"nextHopInstance,omitempty"`
+
+	// NextHopIp: The network IP address of an instance that should handle
+	// matching packets.
+	NextHopIp string `json:"nextHopIp,omitempty"`
+
+	// NextHopNetwork: The URL of the local network if it should handle
+	// matching packets.
+	NextHopNetwork string `json:"nextHopNetwork,omitempty"`
+
+	// Priority: Breaks ties between Routes of equal specificity. Routes
+	// with smaller values win when tied with routes with larger values.
+	Priority int64 `json:"priority,omitempty"`
+
+	// SelfLink: Server defined URL for the resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+
+	// Tags: A list of instance tags to which this route applies.
+	Tags []string `json:"tags,omitempty"`
+
+	// Warnings: If potential misconfigurations are detected for this route,
+	// this field will be populated with warning messages.
+	Warnings []*RouteWarnings `json:"warnings,omitempty"`
+}
+
+type RouteWarnings struct {
+	// Code: The warning type identifier for this warning.
+	Code string `json:"code,omitempty"`
+
+	// Data: Metadata for this warning in 'key: value' format.
+	Data []*RouteWarningsData `json:"data,omitempty"`
+
+	// Message: Optional human-readable details for this warning.
+	Message string `json:"message,omitempty"`
+}
+
+type RouteWarningsData struct {
+	// Key: A key for the warning data.
+	Key string `json:"key,omitempty"`
+
+	// Value: A warning data value corresponding to the key.
+	Value string `json:"value,omitempty"`
+}
+
+type RouteList struct {
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	Id string `json:"id,omitempty"`
+
+	// Items: The route resources.
+	Items []*Route `json:"items,omitempty"`
+
+	// Kind: Type of resource.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: A token used to continue a truncated list request
+	// (output only).
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// SelfLink: Server defined URL for this resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+}
+
+type Scheduling struct {
+	// AutomaticRestart: Whether the Instance should be automatically
+	// restarted whenever it is terminated by Compute Engine (not terminated
+	// by user).
+	AutomaticRestart bool `json:"automaticRestart,omitempty"`
+
+	// OnHostMaintenance: How the instance should behave when the host
+	// machine undergoes maintenance that may temporarily impact instance
+	// performance.
+	OnHostMaintenance string `json:"onHostMaintenance,omitempty"`
+}
+
+type SerialPortOutput struct {
+	// Contents: The contents of the console output.
+	Contents string `json:"contents,omitempty"`
+
+	// Kind: Type of the resource.
+	Kind string `json:"kind,omitempty"`
+
+	// SelfLink: Server defined URL for the resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+}
+
+type ServiceAccount struct {
+	// Email: Email address of the service account.
+	Email string `json:"email,omitempty"`
+
+	// Scopes: The list of scopes to be made available for this service
+	// account.
+	Scopes []string `json:"scopes,omitempty"`
+}
+
+type Snapshot struct {
+	// CreationTimestamp: Creation timestamp in RFC3339 text format (output
+	// only).
+	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"`
+
+	// DiskSizeGb: Size of the persistent disk snapshot, specified in GB
+	// (output only).
+	DiskSizeGb int64 `json:"diskSizeGb,omitempty,string"`
+
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	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.
+	Name string `json:"name,omitempty"`
+
+	// SelfLink: Server defined URL for the resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+
+	// SourceDisk: The source disk used to create this snapshot. Once the
+	// source disk has been deleted from the system, this field will be
+	// cleared, and will not be set even if a disk with the same name has
+	// been re-created (output only).
+	SourceDisk string `json:"sourceDisk,omitempty"`
+
+	// SourceDiskId: The 'id' value of the disk used to create this
+	// snapshot. This value may be used to determine whether the snapshot
+	// was taken from the current or a previous instance of a given disk
+	// name.
+	SourceDiskId string `json:"sourceDiskId,omitempty"`
+
+	// Status: The status of the persistent disk snapshot (output only).
+	Status string `json:"status,omitempty"`
+
+	// StorageBytes: A size of the the storage used by the snapshot. As
+	// snapshots share storage this number is expected to change with
+	// snapshot creation/deletion.
+	StorageBytes int64 `json:"storageBytes,omitempty,string"`
+
+	// StorageBytesStatus: An indicator whether storageBytes is in a stable
+	// state, or it is being adjusted as a result of shared storage
+	// reallocation.
+	StorageBytesStatus string `json:"storageBytesStatus,omitempty"`
+}
+
+type SnapshotList struct {
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	Id string `json:"id,omitempty"`
+
+	// Items: The persistent snapshot resources.
+	Items []*Snapshot `json:"items,omitempty"`
+
+	// Kind: Type of resource.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: A token used to continue a truncated list request
+	// (output only).
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// SelfLink: Server defined URL for this resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+}
+
+type Tags struct {
+	// Fingerprint: Fingerprint of this resource. A hash of the tags stored
+	// in this object. This field is used optimistic locking. An up-to-date
+	// tags fingerprint must be provided in order to modify tags.
+	Fingerprint string `json:"fingerprint,omitempty"`
+
+	// Items: An array of tags. Each tag must be 1-63 characters long, and
+	// comply with RFC1035.
+	Items []string `json:"items,omitempty"`
+}
+
+type TargetInstance struct {
+	// CreationTimestamp: Creation timestamp in RFC3339 text format (output
+	// only).
+	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: Unique identifier for the resource; defined by the server (output
+	// only).
+	Id uint64 `json:"id,omitempty,string"`
+
+	// Instance: The URL to the instance that terminates the relevant
+	// traffic.
+	Instance string `json:"instance,omitempty"`
+
+	// 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.
+	Name string `json:"name,omitempty"`
+
+	// NatPolicy: NAT option controlling how IPs are NAT'ed to the VM.
+	// Currently only NO_NAT (default value) is supported.
+	NatPolicy string `json:"natPolicy,omitempty"`
+
+	// SelfLink: Server defined URL for the resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+
+	// Zone: URL of the zone where the target instance resides (output
+	// only).
+	Zone string `json:"zone,omitempty"`
+}
+
+type TargetInstanceAggregatedList struct {
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	Id string `json:"id,omitempty"`
+
+	// Items: A map of scoped target instance lists.
+	Items *TargetInstanceAggregatedListItems `json:"items,omitempty"`
+
+	// Kind: Type of resource.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: A token used to continue a truncated list request
+	// (output only).
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// SelfLink: Server defined URL for this resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+}
+
+type TargetInstanceAggregatedListItems struct {
+}
+
+type TargetInstanceList struct {
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	Id string `json:"id,omitempty"`
+
+	// Items: The TargetInstance resources.
+	Items []*TargetInstance `json:"items,omitempty"`
+
+	// Kind: Type of resource.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: A token used to continue a truncated list request
+	// (output only).
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// SelfLink: Server defined URL for this resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+}
+
+type TargetInstancesScopedList struct {
+	// TargetInstances: List of target instances contained in this scope.
+	TargetInstances []*TargetInstance `json:"targetInstances,omitempty"`
+
+	// Warning: Informational warning which replaces the list of addresses
+	// when the list is empty.
+	Warning *TargetInstancesScopedListWarning `json:"warning,omitempty"`
+}
+
+type TargetInstancesScopedListWarning struct {
+	// Code: The warning type identifier for this warning.
+	Code string `json:"code,omitempty"`
+
+	// Data: Metadata for this warning in 'key: value' format.
+	Data []*TargetInstancesScopedListWarningData `json:"data,omitempty"`
+
+	// Message: Optional human-readable details for this warning.
+	Message string `json:"message,omitempty"`
+}
+
+type TargetInstancesScopedListWarningData struct {
+	// Key: A key for the warning data.
+	Key string `json:"key,omitempty"`
+
+	// Value: A warning data value corresponding to the key.
+	Value string `json:"value,omitempty"`
+}
+
+type TargetPool struct {
+	// BackupPool: This field is applicable only when the containing target
+	// pool is serving a forwarding rule as the primary pool, and its
+	// 'failoverRatio' field is properly set to a value between [0,
+	// 1].
+	//
+	// 'backupPool' and 'failoverRatio' together define the fallback
+	// behavior of the primary target pool: if the ratio of the healthy VMs
+	// in the primary pool is at or below 'failoverRatio', traffic arriving
+	// at the load-balanced IP will be directed to the backup pool.
+	//
+	// In case
+	// where 'failoverRatio' and 'backupPool' are not set, or all the VMs in
+	// the backup pool are unhealthy, the traffic will be directed back to
+	// the primary pool in the "force" mode, where traffic will be spread to
+	// the healthy VMs with the best effort, or to all VMs when no VM is
+	// healthy.
+	BackupPool string `json:"backupPool,omitempty"`
+
+	// CreationTimestamp: Creation timestamp in RFC3339 text format (output
+	// only).
+	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"`
+
+	// FailoverRatio: This field is applicable only when the containing
+	// target pool is serving a forwarding rule as the primary pool (i.e.,
+	// not as a backup pool to some other target pool). The value of the
+	// field must be in [0, 1].
+	//
+	// If set, 'backupPool' must also be set. They
+	// together define the fallback behavior of the primary target pool: if
+	// the ratio of the healthy VMs in the primary pool is at or below this
+	// number, traffic arriving at the load-balanced IP will be directed to
+	// the backup pool.
+	//
+	// In case where 'failoverRatio' is not set or all the
+	// VMs in the backup pool are unhealthy, the traffic will be directed
+	// back to the primary pool in the "force" mode, where traffic will be
+	// spread to the healthy VMs with the best effort, or to all VMs when no
+	// VM is healthy.
+	FailoverRatio float64 `json:"failoverRatio,omitempty"`
+
+	// HealthChecks: A list of URLs to the HttpHealthCheck resource. A
+	// member VM in this pool is considered healthy if and only if all
+	// specified health checks pass. An empty list means all member VMs will
+	// be considered healthy at all times.
+	HealthChecks []string `json:"healthChecks,omitempty"`
+
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	Id uint64 `json:"id,omitempty,string"`
+
+	// Instances: A list of resource URLs to the member VMs serving this
+	// pool. They must live in zones contained in the same region as this
+	// pool.
+	Instances []string `json:"instances,omitempty"`
+
+	// 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.
+	Name string `json:"name,omitempty"`
+
+	// Region: URL of the region where the target pool resides (output
+	// only).
+	Region string `json:"region,omitempty"`
+
+	// SelfLink: Server defined URL for the resource (output only).
+	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 VM in the pool; 'CLIENT_IP': Connections from the same client
+	// IP will go to the same VM in the pool while that VM remains healthy.
+	// 'CLIENT_IP_PROTO': Connections from the same client IP with the same
+	// IP protocol will go to the same VM in the pool while that VM remains
+	// healthy.
+	SessionAffinity string `json:"sessionAffinity,omitempty"`
+}
+
+type TargetPoolAggregatedList struct {
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	Id string `json:"id,omitempty"`
+
+	// Items: A map of scoped target pool lists.
+	Items *TargetPoolAggregatedListItems `json:"items,omitempty"`
+
+	// Kind: Type of resource.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: A token used to continue a truncated list request
+	// (output only).
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// SelfLink: Server defined URL for this resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+}
+
+type TargetPoolAggregatedListItems struct {
+}
+
+type TargetPoolInstanceHealth struct {
+	HealthStatus []*HealthStatus `json:"healthStatus,omitempty"`
+
+	// Kind: Type of resource.
+	Kind string `json:"kind,omitempty"`
+}
+
+type TargetPoolList struct {
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	Id string `json:"id,omitempty"`
+
+	// Items: The TargetPool resources.
+	Items []*TargetPool `json:"items,omitempty"`
+
+	// Kind: Type of resource.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: A token used to continue a truncated list request
+	// (output only).
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// SelfLink: Server defined URL for this resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+}
+
+type TargetPoolsAddHealthCheckRequest struct {
+	// HealthChecks: Health check URLs to be added to targetPool.
+	HealthChecks []*HealthCheckReference `json:"healthChecks,omitempty"`
+}
+
+type TargetPoolsAddInstanceRequest struct {
+	// Instances: URLs of the instances to be added to targetPool.
+	Instances []*InstanceReference `json:"instances,omitempty"`
+}
+
+type TargetPoolsRemoveHealthCheckRequest struct {
+	// HealthChecks: Health check URLs to be removed from targetPool.
+	HealthChecks []*HealthCheckReference `json:"healthChecks,omitempty"`
+}
+
+type TargetPoolsRemoveInstanceRequest struct {
+	// Instances: URLs of the instances to be removed from targetPool.
+	Instances []*InstanceReference `json:"instances,omitempty"`
+}
+
+type TargetPoolsScopedList struct {
+	// TargetPools: List of target pools contained in this scope.
+	TargetPools []*TargetPool `json:"targetPools,omitempty"`
+
+	// Warning: Informational warning which replaces the list of addresses
+	// when the list is empty.
+	Warning *TargetPoolsScopedListWarning `json:"warning,omitempty"`
+}
+
+type TargetPoolsScopedListWarning struct {
+	// Code: The warning type identifier for this warning.
+	Code string `json:"code,omitempty"`
+
+	// Data: Metadata for this warning in 'key: value' format.
+	Data []*TargetPoolsScopedListWarningData `json:"data,omitempty"`
+
+	// Message: Optional human-readable details for this warning.
+	Message string `json:"message,omitempty"`
+}
+
+type TargetPoolsScopedListWarningData struct {
+	// Key: A key for the warning data.
+	Key string `json:"key,omitempty"`
+
+	// Value: A warning data value corresponding to the key.
+	Value string `json:"value,omitempty"`
+}
+
+type TargetReference struct {
+	Target string `json:"target,omitempty"`
+}
+
+type Zone struct {
+	// CreationTimestamp: Creation timestamp in RFC3339 text format (output
+	// only).
+	CreationTimestamp string `json:"creationTimestamp,omitempty"`
+
+	// Deprecated: The deprecation status associated with this zone.
+	Deprecated *DeprecationStatus `json:"deprecated,omitempty"`
+
+	// Description: Textual description of the resource.
+	Description string `json:"description,omitempty"`
+
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	Id uint64 `json:"id,omitempty,string"`
+
+	// Kind: Type of the resource.
+	Kind string `json:"kind,omitempty"`
+
+	// MaintenanceWindows: Scheduled maintenance windows for the zone. When
+	// the zone is in a maintenance window, all resources which reside in
+	// the zone will be unavailable.
+	MaintenanceWindows []*ZoneMaintenanceWindows `json:"maintenanceWindows,omitempty"`
+
+	// Name: Name of the resource.
+	Name string `json:"name,omitempty"`
+
+	// Region: Full URL reference to the region which hosts the zone (output
+	// only).
+	Region string `json:"region,omitempty"`
+
+	// SelfLink: Server defined URL for the resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+
+	// Status: Status of the zone. "UP" or "DOWN".
+	Status string `json:"status,omitempty"`
+}
+
+type ZoneMaintenanceWindows struct {
+	// BeginTime: Begin time of the maintenance window, in RFC 3339 format.
+	BeginTime string `json:"beginTime,omitempty"`
+
+	// Description: Textual description of the maintenance window.
+	Description string `json:"description,omitempty"`
+
+	// EndTime: End time of the maintenance window, in RFC 3339 format.
+	EndTime string `json:"endTime,omitempty"`
+
+	// Name: Name of the maintenance window.
+	Name string `json:"name,omitempty"`
+}
+
+type ZoneList struct {
+	// Id: Unique identifier for the resource; defined by the server (output
+	// only).
+	Id string `json:"id,omitempty"`
+
+	// Items: The zone resources.
+	Items []*Zone `json:"items,omitempty"`
+
+	// Kind: Type of resource.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: A token used to continue a truncated list request
+	// (output only).
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// SelfLink: Server defined URL for this resource (output only).
+	SelfLink string `json:"selfLink,omitempty"`
+}
+
+// method id "compute.addresses.aggregatedList":
+
+type AddressesAggregatedListCall struct {
+	s       *Service
+	project string
+	opt_    map[string]interface{}
+}
+
+// AggregatedList: Retrieves the list of addresses grouped by scope.
+func (r *AddressesService) AggregatedList(project string) *AddressesAggregatedListCall {
+	c := &AddressesAggregatedListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	return c
+}
+
+// Filter sets the optional parameter "filter": Filter expression for
+// filtering listed resources.
+func (c *AddressesAggregatedListCall) Filter(filter string) *AddressesAggregatedListCall {
+	c.opt_["filter"] = filter
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": Maximum count of
+// results to be returned. Maximum value is 500 and default value is
+// 100.
+func (c *AddressesAggregatedListCall) MaxResults(maxResults int64) *AddressesAggregatedListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Tag returned by a
+// previous list request truncated by maxResults. Used to continue a
+// previous list request.
+func (c *AddressesAggregatedListCall) PageToken(pageToken string) *AddressesAggregatedListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *AddressesAggregatedListCall) Do() (*AddressAggregatedList, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/aggregated/addresses")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(AddressAggregatedList)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves the list of addresses grouped by scope.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.addresses.aggregatedList",
+	//   "parameterOrder": [
+	//     "project"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "Optional. Filter expression for filtering listed resources.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "default": "100",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "maximum": "500",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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}/aggregated/addresses",
+	//   "response": {
+	//     "$ref": "AddressAggregatedList"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.addresses.delete":
+
+type AddressesDeleteCall struct {
+	s       *Service
+	project string
+	region  string
+	address string
+	opt_    map[string]interface{}
+}
+
+// Delete: Deletes the specified address resource.
+func (r *AddressesService) Delete(project string, region string, address string) *AddressesDeleteCall {
+	c := &AddressesDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.region = region
+	c.address = address
+	return c
+}
+
+func (c *AddressesDeleteCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/regions/{region}/addresses/{address}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{address}", url.QueryEscape(c.address), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Deletes the specified address resource.",
+	//   "httpMethod": "DELETE",
+	//   "id": "compute.addresses.delete",
+	//   "parameterOrder": [
+	//     "project",
+	//     "region",
+	//     "address"
+	//   ],
+	//   "parameters": {
+	//     "address": {
+	//       "description": "Name of the address 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"
+	//     },
+	//     "region": {
+	//       "description": "Name of the region scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/regions/{region}/addresses/{address}",
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.addresses.get":
+
+type AddressesGetCall struct {
+	s       *Service
+	project string
+	region  string
+	address string
+	opt_    map[string]interface{}
+}
+
+// Get: Returns the specified address resource.
+func (r *AddressesService) Get(project string, region string, address string) *AddressesGetCall {
+	c := &AddressesGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.region = region
+	c.address = address
+	return c
+}
+
+func (c *AddressesGetCall) Do() (*Address, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/regions/{region}/addresses/{address}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{address}", url.QueryEscape(c.address), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Address)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Returns the specified address resource.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.addresses.get",
+	//   "parameterOrder": [
+	//     "project",
+	//     "region",
+	//     "address"
+	//   ],
+	//   "parameters": {
+	//     "address": {
+	//       "description": "Name of the address 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"
+	//     },
+	//     "region": {
+	//       "description": "Name of the region scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/regions/{region}/addresses/{address}",
+	//   "response": {
+	//     "$ref": "Address"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.addresses.insert":
+
+type AddressesInsertCall struct {
+	s       *Service
+	project string
+	region  string
+	address *Address
+	opt_    map[string]interface{}
+}
+
+// Insert: Creates an address resource in the specified project using
+// the data included in the request.
+func (r *AddressesService) Insert(project string, region string, address *Address) *AddressesInsertCall {
+	c := &AddressesInsertCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.region = region
+	c.address = address
+	return c
+}
+
+func (c *AddressesInsertCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.address)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/regions/{region}/addresses")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Creates an address resource in the specified project using the data included in the request.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.addresses.insert",
+	//   "parameterOrder": [
+	//     "project",
+	//     "region"
+	//   ],
+	//   "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"
+	//     },
+	//     "region": {
+	//       "description": "Name of the region scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/regions/{region}/addresses",
+	//   "request": {
+	//     "$ref": "Address"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.addresses.list":
+
+type AddressesListCall struct {
+	s       *Service
+	project string
+	region  string
+	opt_    map[string]interface{}
+}
+
+// List: Retrieves the list of address resources contained within the
+// specified region.
+func (r *AddressesService) List(project string, region string) *AddressesListCall {
+	c := &AddressesListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.region = region
+	return c
+}
+
+// Filter sets the optional parameter "filter": Filter expression for
+// filtering listed resources.
+func (c *AddressesListCall) Filter(filter string) *AddressesListCall {
+	c.opt_["filter"] = filter
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": Maximum count of
+// results to be returned. Maximum value is 500 and default value is
+// 100.
+func (c *AddressesListCall) MaxResults(maxResults int64) *AddressesListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Tag returned by a
+// previous list request truncated by maxResults. Used to continue a
+// previous list request.
+func (c *AddressesListCall) PageToken(pageToken string) *AddressesListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *AddressesListCall) Do() (*AddressList, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/regions/{region}/addresses")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(AddressList)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves the list of address resources contained within the specified region.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.addresses.list",
+	//   "parameterOrder": [
+	//     "project",
+	//     "region"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "Optional. Filter expression for filtering listed resources.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "default": "100",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "maximum": "500",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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"
+	//     },
+	//     "region": {
+	//       "description": "Name of the region scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/regions/{region}/addresses",
+	//   "response": {
+	//     "$ref": "AddressList"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.disks.aggregatedList":
+
+type DisksAggregatedListCall struct {
+	s       *Service
+	project string
+	opt_    map[string]interface{}
+}
+
+// AggregatedList: Retrieves the list of disks grouped by scope.
+func (r *DisksService) AggregatedList(project string) *DisksAggregatedListCall {
+	c := &DisksAggregatedListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	return c
+}
+
+// Filter sets the optional parameter "filter": Filter expression for
+// filtering listed resources.
+func (c *DisksAggregatedListCall) Filter(filter string) *DisksAggregatedListCall {
+	c.opt_["filter"] = filter
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": Maximum count of
+// results to be returned. Maximum value is 500 and default value is
+// 100.
+func (c *DisksAggregatedListCall) MaxResults(maxResults int64) *DisksAggregatedListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Tag returned by a
+// previous list request truncated by maxResults. Used to continue a
+// previous list request.
+func (c *DisksAggregatedListCall) PageToken(pageToken string) *DisksAggregatedListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *DisksAggregatedListCall) Do() (*DiskAggregatedList, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/aggregated/disks")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(DiskAggregatedList)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves the list of disks grouped by scope.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.disks.aggregatedList",
+	//   "parameterOrder": [
+	//     "project"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "Optional. Filter expression for filtering listed resources.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "default": "100",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "maximum": "500",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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}/aggregated/disks",
+	//   "response": {
+	//     "$ref": "DiskAggregatedList"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.disks.createSnapshot":
+
+type DisksCreateSnapshotCall struct {
+	s        *Service
+	project  string
+	zone     string
+	disk     string
+	snapshot *Snapshot
+	opt_     map[string]interface{}
+}
+
+// CreateSnapshot:
+func (r *DisksService) CreateSnapshot(project string, zone string, disk string, snapshot *Snapshot) *DisksCreateSnapshotCall {
+	c := &DisksCreateSnapshotCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.zone = zone
+	c.disk = disk
+	c.snapshot = snapshot
+	return c
+}
+
+func (c *DisksCreateSnapshotCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.snapshot)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/zones/{zone}/disks/{disk}/createSnapshot")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{disk}", url.QueryEscape(c.disk), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "httpMethod": "POST",
+	//   "id": "compute.disks.createSnapshot",
+	//   "parameterOrder": [
+	//     "project",
+	//     "zone",
+	//     "disk"
+	//   ],
+	//   "parameters": {
+	//     "disk": {
+	//       "description": "Name of the persistent disk 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"
+	//     },
+	//     "zone": {
+	//       "description": "Name of the zone scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/zones/{zone}/disks/{disk}/createSnapshot",
+	//   "request": {
+	//     "$ref": "Snapshot"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.disks.delete":
+
+type DisksDeleteCall struct {
+	s       *Service
+	project string
+	zone    string
+	disk    string
+	opt_    map[string]interface{}
+}
+
+// Delete: Deletes the specified persistent disk resource.
+func (r *DisksService) Delete(project string, zone string, disk string) *DisksDeleteCall {
+	c := &DisksDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.zone = zone
+	c.disk = disk
+	return c
+}
+
+func (c *DisksDeleteCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/zones/{zone}/disks/{disk}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{disk}", url.QueryEscape(c.disk), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Deletes the specified persistent disk resource.",
+	//   "httpMethod": "DELETE",
+	//   "id": "compute.disks.delete",
+	//   "parameterOrder": [
+	//     "project",
+	//     "zone",
+	//     "disk"
+	//   ],
+	//   "parameters": {
+	//     "disk": {
+	//       "description": "Name of the persistent disk 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"
+	//     },
+	//     "zone": {
+	//       "description": "Name of the zone scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/zones/{zone}/disks/{disk}",
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.disks.get":
+
+type DisksGetCall struct {
+	s       *Service
+	project string
+	zone    string
+	disk    string
+	opt_    map[string]interface{}
+}
+
+// Get: Returns the specified persistent disk resource.
+func (r *DisksService) Get(project string, zone string, disk string) *DisksGetCall {
+	c := &DisksGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.zone = zone
+	c.disk = disk
+	return c
+}
+
+func (c *DisksGetCall) Do() (*Disk, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/zones/{zone}/disks/{disk}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{disk}", url.QueryEscape(c.disk), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Disk)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Returns the specified persistent disk resource.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.disks.get",
+	//   "parameterOrder": [
+	//     "project",
+	//     "zone",
+	//     "disk"
+	//   ],
+	//   "parameters": {
+	//     "disk": {
+	//       "description": "Name of the persistent disk 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"
+	//     },
+	//     "zone": {
+	//       "description": "Name of the zone scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/zones/{zone}/disks/{disk}",
+	//   "response": {
+	//     "$ref": "Disk"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.disks.insert":
+
+type DisksInsertCall struct {
+	s       *Service
+	project string
+	zone    string
+	disk    *Disk
+	opt_    map[string]interface{}
+}
+
+// Insert: Creates a persistent disk resource in the specified project
+// using the data included in the request.
+func (r *DisksService) Insert(project string, zone string, disk *Disk) *DisksInsertCall {
+	c := &DisksInsertCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.zone = zone
+	c.disk = disk
+	return c
+}
+
+// SourceImage sets the optional parameter "sourceImage": Source image
+// to restore onto a disk.
+func (c *DisksInsertCall) SourceImage(sourceImage string) *DisksInsertCall {
+	c.opt_["sourceImage"] = sourceImage
+	return c
+}
+
+func (c *DisksInsertCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.disk)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	if v, ok := c.opt_["sourceImage"]; ok {
+		params.Set("sourceImage", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/zones/{zone}/disks")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Creates a persistent disk resource in the specified project using the data included in the request.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.disks.insert",
+	//   "parameterOrder": [
+	//     "project",
+	//     "zone"
+	//   ],
+	//   "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"
+	//     },
+	//     "sourceImage": {
+	//       "description": "Optional. Source image to restore onto a disk.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "zone": {
+	//       "description": "Name of the zone scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/zones/{zone}/disks",
+	//   "request": {
+	//     "$ref": "Disk"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.disks.list":
+
+type DisksListCall struct {
+	s       *Service
+	project string
+	zone    string
+	opt_    map[string]interface{}
+}
+
+// List: Retrieves the list of persistent disk resources contained
+// within the specified zone.
+func (r *DisksService) List(project string, zone string) *DisksListCall {
+	c := &DisksListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.zone = zone
+	return c
+}
+
+// Filter sets the optional parameter "filter": Filter expression for
+// filtering listed resources.
+func (c *DisksListCall) Filter(filter string) *DisksListCall {
+	c.opt_["filter"] = filter
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": Maximum count of
+// results to be returned. Maximum value is 500 and default value is
+// 100.
+func (c *DisksListCall) MaxResults(maxResults int64) *DisksListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Tag returned by a
+// previous list request truncated by maxResults. Used to continue a
+// previous list request.
+func (c *DisksListCall) PageToken(pageToken string) *DisksListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *DisksListCall) Do() (*DiskList, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/zones/{zone}/disks")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(DiskList)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves the list of persistent disk resources contained within the specified zone.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.disks.list",
+	//   "parameterOrder": [
+	//     "project",
+	//     "zone"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "Optional. Filter expression for filtering listed resources.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "default": "100",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "maximum": "500",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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"
+	//     },
+	//     "zone": {
+	//       "description": "Name of the zone scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/zones/{zone}/disks",
+	//   "response": {
+	//     "$ref": "DiskList"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.firewalls.delete":
+
+type FirewallsDeleteCall struct {
+	s        *Service
+	project  string
+	firewall string
+	opt_     map[string]interface{}
+}
+
+// Delete: Deletes the specified firewall resource.
+func (r *FirewallsService) Delete(project string, firewall string) *FirewallsDeleteCall {
+	c := &FirewallsDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.firewall = firewall
+	return c
+}
+
+func (c *FirewallsDeleteCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/global/firewalls/{firewall}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{firewall}", url.QueryEscape(c.firewall), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Deletes the specified firewall resource.",
+	//   "httpMethod": "DELETE",
+	//   "id": "compute.firewalls.delete",
+	//   "parameterOrder": [
+	//     "project",
+	//     "firewall"
+	//   ],
+	//   "parameters": {
+	//     "firewall": {
+	//       "description": "Name of the firewall 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/firewalls/{firewall}",
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.firewalls.get":
+
+type FirewallsGetCall struct {
+	s        *Service
+	project  string
+	firewall string
+	opt_     map[string]interface{}
+}
+
+// Get: Returns the specified firewall resource.
+func (r *FirewallsService) Get(project string, firewall string) *FirewallsGetCall {
+	c := &FirewallsGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.firewall = firewall
+	return c
+}
+
+func (c *FirewallsGetCall) Do() (*Firewall, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/global/firewalls/{firewall}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{firewall}", url.QueryEscape(c.firewall), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Firewall)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Returns the specified firewall resource.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.firewalls.get",
+	//   "parameterOrder": [
+	//     "project",
+	//     "firewall"
+	//   ],
+	//   "parameters": {
+	//     "firewall": {
+	//       "description": "Name of the firewall 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/firewalls/{firewall}",
+	//   "response": {
+	//     "$ref": "Firewall"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.firewalls.insert":
+
+type FirewallsInsertCall struct {
+	s        *Service
+	project  string
+	firewall *Firewall
+	opt_     map[string]interface{}
+}
+
+// Insert: Creates a firewall resource in the specified project using
+// the data included in the request.
+func (r *FirewallsService) Insert(project string, firewall *Firewall) *FirewallsInsertCall {
+	c := &FirewallsInsertCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.firewall = firewall
+	return c
+}
+
+func (c *FirewallsInsertCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.firewall)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/global/firewalls")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Creates a firewall resource in the specified project using the data included in the request.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.firewalls.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/firewalls",
+	//   "request": {
+	//     "$ref": "Firewall"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.firewalls.list":
+
+type FirewallsListCall struct {
+	s       *Service
+	project string
+	opt_    map[string]interface{}
+}
+
+// List: Retrieves the list of firewall resources available to the
+// specified project.
+func (r *FirewallsService) List(project string) *FirewallsListCall {
+	c := &FirewallsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	return c
+}
+
+// Filter sets the optional parameter "filter": Filter expression for
+// filtering listed resources.
+func (c *FirewallsListCall) Filter(filter string) *FirewallsListCall {
+	c.opt_["filter"] = filter
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": Maximum count of
+// results to be returned. Maximum value is 500 and default value is
+// 100.
+func (c *FirewallsListCall) MaxResults(maxResults int64) *FirewallsListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Tag returned by a
+// previous list request truncated by maxResults. Used to continue a
+// previous list request.
+func (c *FirewallsListCall) PageToken(pageToken string) *FirewallsListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *FirewallsListCall) Do() (*FirewallList, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/global/firewalls")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(FirewallList)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves the list of firewall resources available to the specified project.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.firewalls.list",
+	//   "parameterOrder": [
+	//     "project"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "Optional. Filter expression for filtering listed resources.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "default": "100",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "maximum": "500",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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/firewalls",
+	//   "response": {
+	//     "$ref": "FirewallList"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.firewalls.patch":
+
+type FirewallsPatchCall struct {
+	s         *Service
+	project   string
+	firewall  string
+	firewall2 *Firewall
+	opt_      map[string]interface{}
+}
+
+// Patch: Updates the specified firewall resource with the data included
+// in the request. This method supports patch semantics.
+func (r *FirewallsService) Patch(project string, firewall string, firewall2 *Firewall) *FirewallsPatchCall {
+	c := &FirewallsPatchCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.firewall = firewall
+	c.firewall2 = firewall2
+	return c
+}
+
+func (c *FirewallsPatchCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.firewall2)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/global/firewalls/{firewall}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("PATCH", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{firewall}", url.QueryEscape(c.firewall), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates the specified firewall resource with the data included in the request. This method supports patch semantics.",
+	//   "httpMethod": "PATCH",
+	//   "id": "compute.firewalls.patch",
+	//   "parameterOrder": [
+	//     "project",
+	//     "firewall"
+	//   ],
+	//   "parameters": {
+	//     "firewall": {
+	//       "description": "Name of the firewall 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/firewalls/{firewall}",
+	//   "request": {
+	//     "$ref": "Firewall"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.firewalls.update":
+
+type FirewallsUpdateCall struct {
+	s         *Service
+	project   string
+	firewall  string
+	firewall2 *Firewall
+	opt_      map[string]interface{}
+}
+
+// Update: Updates the specified firewall resource with the data
+// included in the request.
+func (r *FirewallsService) Update(project string, firewall string, firewall2 *Firewall) *FirewallsUpdateCall {
+	c := &FirewallsUpdateCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.firewall = firewall
+	c.firewall2 = firewall2
+	return c
+}
+
+func (c *FirewallsUpdateCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.firewall2)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/global/firewalls/{firewall}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("PUT", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{firewall}", url.QueryEscape(c.firewall), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates the specified firewall resource with the data included in the request.",
+	//   "httpMethod": "PUT",
+	//   "id": "compute.firewalls.update",
+	//   "parameterOrder": [
+	//     "project",
+	//     "firewall"
+	//   ],
+	//   "parameters": {
+	//     "firewall": {
+	//       "description": "Name of the firewall 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/firewalls/{firewall}",
+	//   "request": {
+	//     "$ref": "Firewall"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.forwardingRules.aggregatedList":
+
+type ForwardingRulesAggregatedListCall struct {
+	s       *Service
+	project string
+	opt_    map[string]interface{}
+}
+
+// AggregatedList: Retrieves the list of forwarding rules grouped by
+// scope.
+func (r *ForwardingRulesService) AggregatedList(project string) *ForwardingRulesAggregatedListCall {
+	c := &ForwardingRulesAggregatedListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	return c
+}
+
+// Filter sets the optional parameter "filter": Filter expression for
+// filtering listed resources.
+func (c *ForwardingRulesAggregatedListCall) Filter(filter string) *ForwardingRulesAggregatedListCall {
+	c.opt_["filter"] = filter
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": Maximum count of
+// results to be returned. Maximum value is 500 and default value is
+// 100.
+func (c *ForwardingRulesAggregatedListCall) MaxResults(maxResults int64) *ForwardingRulesAggregatedListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Tag returned by a
+// previous list request truncated by maxResults. Used to continue a
+// previous list request.
+func (c *ForwardingRulesAggregatedListCall) PageToken(pageToken string) *ForwardingRulesAggregatedListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *ForwardingRulesAggregatedListCall) Do() (*ForwardingRuleAggregatedList, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/aggregated/forwardingRules")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(ForwardingRuleAggregatedList)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves the list of forwarding rules grouped by scope.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.forwardingRules.aggregatedList",
+	//   "parameterOrder": [
+	//     "project"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "Optional. Filter expression for filtering listed resources.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "default": "100",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "maximum": "500",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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}/aggregated/forwardingRules",
+	//   "response": {
+	//     "$ref": "ForwardingRuleAggregatedList"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.forwardingRules.delete":
+
+type ForwardingRulesDeleteCall struct {
+	s              *Service
+	project        string
+	region         string
+	forwardingRule string
+	opt_           map[string]interface{}
+}
+
+// Delete: Deletes the specified ForwardingRule resource.
+func (r *ForwardingRulesService) Delete(project string, region string, forwardingRule string) *ForwardingRulesDeleteCall {
+	c := &ForwardingRulesDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.region = region
+	c.forwardingRule = forwardingRule
+	return c
+}
+
+func (c *ForwardingRulesDeleteCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/regions/{region}/forwardingRules/{forwardingRule}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{forwardingRule}", url.QueryEscape(c.forwardingRule), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Deletes the specified ForwardingRule resource.",
+	//   "httpMethod": "DELETE",
+	//   "id": "compute.forwardingRules.delete",
+	//   "parameterOrder": [
+	//     "project",
+	//     "region",
+	//     "forwardingRule"
+	//   ],
+	//   "parameters": {
+	//     "forwardingRule": {
+	//       "description": "Name of the ForwardingRule 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"
+	//     },
+	//     "region": {
+	//       "description": "Name of the region scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/regions/{region}/forwardingRules/{forwardingRule}",
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.forwardingRules.get":
+
+type ForwardingRulesGetCall struct {
+	s              *Service
+	project        string
+	region         string
+	forwardingRule string
+	opt_           map[string]interface{}
+}
+
+// Get: Returns the specified ForwardingRule resource.
+func (r *ForwardingRulesService) Get(project string, region string, forwardingRule string) *ForwardingRulesGetCall {
+	c := &ForwardingRulesGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.region = region
+	c.forwardingRule = forwardingRule
+	return c
+}
+
+func (c *ForwardingRulesGetCall) Do() (*ForwardingRule, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/regions/{region}/forwardingRules/{forwardingRule}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{forwardingRule}", url.QueryEscape(c.forwardingRule), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(ForwardingRule)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Returns the specified ForwardingRule resource.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.forwardingRules.get",
+	//   "parameterOrder": [
+	//     "project",
+	//     "region",
+	//     "forwardingRule"
+	//   ],
+	//   "parameters": {
+	//     "forwardingRule": {
+	//       "description": "Name of the ForwardingRule 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"
+	//     },
+	//     "region": {
+	//       "description": "Name of the region scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/regions/{region}/forwardingRules/{forwardingRule}",
+	//   "response": {
+	//     "$ref": "ForwardingRule"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.forwardingRules.insert":
+
+type ForwardingRulesInsertCall struct {
+	s              *Service
+	project        string
+	region         string
+	forwardingrule *ForwardingRule
+	opt_           map[string]interface{}
+}
+
+// Insert: Creates a ForwardingRule resource in the specified project
+// and region using the data included in the request.
+func (r *ForwardingRulesService) Insert(project string, region string, forwardingrule *ForwardingRule) *ForwardingRulesInsertCall {
+	c := &ForwardingRulesInsertCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.region = region
+	c.forwardingrule = forwardingrule
+	return c
+}
+
+func (c *ForwardingRulesInsertCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.forwardingrule)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/regions/{region}/forwardingRules")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Creates a ForwardingRule resource in the specified project and region using the data included in the request.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.forwardingRules.insert",
+	//   "parameterOrder": [
+	//     "project",
+	//     "region"
+	//   ],
+	//   "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"
+	//     },
+	//     "region": {
+	//       "description": "Name of the region scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/regions/{region}/forwardingRules",
+	//   "request": {
+	//     "$ref": "ForwardingRule"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.forwardingRules.list":
+
+type ForwardingRulesListCall struct {
+	s       *Service
+	project string
+	region  string
+	opt_    map[string]interface{}
+}
+
+// List: Retrieves the list of ForwardingRule resources available to the
+// specified project and region.
+func (r *ForwardingRulesService) List(project string, region string) *ForwardingRulesListCall {
+	c := &ForwardingRulesListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.region = region
+	return c
+}
+
+// Filter sets the optional parameter "filter": Filter expression for
+// filtering listed resources.
+func (c *ForwardingRulesListCall) Filter(filter string) *ForwardingRulesListCall {
+	c.opt_["filter"] = filter
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": Maximum count of
+// results to be returned. Maximum value is 500 and default value is
+// 100.
+func (c *ForwardingRulesListCall) MaxResults(maxResults int64) *ForwardingRulesListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Tag returned by a
+// previous list request truncated by maxResults. Used to continue a
+// previous list request.
+func (c *ForwardingRulesListCall) PageToken(pageToken string) *ForwardingRulesListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *ForwardingRulesListCall) Do() (*ForwardingRuleList, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/regions/{region}/forwardingRules")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(ForwardingRuleList)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves the list of ForwardingRule resources available to the specified project and region.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.forwardingRules.list",
+	//   "parameterOrder": [
+	//     "project",
+	//     "region"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "Optional. Filter expression for filtering listed resources.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "default": "100",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "maximum": "500",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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"
+	//     },
+	//     "region": {
+	//       "description": "Name of the region scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/regions/{region}/forwardingRules",
+	//   "response": {
+	//     "$ref": "ForwardingRuleList"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.forwardingRules.setTarget":
+
+type ForwardingRulesSetTargetCall struct {
+	s               *Service
+	project         string
+	region          string
+	forwardingRule  string
+	targetreference *TargetReference
+	opt_            map[string]interface{}
+}
+
+// SetTarget: Changes target url for forwarding rule.
+func (r *ForwardingRulesService) SetTarget(project string, region string, forwardingRule string, targetreference *TargetReference) *ForwardingRulesSetTargetCall {
+	c := &ForwardingRulesSetTargetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.region = region
+	c.forwardingRule = forwardingRule
+	c.targetreference = targetreference
+	return c
+}
+
+func (c *ForwardingRulesSetTargetCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetreference)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/regions/{region}/forwardingRules/{forwardingRule}/setTarget")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{forwardingRule}", url.QueryEscape(c.forwardingRule), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Changes target url for forwarding rule.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.forwardingRules.setTarget",
+	//   "parameterOrder": [
+	//     "project",
+	//     "region",
+	//     "forwardingRule"
+	//   ],
+	//   "parameters": {
+	//     "forwardingRule": {
+	//       "description": "Name of the ForwardingRule resource in which target is to be set.",
+	//       "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"
+	//     },
+	//     "region": {
+	//       "description": "Name of the region scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/regions/{region}/forwardingRules/{forwardingRule}/setTarget",
+	//   "request": {
+	//     "$ref": "TargetReference"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.globalOperations.aggregatedList":
+
+type GlobalOperationsAggregatedListCall struct {
+	s       *Service
+	project string
+	opt_    map[string]interface{}
+}
+
+// AggregatedList: Retrieves the list of all operations grouped by
+// scope.
+func (r *GlobalOperationsService) AggregatedList(project string) *GlobalOperationsAggregatedListCall {
+	c := &GlobalOperationsAggregatedListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	return c
+}
+
+// Filter sets the optional parameter "filter": Filter expression for
+// filtering listed resources.
+func (c *GlobalOperationsAggregatedListCall) Filter(filter string) *GlobalOperationsAggregatedListCall {
+	c.opt_["filter"] = filter
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": Maximum count of
+// results to be returned. Maximum value is 500 and default value is
+// 100.
+func (c *GlobalOperationsAggregatedListCall) MaxResults(maxResults int64) *GlobalOperationsAggregatedListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Tag returned by a
+// previous list request truncated by maxResults. Used to continue a
+// previous list request.
+func (c *GlobalOperationsAggregatedListCall) PageToken(pageToken string) *GlobalOperationsAggregatedListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *GlobalOperationsAggregatedListCall) Do() (*OperationAggregatedList, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/aggregated/operations")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(OperationAggregatedList)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves the list of all operations grouped by scope.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.globalOperations.aggregatedList",
+	//   "parameterOrder": [
+	//     "project"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "Optional. Filter expression for filtering listed resources.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "default": "100",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "maximum": "500",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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}/aggregated/operations",
+	//   "response": {
+	//     "$ref": "OperationAggregatedList"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.globalOperations.delete":
+
+type GlobalOperationsDeleteCall struct {
+	s         *Service
+	project   string
+	operation string
+	opt_      map[string]interface{}
+}
+
+// Delete: Deletes the specified operation resource.
+func (r *GlobalOperationsService) Delete(project string, operation string) *GlobalOperationsDeleteCall {
+	c := &GlobalOperationsDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.operation = operation
+	return c
+}
+
+func (c *GlobalOperationsDeleteCall) Do() error {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/global/operations/{operation}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{operation}", url.QueryEscape(c.operation), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return err
+	}
+	return nil
+	// {
+	//   "description": "Deletes the specified operation resource.",
+	//   "httpMethod": "DELETE",
+	//   "id": "compute.globalOperations.delete",
+	//   "parameterOrder": [
+	//     "project",
+	//     "operation"
+	//   ],
+	//   "parameters": {
+	//     "operation": {
+	//       "description": "Name of the operation 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/operations/{operation}",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.globalOperations.get":
+
+type GlobalOperationsGetCall struct {
+	s         *Service
+	project   string
+	operation string
+	opt_      map[string]interface{}
+}
+
+// Get: Retrieves the specified operation resource.
+func (r *GlobalOperationsService) Get(project string, operation string) *GlobalOperationsGetCall {
+	c := &GlobalOperationsGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.operation = operation
+	return c
+}
+
+func (c *GlobalOperationsGetCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/global/operations/{operation}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{operation}", url.QueryEscape(c.operation), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves the specified operation resource.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.globalOperations.get",
+	//   "parameterOrder": [
+	//     "project",
+	//     "operation"
+	//   ],
+	//   "parameters": {
+	//     "operation": {
+	//       "description": "Name of the operation 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/operations/{operation}",
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.globalOperations.list":
+
+type GlobalOperationsListCall struct {
+	s       *Service
+	project string
+	opt_    map[string]interface{}
+}
+
+// List: Retrieves the list of operation resources contained within the
+// specified project.
+func (r *GlobalOperationsService) List(project string) *GlobalOperationsListCall {
+	c := &GlobalOperationsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	return c
+}
+
+// Filter sets the optional parameter "filter": Filter expression for
+// filtering listed resources.
+func (c *GlobalOperationsListCall) Filter(filter string) *GlobalOperationsListCall {
+	c.opt_["filter"] = filter
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": Maximum count of
+// results to be returned. Maximum value is 500 and default value is
+// 100.
+func (c *GlobalOperationsListCall) MaxResults(maxResults int64) *GlobalOperationsListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Tag returned by a
+// previous list request truncated by maxResults. Used to continue a
+// previous list request.
+func (c *GlobalOperationsListCall) PageToken(pageToken string) *GlobalOperationsListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *GlobalOperationsListCall) Do() (*OperationList, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/global/operations")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(OperationList)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves the list of operation resources contained within the specified project.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.globalOperations.list",
+	//   "parameterOrder": [
+	//     "project"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "Optional. Filter expression for filtering listed resources.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "default": "100",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "maximum": "500",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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/operations",
+	//   "response": {
+	//     "$ref": "OperationList"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.httpHealthChecks.delete":
+
+type HttpHealthChecksDeleteCall struct {
+	s               *Service
+	project         string
+	httpHealthCheck string
+	opt_            map[string]interface{}
+}
+
+// Delete: Deletes the specified HttpHealthCheck resource.
+func (r *HttpHealthChecksService) Delete(project string, httpHealthCheck string) *HttpHealthChecksDeleteCall {
+	c := &HttpHealthChecksDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.httpHealthCheck = httpHealthCheck
+	return c
+}
+
+func (c *HttpHealthChecksDeleteCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/global/httpHealthChecks/{httpHealthCheck}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{httpHealthCheck}", url.QueryEscape(c.httpHealthCheck), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Deletes the specified HttpHealthCheck resource.",
+	//   "httpMethod": "DELETE",
+	//   "id": "compute.httpHealthChecks.delete",
+	//   "parameterOrder": [
+	//     "project",
+	//     "httpHealthCheck"
+	//   ],
+	//   "parameters": {
+	//     "httpHealthCheck": {
+	//       "description": "Name of the HttpHealthCheck 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/httpHealthChecks/{httpHealthCheck}",
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.httpHealthChecks.get":
+
+type HttpHealthChecksGetCall struct {
+	s               *Service
+	project         string
+	httpHealthCheck string
+	opt_            map[string]interface{}
+}
+
+// Get: Returns the specified HttpHealthCheck resource.
+func (r *HttpHealthChecksService) Get(project string, httpHealthCheck string) *HttpHealthChecksGetCall {
+	c := &HttpHealthChecksGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.httpHealthCheck = httpHealthCheck
+	return c
+}
+
+func (c *HttpHealthChecksGetCall) Do() (*HttpHealthCheck, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/global/httpHealthChecks/{httpHealthCheck}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{httpHealthCheck}", url.QueryEscape(c.httpHealthCheck), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(HttpHealthCheck)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Returns the specified HttpHealthCheck resource.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.httpHealthChecks.get",
+	//   "parameterOrder": [
+	//     "project",
+	//     "httpHealthCheck"
+	//   ],
+	//   "parameters": {
+	//     "httpHealthCheck": {
+	//       "description": "Name of the HttpHealthCheck 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/httpHealthChecks/{httpHealthCheck}",
+	//   "response": {
+	//     "$ref": "HttpHealthCheck"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.httpHealthChecks.insert":
+
+type HttpHealthChecksInsertCall struct {
+	s               *Service
+	project         string
+	httphealthcheck *HttpHealthCheck
+	opt_            map[string]interface{}
+}
+
+// Insert: Creates a HttpHealthCheck resource in the specified project
+// using the data included in the request.
+func (r *HttpHealthChecksService) Insert(project string, httphealthcheck *HttpHealthCheck) *HttpHealthChecksInsertCall {
+	c := &HttpHealthChecksInsertCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.httphealthcheck = httphealthcheck
+	return c
+}
+
+func (c *HttpHealthChecksInsertCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.httphealthcheck)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/global/httpHealthChecks")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Creates a HttpHealthCheck resource in the specified project using the data included in the request.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.httpHealthChecks.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/httpHealthChecks",
+	//   "request": {
+	//     "$ref": "HttpHealthCheck"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.httpHealthChecks.list":
+
+type HttpHealthChecksListCall struct {
+	s       *Service
+	project string
+	opt_    map[string]interface{}
+}
+
+// List: Retrieves the list of HttpHealthCheck resources available to
+// the specified project.
+func (r *HttpHealthChecksService) List(project string) *HttpHealthChecksListCall {
+	c := &HttpHealthChecksListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	return c
+}
+
+// Filter sets the optional parameter "filter": Filter expression for
+// filtering listed resources.
+func (c *HttpHealthChecksListCall) Filter(filter string) *HttpHealthChecksListCall {
+	c.opt_["filter"] = filter
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": Maximum count of
+// results to be returned. Maximum value is 500 and default value is
+// 100.
+func (c *HttpHealthChecksListCall) MaxResults(maxResults int64) *HttpHealthChecksListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Tag returned by a
+// previous list request truncated by maxResults. Used to continue a
+// previous list request.
+func (c *HttpHealthChecksListCall) PageToken(pageToken string) *HttpHealthChecksListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *HttpHealthChecksListCall) Do() (*HttpHealthCheckList, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/global/httpHealthChecks")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(HttpHealthCheckList)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves the list of HttpHealthCheck resources available to the specified project.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.httpHealthChecks.list",
+	//   "parameterOrder": [
+	//     "project"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "Optional. Filter expression for filtering listed resources.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "default": "100",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "maximum": "500",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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/httpHealthChecks",
+	//   "response": {
+	//     "$ref": "HttpHealthCheckList"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.httpHealthChecks.patch":
+
+type HttpHealthChecksPatchCall struct {
+	s               *Service
+	project         string
+	httpHealthCheck string
+	httphealthcheck *HttpHealthCheck
+	opt_            map[string]interface{}
+}
+
+// Patch: Updates a HttpHealthCheck resource in the specified project
+// using the data included in the request. This method supports patch
+// semantics.
+func (r *HttpHealthChecksService) Patch(project string, httpHealthCheck string, httphealthcheck *HttpHealthCheck) *HttpHealthChecksPatchCall {
+	c := &HttpHealthChecksPatchCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.httpHealthCheck = httpHealthCheck
+	c.httphealthcheck = httphealthcheck
+	return c
+}
+
+func (c *HttpHealthChecksPatchCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.httphealthcheck)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/global/httpHealthChecks/{httpHealthCheck}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("PATCH", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{httpHealthCheck}", url.QueryEscape(c.httpHealthCheck), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates a HttpHealthCheck resource in the specified project using the data included in the request. This method supports patch semantics.",
+	//   "httpMethod": "PATCH",
+	//   "id": "compute.httpHealthChecks.patch",
+	//   "parameterOrder": [
+	//     "project",
+	//     "httpHealthCheck"
+	//   ],
+	//   "parameters": {
+	//     "httpHealthCheck": {
+	//       "description": "Name of the HttpHealthCheck 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/httpHealthChecks/{httpHealthCheck}",
+	//   "request": {
+	//     "$ref": "HttpHealthCheck"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.httpHealthChecks.update":
+
+type HttpHealthChecksUpdateCall struct {
+	s               *Service
+	project         string
+	httpHealthCheck string
+	httphealthcheck *HttpHealthCheck
+	opt_            map[string]interface{}
+}
+
+// Update: Updates a HttpHealthCheck resource in the specified project
+// using the data included in the request.
+func (r *HttpHealthChecksService) Update(project string, httpHealthCheck string, httphealthcheck *HttpHealthCheck) *HttpHealthChecksUpdateCall {
+	c := &HttpHealthChecksUpdateCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.httpHealthCheck = httpHealthCheck
+	c.httphealthcheck = httphealthcheck
+	return c
+}
+
+func (c *HttpHealthChecksUpdateCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.httphealthcheck)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/global/httpHealthChecks/{httpHealthCheck}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("PUT", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{httpHealthCheck}", url.QueryEscape(c.httpHealthCheck), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates a HttpHealthCheck resource in the specified project using the data included in the request.",
+	//   "httpMethod": "PUT",
+	//   "id": "compute.httpHealthChecks.update",
+	//   "parameterOrder": [
+	//     "project",
+	//     "httpHealthCheck"
+	//   ],
+	//   "parameters": {
+	//     "httpHealthCheck": {
+	//       "description": "Name of the HttpHealthCheck 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/httpHealthChecks/{httpHealthCheck}",
+	//   "request": {
+	//     "$ref": "HttpHealthCheck"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.images.delete":
+
+type ImagesDeleteCall struct {
+	s       *Service
+	project string
+	image   string
+	opt_    map[string]interface{}
+}
+
+// Delete: Deletes the specified image resource.
+func (r *ImagesService) Delete(project string, image string) *ImagesDeleteCall {
+	c := &ImagesDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.image = image
+	return c
+}
+
+func (c *ImagesDeleteCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/global/images/{image}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{image}", url.QueryEscape(c.image), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Deletes the specified image resource.",
+	//   "httpMethod": "DELETE",
+	//   "id": "compute.images.delete",
+	//   "parameterOrder": [
+	//     "project",
+	//     "image"
+	//   ],
+	//   "parameters": {
+	//     "image": {
+	//       "description": "Name of the image 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/images/{image}",
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.images.deprecate":
+
+type ImagesDeprecateCall struct {
+	s                 *Service
+	project           string
+	image             string
+	deprecationstatus *DeprecationStatus
+	opt_              map[string]interface{}
+}
+
+// Deprecate: Sets the deprecation status of an image. If no message
+// body is given, clears the deprecation status instead.
+func (r *ImagesService) Deprecate(project string, image string, deprecationstatus *DeprecationStatus) *ImagesDeprecateCall {
+	c := &ImagesDeprecateCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.image = image
+	c.deprecationstatus = deprecationstatus
+	return c
+}
+
+func (c *ImagesDeprecateCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.deprecationstatus)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/global/images/{image}/deprecate")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{image}", url.QueryEscape(c.image), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Sets the deprecation status of an image. If no message body is given, clears the deprecation status instead.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.images.deprecate",
+	//   "parameterOrder": [
+	//     "project",
+	//     "image"
+	//   ],
+	//   "parameters": {
+	//     "image": {
+	//       "description": "Image name.",
+	//       "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/images/{image}/deprecate",
+	//   "request": {
+	//     "$ref": "DeprecationStatus"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.images.get":
+
+type ImagesGetCall struct {
+	s       *Service
+	project string
+	image   string
+	opt_    map[string]interface{}
+}
+
+// Get: Returns the specified image resource.
+func (r *ImagesService) Get(project string, image string) *ImagesGetCall {
+	c := &ImagesGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.image = image
+	return c
+}
+
+func (c *ImagesGetCall) Do() (*Image, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/global/images/{image}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{image}", url.QueryEscape(c.image), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Image)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Returns the specified image resource.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.images.get",
+	//   "parameterOrder": [
+	//     "project",
+	//     "image"
+	//   ],
+	//   "parameters": {
+	//     "image": {
+	//       "description": "Name of the image 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/images/{image}",
+	//   "response": {
+	//     "$ref": "Image"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.images.insert":
+
+type ImagesInsertCall struct {
+	s       *Service
+	project string
+	image   *Image
+	opt_    map[string]interface{}
+}
+
+// Insert: Creates an image resource in the specified project using the
+// data included in the request.
+func (r *ImagesService) Insert(project string, image *Image) *ImagesInsertCall {
+	c := &ImagesInsertCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.image = image
+	return c
+}
+
+func (c *ImagesInsertCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.image)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/global/images")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Creates an image resource in the specified project using the data included in the request.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.images.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/images",
+	//   "request": {
+	//     "$ref": "Image"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/devstorage.full_control",
+	//     "https://www.googleapis.com/auth/devstorage.read_only",
+	//     "https://www.googleapis.com/auth/devstorage.read_write"
+	//   ]
+	// }
+
+}
+
+// method id "compute.images.list":
+
+type ImagesListCall struct {
+	s       *Service
+	project string
+	opt_    map[string]interface{}
+}
+
+// List: Retrieves the list of image resources available to the
+// specified project.
+func (r *ImagesService) List(project string) *ImagesListCall {
+	c := &ImagesListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	return c
+}
+
+// Filter sets the optional parameter "filter": Filter expression for
+// filtering listed resources.
+func (c *ImagesListCall) Filter(filter string) *ImagesListCall {
+	c.opt_["filter"] = filter
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": Maximum count of
+// results to be returned. Maximum value is 500 and default value is
+// 100.
+func (c *ImagesListCall) MaxResults(maxResults int64) *ImagesListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Tag returned by a
+// previous list request truncated by maxResults. Used to continue a
+// previous list request.
+func (c *ImagesListCall) PageToken(pageToken string) *ImagesListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *ImagesListCall) Do() (*ImageList, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/global/images")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(ImageList)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves the list of image resources available to the specified project.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.images.list",
+	//   "parameterOrder": [
+	//     "project"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "Optional. Filter expression for filtering listed resources.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "default": "100",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "maximum": "500",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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/images",
+	//   "response": {
+	//     "$ref": "ImageList"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.instances.addAccessConfig":
+
+type InstancesAddAccessConfigCall struct {
+	s                *Service
+	project          string
+	zone             string
+	instance         string
+	networkInterface string
+	accessconfig     *AccessConfig
+	opt_             map[string]interface{}
+}
+
+// AddAccessConfig: Adds an access config to an instance's network
+// interface.
+func (r *InstancesService) AddAccessConfig(project string, zone string, instance string, networkInterface string, accessconfig *AccessConfig) *InstancesAddAccessConfigCall {
+	c := &InstancesAddAccessConfigCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.zone = zone
+	c.instance = instance
+	c.networkInterface = networkInterface
+	c.accessconfig = accessconfig
+	return c
+}
+
+func (c *InstancesAddAccessConfigCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.accessconfig)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	params.Set("networkInterface", fmt.Sprintf("%v", c.networkInterface))
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/zones/{zone}/instances/{instance}/addAccessConfig")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Adds an access config to an instance's network interface.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.instances.addAccessConfig",
+	//   "parameterOrder": [
+	//     "project",
+	//     "zone",
+	//     "instance",
+	//     "networkInterface"
+	//   ],
+	//   "parameters": {
+	//     "instance": {
+	//       "description": "Instance name.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "networkInterface": {
+	//       "description": "Network interface name.",
+	//       "location": "query",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "project": {
+	//       "description": "Project name.",
+	//       "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": "Name of the zone scoping 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}/addAccessConfig",
+	//   "request": {
+	//     "$ref": "AccessConfig"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.instances.aggregatedList":
+
+type InstancesAggregatedListCall struct {
+	s       *Service
+	project string
+	opt_    map[string]interface{}
+}
+
+// AggregatedList:
+func (r *InstancesService) AggregatedList(project string) *InstancesAggregatedListCall {
+	c := &InstancesAggregatedListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	return c
+}
+
+// Filter sets the optional parameter "filter": Filter expression for
+// filtering listed resources.
+func (c *InstancesAggregatedListCall) Filter(filter string) *InstancesAggregatedListCall {
+	c.opt_["filter"] = filter
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": Maximum count of
+// results to be returned. Maximum value is 500 and default value is
+// 100.
+func (c *InstancesAggregatedListCall) MaxResults(maxResults int64) *InstancesAggregatedListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Tag returned by a
+// previous list request truncated by maxResults. Used to continue a
+// previous list request.
+func (c *InstancesAggregatedListCall) PageToken(pageToken string) *InstancesAggregatedListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *InstancesAggregatedListCall) Do() (*InstanceAggregatedList, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/aggregated/instances")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(InstanceAggregatedList)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "httpMethod": "GET",
+	//   "id": "compute.instances.aggregatedList",
+	//   "parameterOrder": [
+	//     "project"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "Optional. Filter expression for filtering listed resources.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "default": "100",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "maximum": "500",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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}/aggregated/instances",
+	//   "response": {
+	//     "$ref": "InstanceAggregatedList"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.instances.attachDisk":
+
+type InstancesAttachDiskCall struct {
+	s            *Service
+	project      string
+	zone         string
+	instance     string
+	attacheddisk *AttachedDisk
+	opt_         map[string]interface{}
+}
+
+// AttachDisk: Attaches a disk resource to an instance.
+func (r *InstancesService) AttachDisk(project string, zone string, instance string, attacheddisk *AttachedDisk) *InstancesAttachDiskCall {
+	c := &InstancesAttachDiskCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.zone = zone
+	c.instance = instance
+	c.attacheddisk = attacheddisk
+	return c
+}
+
+func (c *InstancesAttachDiskCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.attacheddisk)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/zones/{zone}/instances/{instance}/attachDisk")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Attaches a disk resource to an instance.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.instances.attachDisk",
+	//   "parameterOrder": [
+	//     "project",
+	//     "zone",
+	//     "instance"
+	//   ],
+	//   "parameters": {
+	//     "instance": {
+	//       "description": "Instance name.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "project": {
+	//       "description": "Project name.",
+	//       "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": "Name of the zone scoping 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}/attachDisk",
+	//   "request": {
+	//     "$ref": "AttachedDisk"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.instances.delete":
+
+type InstancesDeleteCall struct {
+	s        *Service
+	project  string
+	zone     string
+	instance string
+	opt_     map[string]interface{}
+}
+
+// Delete: Deletes the specified instance resource.
+func (r *InstancesService) Delete(project string, zone string, instance string) *InstancesDeleteCall {
+	c := &InstancesDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.zone = zone
+	c.instance = instance
+	return c
+}
+
+func (c *InstancesDeleteCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/zones/{zone}/instances/{instance}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Deletes the specified instance resource.",
+	//   "httpMethod": "DELETE",
+	//   "id": "compute.instances.delete",
+	//   "parameterOrder": [
+	//     "project",
+	//     "zone",
+	//     "instance"
+	//   ],
+	//   "parameters": {
+	//     "instance": {
+	//       "description": "Name of the instance 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"
+	//     },
+	//     "zone": {
+	//       "description": "Name of the zone scoping 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}",
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.instances.deleteAccessConfig":
+
+type InstancesDeleteAccessConfigCall struct {
+	s                *Service
+	project          string
+	zone             string
+	instance         string
+	accessConfig     string
+	networkInterface string
+	opt_             map[string]interface{}
+}
+
+// DeleteAccessConfig: Deletes an access config from an instance's
+// network interface.
+func (r *InstancesService) DeleteAccessConfig(project string, zone string, instance string, accessConfig string, networkInterface string) *InstancesDeleteAccessConfigCall {
+	c := &InstancesDeleteAccessConfigCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.zone = zone
+	c.instance = instance
+	c.accessConfig = accessConfig
+	c.networkInterface = networkInterface
+	return c
+}
+
+func (c *InstancesDeleteAccessConfigCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	params.Set("accessConfig", fmt.Sprintf("%v", c.accessConfig))
+	params.Set("networkInterface", fmt.Sprintf("%v", c.networkInterface))
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/zones/{zone}/instances/{instance}/deleteAccessConfig")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Deletes an access config from an instance's network interface.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.instances.deleteAccessConfig",
+	//   "parameterOrder": [
+	//     "project",
+	//     "zone",
+	//     "instance",
+	//     "accessConfig",
+	//     "networkInterface"
+	//   ],
+	//   "parameters": {
+	//     "accessConfig": {
+	//       "description": "Access config name.",
+	//       "location": "query",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "instance": {
+	//       "description": "Instance name.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "networkInterface": {
+	//       "description": "Network interface name.",
+	//       "location": "query",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "project": {
+	//       "description": "Project name.",
+	//       "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": "Name of the zone scoping 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}/deleteAccessConfig",
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.instances.detachDisk":
+
+type InstancesDetachDiskCall struct {
+	s          *Service
+	project    string
+	zone       string
+	instance   string
+	deviceName string
+	opt_       map[string]interface{}
+}
+
+// DetachDisk: Detaches a disk from an instance.
+func (r *InstancesService) DetachDisk(project string, zone string, instance string, deviceName string) *InstancesDetachDiskCall {
+	c := &InstancesDetachDiskCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.zone = zone
+	c.instance = instance
+	c.deviceName = deviceName
+	return c
+}
+
+func (c *InstancesDetachDiskCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	params.Set("deviceName", fmt.Sprintf("%v", c.deviceName))
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/zones/{zone}/instances/{instance}/detachDisk")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Detaches a disk from an instance.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.instances.detachDisk",
+	//   "parameterOrder": [
+	//     "project",
+	//     "zone",
+	//     "instance",
+	//     "deviceName"
+	//   ],
+	//   "parameters": {
+	//     "deviceName": {
+	//       "description": "Disk device name to detach.",
+	//       "location": "query",
+	//       "pattern": "\\w[\\w.-]{0,254}",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "instance": {
+	//       "description": "Instance name.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "project": {
+	//       "description": "Project name.",
+	//       "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": "Name of the zone scoping 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}/detachDisk",
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.instances.get":
+
+type InstancesGetCall struct {
+	s        *Service
+	project  string
+	zone     string
+	instance string
+	opt_     map[string]interface{}
+}
+
+// Get: Returns the specified instance resource.
+func (r *InstancesService) Get(project string, zone string, instance string) *InstancesGetCall {
+	c := &InstancesGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.zone = zone
+	c.instance = instance
+	return c
+}
+
+func (c *InstancesGetCall) Do() (*Instance, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/zones/{zone}/instances/{instance}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Instance)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Returns the specified instance resource.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.instances.get",
+	//   "parameterOrder": [
+	//     "project",
+	//     "zone",
+	//     "instance"
+	//   ],
+	//   "parameters": {
+	//     "instance": {
+	//       "description": "Name of the instance 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"
+	//     },
+	//     "zone": {
+	//       "description": "Name of the zone scoping 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}",
+	//   "response": {
+	//     "$ref": "Instance"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.instances.getSerialPortOutput":
+
+type InstancesGetSerialPortOutputCall struct {
+	s        *Service
+	project  string
+	zone     string
+	instance string
+	opt_     map[string]interface{}
+}
+
+// GetSerialPortOutput: Returns the specified instance's serial port
+// output.
+func (r *InstancesService) GetSerialPortOutput(project string, zone string, instance string) *InstancesGetSerialPortOutputCall {
+	c := &InstancesGetSerialPortOutputCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.zone = zone
+	c.instance = instance
+	return c
+}
+
+func (c *InstancesGetSerialPortOutputCall) Do() (*SerialPortOutput, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/zones/{zone}/instances/{instance}/serialPort")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(SerialPortOutput)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Returns the specified instance's serial port output.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.instances.getSerialPortOutput",
+	//   "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": "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"
+	//     },
+	//     "zone": {
+	//       "description": "Name of the zone scoping 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}/serialPort",
+	//   "response": {
+	//     "$ref": "SerialPortOutput"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.instances.insert":
+
+type InstancesInsertCall struct {
+	s        *Service
+	project  string
+	zone     string
+	instance *Instance
+	opt_     map[string]interface{}
+}
+
+// Insert: Creates an instance resource in the specified project using
+// the data included in the request.
+func (r *InstancesService) Insert(project string, zone string, instance *Instance) *InstancesInsertCall {
+	c := &InstancesInsertCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.zone = zone
+	c.instance = instance
+	return c
+}
+
+func (c *InstancesInsertCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instance)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/zones/{zone}/instances")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Creates an instance resource in the specified project using the data included in the request.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.instances.insert",
+	//   "parameterOrder": [
+	//     "project",
+	//     "zone"
+	//   ],
+	//   "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"
+	//     },
+	//     "zone": {
+	//       "description": "Name of the zone scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/zones/{zone}/instances",
+	//   "request": {
+	//     "$ref": "Instance"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.instances.list":
+
+type InstancesListCall struct {
+	s       *Service
+	project string
+	zone    string
+	opt_    map[string]interface{}
+}
+
+// List: Retrieves the list of instance resources contained within the
+// specified zone.
+func (r *InstancesService) List(project string, zone string) *InstancesListCall {
+	c := &InstancesListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.zone = zone
+	return c
+}
+
+// Filter sets the optional parameter "filter": Filter expression for
+// filtering listed resources.
+func (c *InstancesListCall) Filter(filter string) *InstancesListCall {
+	c.opt_["filter"] = filter
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": Maximum count of
+// results to be returned. Maximum value is 500 and default value is
+// 100.
+func (c *InstancesListCall) MaxResults(maxResults int64) *InstancesListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Tag returned by a
+// previous list request truncated by maxResults. Used to continue a
+// previous list request.
+func (c *InstancesListCall) PageToken(pageToken string) *InstancesListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *InstancesListCall) Do() (*InstanceList, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/zones/{zone}/instances")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(InstanceList)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves the list of instance resources contained within the specified zone.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.instances.list",
+	//   "parameterOrder": [
+	//     "project",
+	//     "zone"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "Optional. Filter expression for filtering listed resources.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "default": "100",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "maximum": "500",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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"
+	//     },
+	//     "zone": {
+	//       "description": "Name of the zone scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/zones/{zone}/instances",
+	//   "response": {
+	//     "$ref": "InstanceList"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.instances.reset":
+
+type InstancesResetCall struct {
+	s        *Service
+	project  string
+	zone     string
+	instance string
+	opt_     map[string]interface{}
+}
+
+// Reset: Performs a hard reset on the instance.
+func (r *InstancesService) Reset(project string, zone string, instance string) *InstancesResetCall {
+	c := &InstancesResetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.zone = zone
+	c.instance = instance
+	return c
+}
+
+func (c *InstancesResetCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/zones/{zone}/instances/{instance}/reset")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Performs a hard reset on the instance.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.instances.reset",
+	//   "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": "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"
+	//     },
+	//     "zone": {
+	//       "description": "Name of the zone scoping 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}/reset",
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.instances.setMetadata":
+
+type InstancesSetMetadataCall struct {
+	s        *Service
+	project  string
+	zone     string
+	instance string
+	metadata *Metadata
+	opt_     map[string]interface{}
+}
+
+// SetMetadata: Sets metadata for the specified instance to the data
+// included in the request.
+func (r *InstancesService) SetMetadata(project string, zone string, instance string, metadata *Metadata) *InstancesSetMetadataCall {
+	c := &InstancesSetMetadataCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.zone = zone
+	c.instance = instance
+	c.metadata = metadata
+	return c
+}
+
+func (c *InstancesSetMetadataCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.metadata)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/zones/{zone}/instances/{instance}/setMetadata")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Sets metadata for the specified instance to the data included in the request.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.instances.setMetadata",
+	//   "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": "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"
+	//     },
+	//     "zone": {
+	//       "description": "Name of the zone scoping 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}/setMetadata",
+	//   "request": {
+	//     "$ref": "Metadata"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.instances.setScheduling":
+
+type InstancesSetSchedulingCall struct {
+	s          *Service
+	project    string
+	zone       string
+	instance   string
+	scheduling *Scheduling
+	opt_       map[string]interface{}
+}
+
+// SetScheduling: Sets an instance's scheduling options.
+func (r *InstancesService) SetScheduling(project string, zone string, instance string, scheduling *Scheduling) *InstancesSetSchedulingCall {
+	c := &InstancesSetSchedulingCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.zone = zone
+	c.instance = instance
+	c.scheduling = scheduling
+	return c
+}
+
+func (c *InstancesSetSchedulingCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.scheduling)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/zones/{zone}/instances/{instance}/setScheduling")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Sets an instance's scheduling options.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.instances.setScheduling",
+	//   "parameterOrder": [
+	//     "project",
+	//     "zone",
+	//     "instance"
+	//   ],
+	//   "parameters": {
+	//     "instance": {
+	//       "description": "Instance name.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "project": {
+	//       "description": "Project name.",
+	//       "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": "Name of the zone scoping 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}/setScheduling",
+	//   "request": {
+	//     "$ref": "Scheduling"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.instances.setTags":
+
+type InstancesSetTagsCall struct {
+	s        *Service
+	project  string
+	zone     string
+	instance string
+	tags     *Tags
+	opt_     map[string]interface{}
+}
+
+// SetTags: Sets tags for the specified instance to the data included in
+// the request.
+func (r *InstancesService) SetTags(project string, zone string, instance string, tags *Tags) *InstancesSetTagsCall {
+	c := &InstancesSetTagsCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.zone = zone
+	c.instance = instance
+	c.tags = tags
+	return c
+}
+
+func (c *InstancesSetTagsCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.tags)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/zones/{zone}/instances/{instance}/setTags")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Sets tags for the specified instance to the data included in the request.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.instances.setTags",
+	//   "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": "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"
+	//     },
+	//     "zone": {
+	//       "description": "Name of the zone scoping 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}/setTags",
+	//   "request": {
+	//     "$ref": "Tags"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.machineTypes.aggregatedList":
+
+type MachineTypesAggregatedListCall struct {
+	s       *Service
+	project string
+	opt_    map[string]interface{}
+}
+
+// AggregatedList: Retrieves the list of machine type resources grouped
+// by scope.
+func (r *MachineTypesService) AggregatedList(project string) *MachineTypesAggregatedListCall {
+	c := &MachineTypesAggregatedListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	return c
+}
+
+// Filter sets the optional parameter "filter": Filter expression for
+// filtering listed resources.
+func (c *MachineTypesAggregatedListCall) Filter(filter string) *MachineTypesAggregatedListCall {
+	c.opt_["filter"] = filter
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": Maximum count of
+// results to be returned. Maximum value is 500 and default value is
+// 100.
+func (c *MachineTypesAggregatedListCall) MaxResults(maxResults int64) *MachineTypesAggregatedListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Tag returned by a
+// previous list request truncated by maxResults. Used to continue a
+// previous list request.
+func (c *MachineTypesAggregatedListCall) PageToken(pageToken string) *MachineTypesAggregatedListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *MachineTypesAggregatedListCall) Do() (*MachineTypeAggregatedList, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/aggregated/machineTypes")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(MachineTypeAggregatedList)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves the list of machine type resources grouped by scope.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.machineTypes.aggregatedList",
+	//   "parameterOrder": [
+	//     "project"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "Optional. Filter expression for filtering listed resources.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "default": "100",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "maximum": "500",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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}/aggregated/machineTypes",
+	//   "response": {
+	//     "$ref": "MachineTypeAggregatedList"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.machineTypes.get":
+
+type MachineTypesGetCall struct {
+	s           *Service
+	project     string
+	zone        string
+	machineType string
+	opt_        map[string]interface{}
+}
+
+// Get: Returns the specified machine type resource.
+func (r *MachineTypesService) Get(project string, zone string, machineType string) *MachineTypesGetCall {
+	c := &MachineTypesGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.zone = zone
+	c.machineType = machineType
+	return c
+}
+
+func (c *MachineTypesGetCall) Do() (*MachineType, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/zones/{zone}/machineTypes/{machineType}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{machineType}", url.QueryEscape(c.machineType), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(MachineType)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Returns the specified machine type resource.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.machineTypes.get",
+	//   "parameterOrder": [
+	//     "project",
+	//     "zone",
+	//     "machineType"
+	//   ],
+	//   "parameters": {
+	//     "machineType": {
+	//       "description": "Name of the machine type 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"
+	//     },
+	//     "zone": {
+	//       "description": "Name of the zone scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/zones/{zone}/machineTypes/{machineType}",
+	//   "response": {
+	//     "$ref": "MachineType"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.machineTypes.list":
+
+type MachineTypesListCall struct {
+	s       *Service
+	project string
+	zone    string
+	opt_    map[string]interface{}
+}
+
+// List: Retrieves the list of machine type resources available to the
+// specified project.
+func (r *MachineTypesService) List(project string, zone string) *MachineTypesListCall {
+	c := &MachineTypesListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.zone = zone
+	return c
+}
+
+// Filter sets the optional parameter "filter": Filter expression for
+// filtering listed resources.
+func (c *MachineTypesListCall) Filter(filter string) *MachineTypesListCall {
+	c.opt_["filter"] = filter
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": Maximum count of
+// results to be returned. Maximum value is 500 and default value is
+// 100.
+func (c *MachineTypesListCall) MaxResults(maxResults int64) *MachineTypesListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Tag returned by a
+// previous list request truncated by maxResults. Used to continue a
+// previous list request.
+func (c *MachineTypesListCall) PageToken(pageToken string) *MachineTypesListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *MachineTypesListCall) Do() (*MachineTypeList, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/zones/{zone}/machineTypes")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(MachineTypeList)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves the list of machine type resources available to the specified project.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.machineTypes.list",
+	//   "parameterOrder": [
+	//     "project",
+	//     "zone"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "Optional. Filter expression for filtering listed resources.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "default": "100",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "maximum": "500",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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"
+	//     },
+	//     "zone": {
+	//       "description": "Name of the zone scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/zones/{zone}/machineTypes",
+	//   "response": {
+	//     "$ref": "MachineTypeList"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.networks.delete":
+
+type NetworksDeleteCall struct {
+	s       *Service
+	project string
+	network string
+	opt_    map[string]interface{}
+}
+
+// Delete: Deletes the specified network resource.
+func (r *NetworksService) Delete(project string, network string) *NetworksDeleteCall {
+	c := &NetworksDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.network = network
+	return c
+}
+
+func (c *NetworksDeleteCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/global/networks/{network}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{network}", url.QueryEscape(c.network), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Deletes the specified network resource.",
+	//   "httpMethod": "DELETE",
+	//   "id": "compute.networks.delete",
+	//   "parameterOrder": [
+	//     "project",
+	//     "network"
+	//   ],
+	//   "parameters": {
+	//     "network": {
+	//       "description": "Name of the network 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/networks/{network}",
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.networks.get":
+
+type NetworksGetCall struct {
+	s       *Service
+	project string
+	network string
+	opt_    map[string]interface{}
+}
+
+// Get: Returns the specified network resource.
+func (r *NetworksService) Get(project string, network string) *NetworksGetCall {
+	c := &NetworksGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.network = network
+	return c
+}
+
+func (c *NetworksGetCall) Do() (*Network, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/global/networks/{network}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{network}", url.QueryEscape(c.network), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Network)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Returns the specified network resource.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.networks.get",
+	//   "parameterOrder": [
+	//     "project",
+	//     "network"
+	//   ],
+	//   "parameters": {
+	//     "network": {
+	//       "description": "Name of the network 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/networks/{network}",
+	//   "response": {
+	//     "$ref": "Network"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.networks.insert":
+
+type NetworksInsertCall struct {
+	s       *Service
+	project string
+	network *Network
+	opt_    map[string]interface{}
+}
+
+// Insert: Creates a network resource in the specified project using the
+// data included in the request.
+func (r *NetworksService) Insert(project string, network *Network) *NetworksInsertCall {
+	c := &NetworksInsertCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.network = network
+	return c
+}
+
+func (c *NetworksInsertCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.network)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/global/networks")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Creates a network resource in the specified project using the data included in the request.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.networks.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/networks",
+	//   "request": {
+	//     "$ref": "Network"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.networks.list":
+
+type NetworksListCall struct {
+	s       *Service
+	project string
+	opt_    map[string]interface{}
+}
+
+// List: Retrieves the list of network resources available to the
+// specified project.
+func (r *NetworksService) List(project string) *NetworksListCall {
+	c := &NetworksListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	return c
+}
+
+// Filter sets the optional parameter "filter": Filter expression for
+// filtering listed resources.
+func (c *NetworksListCall) Filter(filter string) *NetworksListCall {
+	c.opt_["filter"] = filter
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": Maximum count of
+// results to be returned. Maximum value is 500 and default value is
+// 100.
+func (c *NetworksListCall) MaxResults(maxResults int64) *NetworksListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Tag returned by a
+// previous list request truncated by maxResults. Used to continue a
+// previous list request.
+func (c *NetworksListCall) PageToken(pageToken string) *NetworksListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *NetworksListCall) Do() (*NetworkList, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/global/networks")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(NetworkList)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves the list of network resources available to the specified project.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.networks.list",
+	//   "parameterOrder": [
+	//     "project"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "Optional. Filter expression for filtering listed resources.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "default": "100",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "maximum": "500",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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/networks",
+	//   "response": {
+	//     "$ref": "NetworkList"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.projects.get":
+
+type ProjectsGetCall struct {
+	s       *Service
+	project string
+	opt_    map[string]interface{}
+}
+
+// Get: Returns the specified project resource.
+func (r *ProjectsService) Get(project string) *ProjectsGetCall {
+	c := &ProjectsGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	return c
+}
+
+func (c *ProjectsGetCall) Do() (*Project, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Project)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Returns the specified project resource.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.projects.get",
+	//   "parameterOrder": [
+	//     "project"
+	//   ],
+	//   "parameters": {
+	//     "project": {
+	//       "description": "Name of the project resource to retrieve.",
+	//       "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}",
+	//   "response": {
+	//     "$ref": "Project"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.projects.setCommonInstanceMetadata":
+
+type ProjectsSetCommonInstanceMetadataCall struct {
+	s        *Service
+	project  string
+	metadata *Metadata
+	opt_     map[string]interface{}
+}
+
+// SetCommonInstanceMetadata: Sets metadata common to all instances
+// within the specified project using the data included in the request.
+func (r *ProjectsService) SetCommonInstanceMetadata(project string, metadata *Metadata) *ProjectsSetCommonInstanceMetadataCall {
+	c := &ProjectsSetCommonInstanceMetadataCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.metadata = metadata
+	return c
+}
+
+func (c *ProjectsSetCommonInstanceMetadataCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.metadata)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/setCommonInstanceMetadata")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Sets metadata common to all instances within the specified project using the data included in the request.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.projects.setCommonInstanceMetadata",
+	//   "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}/setCommonInstanceMetadata",
+	//   "request": {
+	//     "$ref": "Metadata"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.regionOperations.delete":
+
+type RegionOperationsDeleteCall struct {
+	s         *Service
+	project   string
+	region    string
+	operation string
+	opt_      map[string]interface{}
+}
+
+// Delete: Deletes the specified region-specific operation resource.
+func (r *RegionOperationsService) Delete(project string, region string, operation string) *RegionOperationsDeleteCall {
+	c := &RegionOperationsDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.region = region
+	c.operation = operation
+	return c
+}
+
+func (c *RegionOperationsDeleteCall) Do() error {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/regions/{region}/operations/{operation}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{operation}", url.QueryEscape(c.operation), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return err
+	}
+	return nil
+	// {
+	//   "description": "Deletes the specified region-specific operation resource.",
+	//   "httpMethod": "DELETE",
+	//   "id": "compute.regionOperations.delete",
+	//   "parameterOrder": [
+	//     "project",
+	//     "region",
+	//     "operation"
+	//   ],
+	//   "parameters": {
+	//     "operation": {
+	//       "description": "Name of the operation 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"
+	//     },
+	//     "region": {
+	//       "description": "Name of the region scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/regions/{region}/operations/{operation}",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.regionOperations.get":
+
+type RegionOperationsGetCall struct {
+	s         *Service
+	project   string
+	region    string
+	operation string
+	opt_      map[string]interface{}
+}
+
+// Get: Retrieves the specified region-specific operation resource.
+func (r *RegionOperationsService) Get(project string, region string, operation string) *RegionOperationsGetCall {
+	c := &RegionOperationsGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.region = region
+	c.operation = operation
+	return c
+}
+
+func (c *RegionOperationsGetCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/regions/{region}/operations/{operation}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{operation}", url.QueryEscape(c.operation), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves the specified region-specific operation resource.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.regionOperations.get",
+	//   "parameterOrder": [
+	//     "project",
+	//     "region",
+	//     "operation"
+	//   ],
+	//   "parameters": {
+	//     "operation": {
+	//       "description": "Name of the operation 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"
+	//     },
+	//     "region": {
+	//       "description": "Name of the zone scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/regions/{region}/operations/{operation}",
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.regionOperations.list":
+
+type RegionOperationsListCall struct {
+	s       *Service
+	project string
+	region  string
+	opt_    map[string]interface{}
+}
+
+// List: Retrieves the list of operation resources contained within the
+// specified region.
+func (r *RegionOperationsService) List(project string, region string) *RegionOperationsListCall {
+	c := &RegionOperationsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.region = region
+	return c
+}
+
+// Filter sets the optional parameter "filter": Filter expression for
+// filtering listed resources.
+func (c *RegionOperationsListCall) Filter(filter string) *RegionOperationsListCall {
+	c.opt_["filter"] = filter
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": Maximum count of
+// results to be returned. Maximum value is 500 and default value is
+// 100.
+func (c *RegionOperationsListCall) MaxResults(maxResults int64) *RegionOperationsListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Tag returned by a
+// previous list request truncated by maxResults. Used to continue a
+// previous list request.
+func (c *RegionOperationsListCall) PageToken(pageToken string) *RegionOperationsListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *RegionOperationsListCall) Do() (*OperationList, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/regions/{region}/operations")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(OperationList)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves the list of operation resources contained within the specified region.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.regionOperations.list",
+	//   "parameterOrder": [
+	//     "project",
+	//     "region"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "Optional. Filter expression for filtering listed resources.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "default": "100",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "maximum": "500",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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"
+	//     },
+	//     "region": {
+	//       "description": "Name of the region scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/regions/{region}/operations",
+	//   "response": {
+	//     "$ref": "OperationList"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.regions.get":
+
+type RegionsGetCall struct {
+	s       *Service
+	project string
+	region  string
+	opt_    map[string]interface{}
+}
+
+// Get: Returns the specified region resource.
+func (r *RegionsService) Get(project string, region string) *RegionsGetCall {
+	c := &RegionsGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.region = region
+	return c
+}
+
+func (c *RegionsGetCall) Do() (*Region, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/regions/{region}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Region)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Returns the specified region resource.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.regions.get",
+	//   "parameterOrder": [
+	//     "project",
+	//     "region"
+	//   ],
+	//   "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"
+	//     },
+	//     "region": {
+	//       "description": "Name of the region resource to return.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/regions/{region}",
+	//   "response": {
+	//     "$ref": "Region"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.regions.list":
+
+type RegionsListCall struct {
+	s       *Service
+	project string
+	opt_    map[string]interface{}
+}
+
+// List: Retrieves the list of region resources available to the
+// specified project.
+func (r *RegionsService) List(project string) *RegionsListCall {
+	c := &RegionsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	return c
+}
+
+// Filter sets the optional parameter "filter": Filter expression for
+// filtering listed resources.
+func (c *RegionsListCall) Filter(filter string) *RegionsListCall {
+	c.opt_["filter"] = filter
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": Maximum count of
+// results to be returned. Maximum value is 500 and default value is
+// 100.
+func (c *RegionsListCall) MaxResults(maxResults int64) *RegionsListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Tag returned by a
+// previous list request truncated by maxResults. Used to continue a
+// previous list request.
+func (c *RegionsListCall) PageToken(pageToken string) *RegionsListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *RegionsListCall) Do() (*RegionList, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/regions")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(RegionList)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves the list of region resources available to the specified project.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.regions.list",
+	//   "parameterOrder": [
+	//     "project"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "Optional. Filter expression for filtering listed resources.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "default": "100",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "maximum": "500",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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}/regions",
+	//   "response": {
+	//     "$ref": "RegionList"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.routes.delete":
+
+type RoutesDeleteCall struct {
+	s       *Service
+	project string
+	route   string
+	opt_    map[string]interface{}
+}
+
+// Delete: Deletes the specified route resource.
+func (r *RoutesService) Delete(project string, route string) *RoutesDeleteCall {
+	c := &RoutesDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.route = route
+	return c
+}
+
+func (c *RoutesDeleteCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/global/routes/{route}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{route}", url.QueryEscape(c.route), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Deletes the specified route resource.",
+	//   "httpMethod": "DELETE",
+	//   "id": "compute.routes.delete",
+	//   "parameterOrder": [
+	//     "project",
+	//     "route"
+	//   ],
+	//   "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"
+	//     },
+	//     "route": {
+	//       "description": "Name of the route resource to delete.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/global/routes/{route}",
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.routes.get":
+
+type RoutesGetCall struct {
+	s       *Service
+	project string
+	route   string
+	opt_    map[string]interface{}
+}
+
+// Get: Returns the specified route resource.
+func (r *RoutesService) Get(project string, route string) *RoutesGetCall {
+	c := &RoutesGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.route = route
+	return c
+}
+
+func (c *RoutesGetCall) Do() (*Route, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/global/routes/{route}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{route}", url.QueryEscape(c.route), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Route)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Returns the specified route resource.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.routes.get",
+	//   "parameterOrder": [
+	//     "project",
+	//     "route"
+	//   ],
+	//   "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"
+	//     },
+	//     "route": {
+	//       "description": "Name of the route resource to return.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/global/routes/{route}",
+	//   "response": {
+	//     "$ref": "Route"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.routes.insert":
+
+type RoutesInsertCall struct {
+	s       *Service
+	project string
+	route   *Route
+	opt_    map[string]interface{}
+}
+
+// Insert: Creates a route resource in the specified project using the
+// data included in the request.
+func (r *RoutesService) Insert(project string, route *Route) *RoutesInsertCall {
+	c := &RoutesInsertCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.route = route
+	return c
+}
+
+func (c *RoutesInsertCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.route)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/global/routes")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Creates a route resource in the specified project using the data included in the request.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.routes.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/routes",
+	//   "request": {
+	//     "$ref": "Route"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.routes.list":
+
+type RoutesListCall struct {
+	s       *Service
+	project string
+	opt_    map[string]interface{}
+}
+
+// List: Retrieves the list of route resources available to the
+// specified project.
+func (r *RoutesService) List(project string) *RoutesListCall {
+	c := &RoutesListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	return c
+}
+
+// Filter sets the optional parameter "filter": Filter expression for
+// filtering listed resources.
+func (c *RoutesListCall) Filter(filter string) *RoutesListCall {
+	c.opt_["filter"] = filter
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": Maximum count of
+// results to be returned. Maximum value is 500 and default value is
+// 100.
+func (c *RoutesListCall) MaxResults(maxResults int64) *RoutesListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Tag returned by a
+// previous list request truncated by maxResults. Used to continue a
+// previous list request.
+func (c *RoutesListCall) PageToken(pageToken string) *RoutesListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *RoutesListCall) Do() (*RouteList, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/global/routes")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(RouteList)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves the list of route resources available to the specified project.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.routes.list",
+	//   "parameterOrder": [
+	//     "project"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "Optional. Filter expression for filtering listed resources.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "default": "100",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "maximum": "500",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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/routes",
+	//   "response": {
+	//     "$ref": "RouteList"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.snapshots.delete":
+
+type SnapshotsDeleteCall struct {
+	s        *Service
+	project  string
+	snapshot string
+	opt_     map[string]interface{}
+}
+
+// Delete: Deletes the specified persistent disk snapshot resource.
+func (r *SnapshotsService) Delete(project string, snapshot string) *SnapshotsDeleteCall {
+	c := &SnapshotsDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.snapshot = snapshot
+	return c
+}
+
+func (c *SnapshotsDeleteCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/global/snapshots/{snapshot}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{snapshot}", url.QueryEscape(c.snapshot), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Deletes the specified persistent disk snapshot resource.",
+	//   "httpMethod": "DELETE",
+	//   "id": "compute.snapshots.delete",
+	//   "parameterOrder": [
+	//     "project",
+	//     "snapshot"
+	//   ],
+	//   "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"
+	//     },
+	//     "snapshot": {
+	//       "description": "Name of the persistent disk snapshot resource to delete.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/global/snapshots/{snapshot}",
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.snapshots.get":
+
+type SnapshotsGetCall struct {
+	s        *Service
+	project  string
+	snapshot string
+	opt_     map[string]interface{}
+}
+
+// Get: Returns the specified persistent disk snapshot resource.
+func (r *SnapshotsService) Get(project string, snapshot string) *SnapshotsGetCall {
+	c := &SnapshotsGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.snapshot = snapshot
+	return c
+}
+
+func (c *SnapshotsGetCall) Do() (*Snapshot, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/global/snapshots/{snapshot}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{snapshot}", url.QueryEscape(c.snapshot), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Snapshot)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Returns the specified persistent disk snapshot resource.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.snapshots.get",
+	//   "parameterOrder": [
+	//     "project",
+	//     "snapshot"
+	//   ],
+	//   "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"
+	//     },
+	//     "snapshot": {
+	//       "description": "Name of the persistent disk snapshot resource to return.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/global/snapshots/{snapshot}",
+	//   "response": {
+	//     "$ref": "Snapshot"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.snapshots.list":
+
+type SnapshotsListCall struct {
+	s       *Service
+	project string
+	opt_    map[string]interface{}
+}
+
+// List: Retrieves the list of persistent disk snapshot resources
+// contained within the specified project.
+func (r *SnapshotsService) List(project string) *SnapshotsListCall {
+	c := &SnapshotsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	return c
+}
+
+// Filter sets the optional parameter "filter": Filter expression for
+// filtering listed resources.
+func (c *SnapshotsListCall) Filter(filter string) *SnapshotsListCall {
+	c.opt_["filter"] = filter
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": Maximum count of
+// results to be returned. Maximum value is 500 and default value is
+// 100.
+func (c *SnapshotsListCall) MaxResults(maxResults int64) *SnapshotsListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Tag returned by a
+// previous list request truncated by maxResults. Used to continue a
+// previous list request.
+func (c *SnapshotsListCall) PageToken(pageToken string) *SnapshotsListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *SnapshotsListCall) Do() (*SnapshotList, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/global/snapshots")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(SnapshotList)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves the list of persistent disk snapshot resources contained within the specified project.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.snapshots.list",
+	//   "parameterOrder": [
+	//     "project"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "Optional. Filter expression for filtering listed resources.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "default": "100",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "maximum": "500",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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/snapshots",
+	//   "response": {
+	//     "$ref": "SnapshotList"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.targetInstances.aggregatedList":
+
+type TargetInstancesAggregatedListCall struct {
+	s       *Service
+	project string
+	opt_    map[string]interface{}
+}
+
+// AggregatedList: Retrieves the list of target instances grouped by
+// scope.
+func (r *TargetInstancesService) AggregatedList(project string) *TargetInstancesAggregatedListCall {
+	c := &TargetInstancesAggregatedListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	return c
+}
+
+// Filter sets the optional parameter "filter": Filter expression for
+// filtering listed resources.
+func (c *TargetInstancesAggregatedListCall) Filter(filter string) *TargetInstancesAggregatedListCall {
+	c.opt_["filter"] = filter
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": Maximum count of
+// results to be returned. Maximum value is 500 and default value is
+// 100.
+func (c *TargetInstancesAggregatedListCall) MaxResults(maxResults int64) *TargetInstancesAggregatedListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Tag returned by a
+// previous list request truncated by maxResults. Used to continue a
+// previous list request.
+func (c *TargetInstancesAggregatedListCall) PageToken(pageToken string) *TargetInstancesAggregatedListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *TargetInstancesAggregatedListCall) Do() (*TargetInstanceAggregatedList, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/aggregated/targetInstances")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(TargetInstanceAggregatedList)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves the list of target instances grouped by scope.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.targetInstances.aggregatedList",
+	//   "parameterOrder": [
+	//     "project"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "Optional. Filter expression for filtering listed resources.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "default": "100",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "maximum": "500",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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}/aggregated/targetInstances",
+	//   "response": {
+	//     "$ref": "TargetInstanceAggregatedList"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.targetInstances.delete":
+
+type TargetInstancesDeleteCall struct {
+	s              *Service
+	project        string
+	zone           string
+	targetInstance string
+	opt_           map[string]interface{}
+}
+
+// Delete: Deletes the specified TargetInstance resource.
+func (r *TargetInstancesService) Delete(project string, zone string, targetInstance string) *TargetInstancesDeleteCall {
+	c := &TargetInstancesDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.zone = zone
+	c.targetInstance = targetInstance
+	return c
+}
+
+func (c *TargetInstancesDeleteCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/zones/{zone}/targetInstances/{targetInstance}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{targetInstance}", url.QueryEscape(c.targetInstance), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Deletes the specified TargetInstance resource.",
+	//   "httpMethod": "DELETE",
+	//   "id": "compute.targetInstances.delete",
+	//   "parameterOrder": [
+	//     "project",
+	//     "zone",
+	//     "targetInstance"
+	//   ],
+	//   "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"
+	//     },
+	//     "targetInstance": {
+	//       "description": "Name of the TargetInstance resource to delete.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "zone": {
+	//       "description": "Name of the zone scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/zones/{zone}/targetInstances/{targetInstance}",
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.targetInstances.get":
+
+type TargetInstancesGetCall struct {
+	s              *Service
+	project        string
+	zone           string
+	targetInstance string
+	opt_           map[string]interface{}
+}
+
+// Get: Returns the specified TargetInstance resource.
+func (r *TargetInstancesService) Get(project string, zone string, targetInstance string) *TargetInstancesGetCall {
+	c := &TargetInstancesGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.zone = zone
+	c.targetInstance = targetInstance
+	return c
+}
+
+func (c *TargetInstancesGetCall) Do() (*TargetInstance, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/zones/{zone}/targetInstances/{targetInstance}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{targetInstance}", url.QueryEscape(c.targetInstance), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(TargetInstance)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Returns the specified TargetInstance resource.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.targetInstances.get",
+	//   "parameterOrder": [
+	//     "project",
+	//     "zone",
+	//     "targetInstance"
+	//   ],
+	//   "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"
+	//     },
+	//     "targetInstance": {
+	//       "description": "Name of the TargetInstance resource to return.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "zone": {
+	//       "description": "Name of the zone scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/zones/{zone}/targetInstances/{targetInstance}",
+	//   "response": {
+	//     "$ref": "TargetInstance"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.targetInstances.insert":
+
+type TargetInstancesInsertCall struct {
+	s              *Service
+	project        string
+	zone           string
+	targetinstance *TargetInstance
+	opt_           map[string]interface{}
+}
+
+// Insert: Creates a TargetInstance resource in the specified project
+// and zone using the data included in the request.
+func (r *TargetInstancesService) Insert(project string, zone string, targetinstance *TargetInstance) *TargetInstancesInsertCall {
+	c := &TargetInstancesInsertCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.zone = zone
+	c.targetinstance = targetinstance
+	return c
+}
+
+func (c *TargetInstancesInsertCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetinstance)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/zones/{zone}/targetInstances")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Creates a TargetInstance resource in the specified project and zone using the data included in the request.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.targetInstances.insert",
+	//   "parameterOrder": [
+	//     "project",
+	//     "zone"
+	//   ],
+	//   "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"
+	//     },
+	//     "zone": {
+	//       "description": "Name of the zone scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/zones/{zone}/targetInstances",
+	//   "request": {
+	//     "$ref": "TargetInstance"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.targetInstances.list":
+
+type TargetInstancesListCall struct {
+	s       *Service
+	project string
+	zone    string
+	opt_    map[string]interface{}
+}
+
+// List: Retrieves the list of TargetInstance resources available to the
+// specified project and zone.
+func (r *TargetInstancesService) List(project string, zone string) *TargetInstancesListCall {
+	c := &TargetInstancesListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.zone = zone
+	return c
+}
+
+// Filter sets the optional parameter "filter": Filter expression for
+// filtering listed resources.
+func (c *TargetInstancesListCall) Filter(filter string) *TargetInstancesListCall {
+	c.opt_["filter"] = filter
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": Maximum count of
+// results to be returned. Maximum value is 500 and default value is
+// 100.
+func (c *TargetInstancesListCall) MaxResults(maxResults int64) *TargetInstancesListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Tag returned by a
+// previous list request truncated by maxResults. Used to continue a
+// previous list request.
+func (c *TargetInstancesListCall) PageToken(pageToken string) *TargetInstancesListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *TargetInstancesListCall) Do() (*TargetInstanceList, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/zones/{zone}/targetInstances")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(TargetInstanceList)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves the list of TargetInstance resources available to the specified project and zone.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.targetInstances.list",
+	//   "parameterOrder": [
+	//     "project",
+	//     "zone"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "Optional. Filter expression for filtering listed resources.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "default": "100",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "maximum": "500",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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"
+	//     },
+	//     "zone": {
+	//       "description": "Name of the zone scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/zones/{zone}/targetInstances",
+	//   "response": {
+	//     "$ref": "TargetInstanceList"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.targetPools.addHealthCheck":
+
+type TargetPoolsAddHealthCheckCall struct {
+	s                                *Service
+	project                          string
+	region                           string
+	targetPool                       string
+	targetpoolsaddhealthcheckrequest *TargetPoolsAddHealthCheckRequest
+	opt_                             map[string]interface{}
+}
+
+// AddHealthCheck: Adds health check URL to targetPool.
+func (r *TargetPoolsService) AddHealthCheck(project string, region string, targetPool string, targetpoolsaddhealthcheckrequest *TargetPoolsAddHealthCheckRequest) *TargetPoolsAddHealthCheckCall {
+	c := &TargetPoolsAddHealthCheckCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.region = region
+	c.targetPool = targetPool
+	c.targetpoolsaddhealthcheckrequest = targetpoolsaddhealthcheckrequest
+	return c
+}
+
+func (c *TargetPoolsAddHealthCheckCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetpoolsaddhealthcheckrequest)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/regions/{region}/targetPools/{targetPool}/addHealthCheck")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{targetPool}", url.QueryEscape(c.targetPool), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Adds health check URL to targetPool.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.targetPools.addHealthCheck",
+	//   "parameterOrder": [
+	//     "project",
+	//     "region",
+	//     "targetPool"
+	//   ],
+	//   "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"
+	//     },
+	//     "region": {
+	//       "description": "Name of the region scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "targetPool": {
+	//       "description": "Name of the TargetPool resource to which health_check_url is to be added.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/regions/{region}/targetPools/{targetPool}/addHealthCheck",
+	//   "request": {
+	//     "$ref": "TargetPoolsAddHealthCheckRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.targetPools.addInstance":
+
+type TargetPoolsAddInstanceCall struct {
+	s                             *Service
+	project                       string
+	region                        string
+	targetPool                    string
+	targetpoolsaddinstancerequest *TargetPoolsAddInstanceRequest
+	opt_                          map[string]interface{}
+}
+
+// AddInstance: Adds instance url to targetPool.
+func (r *TargetPoolsService) AddInstance(project string, region string, targetPool string, targetpoolsaddinstancerequest *TargetPoolsAddInstanceRequest) *TargetPoolsAddInstanceCall {
+	c := &TargetPoolsAddInstanceCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.region = region
+	c.targetPool = targetPool
+	c.targetpoolsaddinstancerequest = targetpoolsaddinstancerequest
+	return c
+}
+
+func (c *TargetPoolsAddInstanceCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetpoolsaddinstancerequest)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/regions/{region}/targetPools/{targetPool}/addInstance")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{targetPool}", url.QueryEscape(c.targetPool), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Adds instance url to targetPool.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.targetPools.addInstance",
+	//   "parameterOrder": [
+	//     "project",
+	//     "region",
+	//     "targetPool"
+	//   ],
+	//   "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"
+	//     },
+	//     "region": {
+	//       "description": "Name of the region scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "targetPool": {
+	//       "description": "Name of the TargetPool resource to which instance_url is to be added.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/regions/{region}/targetPools/{targetPool}/addInstance",
+	//   "request": {
+	//     "$ref": "TargetPoolsAddInstanceRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.targetPools.aggregatedList":
+
+type TargetPoolsAggregatedListCall struct {
+	s       *Service
+	project string
+	opt_    map[string]interface{}
+}
+
+// AggregatedList: Retrieves the list of target pools grouped by scope.
+func (r *TargetPoolsService) AggregatedList(project string) *TargetPoolsAggregatedListCall {
+	c := &TargetPoolsAggregatedListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	return c
+}
+
+// Filter sets the optional parameter "filter": Filter expression for
+// filtering listed resources.
+func (c *TargetPoolsAggregatedListCall) Filter(filter string) *TargetPoolsAggregatedListCall {
+	c.opt_["filter"] = filter
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": Maximum count of
+// results to be returned. Maximum value is 500 and default value is
+// 100.
+func (c *TargetPoolsAggregatedListCall) MaxResults(maxResults int64) *TargetPoolsAggregatedListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Tag returned by a
+// previous list request truncated by maxResults. Used to continue a
+// previous list request.
+func (c *TargetPoolsAggregatedListCall) PageToken(pageToken string) *TargetPoolsAggregatedListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *TargetPoolsAggregatedListCall) Do() (*TargetPoolAggregatedList, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/aggregated/targetPools")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(TargetPoolAggregatedList)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves the list of target pools grouped by scope.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.targetPools.aggregatedList",
+	//   "parameterOrder": [
+	//     "project"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "Optional. Filter expression for filtering listed resources.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "default": "100",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "maximum": "500",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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}/aggregated/targetPools",
+	//   "response": {
+	//     "$ref": "TargetPoolAggregatedList"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.targetPools.delete":
+
+type TargetPoolsDeleteCall struct {
+	s          *Service
+	project    string
+	region     string
+	targetPool string
+	opt_       map[string]interface{}
+}
+
+// Delete: Deletes the specified TargetPool resource.
+func (r *TargetPoolsService) Delete(project string, region string, targetPool string) *TargetPoolsDeleteCall {
+	c := &TargetPoolsDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.region = region
+	c.targetPool = targetPool
+	return c
+}
+
+func (c *TargetPoolsDeleteCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/regions/{region}/targetPools/{targetPool}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{targetPool}", url.QueryEscape(c.targetPool), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Deletes the specified TargetPool resource.",
+	//   "httpMethod": "DELETE",
+	//   "id": "compute.targetPools.delete",
+	//   "parameterOrder": [
+	//     "project",
+	//     "region",
+	//     "targetPool"
+	//   ],
+	//   "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"
+	//     },
+	//     "region": {
+	//       "description": "Name of the region scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "targetPool": {
+	//       "description": "Name of the TargetPool resource to delete.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/regions/{region}/targetPools/{targetPool}",
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.targetPools.get":
+
+type TargetPoolsGetCall struct {
+	s          *Service
+	project    string
+	region     string
+	targetPool string
+	opt_       map[string]interface{}
+}
+
+// Get: Returns the specified TargetPool resource.
+func (r *TargetPoolsService) Get(project string, region string, targetPool string) *TargetPoolsGetCall {
+	c := &TargetPoolsGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.region = region
+	c.targetPool = targetPool
+	return c
+}
+
+func (c *TargetPoolsGetCall) Do() (*TargetPool, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/regions/{region}/targetPools/{targetPool}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{targetPool}", url.QueryEscape(c.targetPool), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(TargetPool)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Returns the specified TargetPool resource.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.targetPools.get",
+	//   "parameterOrder": [
+	//     "project",
+	//     "region",
+	//     "targetPool"
+	//   ],
+	//   "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"
+	//     },
+	//     "region": {
+	//       "description": "Name of the region scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "targetPool": {
+	//       "description": "Name of the TargetPool resource to return.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/regions/{region}/targetPools/{targetPool}",
+	//   "response": {
+	//     "$ref": "TargetPool"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.targetPools.getHealth":
+
+type TargetPoolsGetHealthCall struct {
+	s                 *Service
+	project           string
+	region            string
+	targetPool        string
+	instancereference *InstanceReference
+	opt_              map[string]interface{}
+}
+
+// GetHealth: Gets the most recent health check results for each IP for
+// the given instance that is referenced by given TargetPool.
+func (r *TargetPoolsService) GetHealth(project string, region string, targetPool string, instancereference *InstanceReference) *TargetPoolsGetHealthCall {
+	c := &TargetPoolsGetHealthCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.region = region
+	c.targetPool = targetPool
+	c.instancereference = instancereference
+	return c
+}
+
+func (c *TargetPoolsGetHealthCall) Do() (*TargetPoolInstanceHealth, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancereference)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/regions/{region}/targetPools/{targetPool}/getHealth")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{targetPool}", url.QueryEscape(c.targetPool), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(TargetPoolInstanceHealth)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets the most recent health check results for each IP for the given instance that is referenced by given TargetPool.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.targetPools.getHealth",
+	//   "parameterOrder": [
+	//     "project",
+	//     "region",
+	//     "targetPool"
+	//   ],
+	//   "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"
+	//     },
+	//     "region": {
+	//       "description": "Name of the region scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "targetPool": {
+	//       "description": "Name of the TargetPool resource to which the queried instance belongs.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/regions/{region}/targetPools/{targetPool}/getHealth",
+	//   "request": {
+	//     "$ref": "InstanceReference"
+	//   },
+	//   "response": {
+	//     "$ref": "TargetPoolInstanceHealth"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.targetPools.insert":
+
+type TargetPoolsInsertCall struct {
+	s          *Service
+	project    string
+	region     string
+	targetpool *TargetPool
+	opt_       map[string]interface{}
+}
+
+// Insert: Creates a TargetPool resource in the specified project and
+// region using the data included in the request.
+func (r *TargetPoolsService) Insert(project string, region string, targetpool *TargetPool) *TargetPoolsInsertCall {
+	c := &TargetPoolsInsertCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.region = region
+	c.targetpool = targetpool
+	return c
+}
+
+func (c *TargetPoolsInsertCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetpool)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/regions/{region}/targetPools")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Creates a TargetPool resource in the specified project and region using the data included in the request.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.targetPools.insert",
+	//   "parameterOrder": [
+	//     "project",
+	//     "region"
+	//   ],
+	//   "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"
+	//     },
+	//     "region": {
+	//       "description": "Name of the region scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/regions/{region}/targetPools",
+	//   "request": {
+	//     "$ref": "TargetPool"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.targetPools.list":
+
+type TargetPoolsListCall struct {
+	s       *Service
+	project string
+	region  string
+	opt_    map[string]interface{}
+}
+
+// List: Retrieves the list of TargetPool resources available to the
+// specified project and region.
+func (r *TargetPoolsService) List(project string, region string) *TargetPoolsListCall {
+	c := &TargetPoolsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.region = region
+	return c
+}
+
+// Filter sets the optional parameter "filter": Filter expression for
+// filtering listed resources.
+func (c *TargetPoolsListCall) Filter(filter string) *TargetPoolsListCall {
+	c.opt_["filter"] = filter
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": Maximum count of
+// results to be returned. Maximum value is 500 and default value is
+// 100.
+func (c *TargetPoolsListCall) MaxResults(maxResults int64) *TargetPoolsListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Tag returned by a
+// previous list request truncated by maxResults. Used to continue a
+// previous list request.
+func (c *TargetPoolsListCall) PageToken(pageToken string) *TargetPoolsListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *TargetPoolsListCall) Do() (*TargetPoolList, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/regions/{region}/targetPools")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(TargetPoolList)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves the list of TargetPool resources available to the specified project and region.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.targetPools.list",
+	//   "parameterOrder": [
+	//     "project",
+	//     "region"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "Optional. Filter expression for filtering listed resources.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "default": "100",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "maximum": "500",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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"
+	//     },
+	//     "region": {
+	//       "description": "Name of the region scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/regions/{region}/targetPools",
+	//   "response": {
+	//     "$ref": "TargetPoolList"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.targetPools.removeHealthCheck":
+
+type TargetPoolsRemoveHealthCheckCall struct {
+	s                                   *Service
+	project                             string
+	region                              string
+	targetPool                          string
+	targetpoolsremovehealthcheckrequest *TargetPoolsRemoveHealthCheckRequest
+	opt_                                map[string]interface{}
+}
+
+// RemoveHealthCheck: Removes health check URL from targetPool.
+func (r *TargetPoolsService) RemoveHealthCheck(project string, region string, targetPool string, targetpoolsremovehealthcheckrequest *TargetPoolsRemoveHealthCheckRequest) *TargetPoolsRemoveHealthCheckCall {
+	c := &TargetPoolsRemoveHealthCheckCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.region = region
+	c.targetPool = targetPool
+	c.targetpoolsremovehealthcheckrequest = targetpoolsremovehealthcheckrequest
+	return c
+}
+
+func (c *TargetPoolsRemoveHealthCheckCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetpoolsremovehealthcheckrequest)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/regions/{region}/targetPools/{targetPool}/removeHealthCheck")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{targetPool}", url.QueryEscape(c.targetPool), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Removes health check URL from targetPool.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.targetPools.removeHealthCheck",
+	//   "parameterOrder": [
+	//     "project",
+	//     "region",
+	//     "targetPool"
+	//   ],
+	//   "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"
+	//     },
+	//     "region": {
+	//       "description": "Name of the region scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "targetPool": {
+	//       "description": "Name of the TargetPool resource to which health_check_url is to be removed.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/regions/{region}/targetPools/{targetPool}/removeHealthCheck",
+	//   "request": {
+	//     "$ref": "TargetPoolsRemoveHealthCheckRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.targetPools.removeInstance":
+
+type TargetPoolsRemoveInstanceCall struct {
+	s                                *Service
+	project                          string
+	region                           string
+	targetPool                       string
+	targetpoolsremoveinstancerequest *TargetPoolsRemoveInstanceRequest
+	opt_                             map[string]interface{}
+}
+
+// RemoveInstance: Removes instance URL from targetPool.
+func (r *TargetPoolsService) RemoveInstance(project string, region string, targetPool string, targetpoolsremoveinstancerequest *TargetPoolsRemoveInstanceRequest) *TargetPoolsRemoveInstanceCall {
+	c := &TargetPoolsRemoveInstanceCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.region = region
+	c.targetPool = targetPool
+	c.targetpoolsremoveinstancerequest = targetpoolsremoveinstancerequest
+	return c
+}
+
+func (c *TargetPoolsRemoveInstanceCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetpoolsremoveinstancerequest)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/regions/{region}/targetPools/{targetPool}/removeInstance")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{targetPool}", url.QueryEscape(c.targetPool), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Removes instance URL from targetPool.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.targetPools.removeInstance",
+	//   "parameterOrder": [
+	//     "project",
+	//     "region",
+	//     "targetPool"
+	//   ],
+	//   "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"
+	//     },
+	//     "region": {
+	//       "description": "Name of the region scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "targetPool": {
+	//       "description": "Name of the TargetPool resource to which instance_url is to be removed.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/regions/{region}/targetPools/{targetPool}/removeInstance",
+	//   "request": {
+	//     "$ref": "TargetPoolsRemoveInstanceRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.targetPools.setBackup":
+
+type TargetPoolsSetBackupCall struct {
+	s               *Service
+	project         string
+	region          string
+	targetPool      string
+	targetreference *TargetReference
+	opt_            map[string]interface{}
+}
+
+// SetBackup: Changes backup pool configurations.
+func (r *TargetPoolsService) SetBackup(project string, region string, targetPool string, targetreference *TargetReference) *TargetPoolsSetBackupCall {
+	c := &TargetPoolsSetBackupCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.region = region
+	c.targetPool = targetPool
+	c.targetreference = targetreference
+	return c
+}
+
+// FailoverRatio sets the optional parameter "failoverRatio": New
+// failoverRatio value for the containing target pool.
+func (c *TargetPoolsSetBackupCall) FailoverRatio(failoverRatio float64) *TargetPoolsSetBackupCall {
+	c.opt_["failoverRatio"] = failoverRatio
+	return c
+}
+
+func (c *TargetPoolsSetBackupCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetreference)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	if v, ok := c.opt_["failoverRatio"]; ok {
+		params.Set("failoverRatio", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/regions/{region}/targetPools/{targetPool}/setBackup")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{targetPool}", url.QueryEscape(c.targetPool), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Changes backup pool configurations.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.targetPools.setBackup",
+	//   "parameterOrder": [
+	//     "project",
+	//     "region",
+	//     "targetPool"
+	//   ],
+	//   "parameters": {
+	//     "failoverRatio": {
+	//       "description": "New failoverRatio value for the containing target pool.",
+	//       "format": "float",
+	//       "location": "query",
+	//       "type": "number"
+	//     },
+	//     "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"
+	//     },
+	//     "region": {
+	//       "description": "Name of the region scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "targetPool": {
+	//       "description": "Name of the TargetPool resource for which the backup is to be set.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/regions/{region}/targetPools/{targetPool}/setBackup",
+	//   "request": {
+	//     "$ref": "TargetReference"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.zoneOperations.delete":
+
+type ZoneOperationsDeleteCall struct {
+	s         *Service
+	project   string
+	zone      string
+	operation string
+	opt_      map[string]interface{}
+}
+
+// Delete: Deletes the specified zone-specific operation resource.
+func (r *ZoneOperationsService) Delete(project string, zone string, operation string) *ZoneOperationsDeleteCall {
+	c := &ZoneOperationsDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.zone = zone
+	c.operation = operation
+	return c
+}
+
+func (c *ZoneOperationsDeleteCall) Do() error {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/zones/{zone}/operations/{operation}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{operation}", url.QueryEscape(c.operation), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return err
+	}
+	return nil
+	// {
+	//   "description": "Deletes the specified zone-specific operation resource.",
+	//   "httpMethod": "DELETE",
+	//   "id": "compute.zoneOperations.delete",
+	//   "parameterOrder": [
+	//     "project",
+	//     "zone",
+	//     "operation"
+	//   ],
+	//   "parameters": {
+	//     "operation": {
+	//       "description": "Name of the operation 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"
+	//     },
+	//     "zone": {
+	//       "description": "Name of the zone scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/zones/{zone}/operations/{operation}",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.zoneOperations.get":
+
+type ZoneOperationsGetCall struct {
+	s         *Service
+	project   string
+	zone      string
+	operation string
+	opt_      map[string]interface{}
+}
+
+// Get: Retrieves the specified zone-specific operation resource.
+func (r *ZoneOperationsService) Get(project string, zone string, operation string) *ZoneOperationsGetCall {
+	c := &ZoneOperationsGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.zone = zone
+	c.operation = operation
+	return c
+}
+
+func (c *ZoneOperationsGetCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/zones/{zone}/operations/{operation}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{operation}", url.QueryEscape(c.operation), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves the specified zone-specific operation resource.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.zoneOperations.get",
+	//   "parameterOrder": [
+	//     "project",
+	//     "zone",
+	//     "operation"
+	//   ],
+	//   "parameters": {
+	//     "operation": {
+	//       "description": "Name of the operation 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"
+	//     },
+	//     "zone": {
+	//       "description": "Name of the zone scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/zones/{zone}/operations/{operation}",
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.zoneOperations.list":
+
+type ZoneOperationsListCall struct {
+	s       *Service
+	project string
+	zone    string
+	opt_    map[string]interface{}
+}
+
+// List: Retrieves the list of operation resources contained within the
+// specified zone.
+func (r *ZoneOperationsService) List(project string, zone string) *ZoneOperationsListCall {
+	c := &ZoneOperationsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.zone = zone
+	return c
+}
+
+// Filter sets the optional parameter "filter": Filter expression for
+// filtering listed resources.
+func (c *ZoneOperationsListCall) Filter(filter string) *ZoneOperationsListCall {
+	c.opt_["filter"] = filter
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": Maximum count of
+// results to be returned. Maximum value is 500 and default value is
+// 100.
+func (c *ZoneOperationsListCall) MaxResults(maxResults int64) *ZoneOperationsListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Tag returned by a
+// previous list request truncated by maxResults. Used to continue a
+// previous list request.
+func (c *ZoneOperationsListCall) PageToken(pageToken string) *ZoneOperationsListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *ZoneOperationsListCall) Do() (*OperationList, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/zones/{zone}/operations")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(OperationList)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves the list of operation resources contained within the specified zone.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.zoneOperations.list",
+	//   "parameterOrder": [
+	//     "project",
+	//     "zone"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "Optional. Filter expression for filtering listed resources.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "default": "100",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "maximum": "500",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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"
+	//     },
+	//     "zone": {
+	//       "description": "Name of the zone scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/zones/{zone}/operations",
+	//   "response": {
+	//     "$ref": "OperationList"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.zones.get":
+
+type ZonesGetCall struct {
+	s       *Service
+	project string
+	zone    string
+	opt_    map[string]interface{}
+}
+
+// Get: Returns the specified zone resource.
+func (r *ZonesService) Get(project string, zone string) *ZonesGetCall {
+	c := &ZonesGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.zone = zone
+	return c
+}
+
+func (c *ZonesGetCall) Do() (*Zone, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/zones/{zone}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Zone)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Returns the specified zone resource.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.zones.get",
+	//   "parameterOrder": [
+	//     "project",
+	//     "zone"
+	//   ],
+	//   "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"
+	//     },
+	//     "zone": {
+	//       "description": "Name of the zone resource to return.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/zones/{zone}",
+	//   "response": {
+	//     "$ref": "Zone"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.zones.list":
+
+type ZonesListCall struct {
+	s       *Service
+	project string
+	opt_    map[string]interface{}
+}
+
+// List: Retrieves the list of zone resources available to the specified
+// project.
+func (r *ZonesService) List(project string) *ZonesListCall {
+	c := &ZonesListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	return c
+}
+
+// Filter sets the optional parameter "filter": Filter expression for
+// filtering listed resources.
+func (c *ZonesListCall) Filter(filter string) *ZonesListCall {
+	c.opt_["filter"] = filter
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": Maximum count of
+// results to be returned. Maximum value is 500 and default value is
+// 100.
+func (c *ZonesListCall) MaxResults(maxResults int64) *ZonesListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Tag returned by a
+// previous list request truncated by maxResults. Used to continue a
+// previous list request.
+func (c *ZonesListCall) PageToken(pageToken string) *ZonesListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *ZonesListCall) Do() (*ZoneList, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1/projects/", "{project}/zones")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(ZoneList)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves the list of zone resources available to the specified project.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.zones.list",
+	//   "parameterOrder": [
+	//     "project"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "Optional. Filter expression for filtering listed resources.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "default": "100",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "maximum": "500",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue 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}/zones",
+	//   "response": {
+	//     "$ref": "ZoneList"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
diff --git a/compute/v1beta15/compute-api.json b/compute/v1beta15/compute-api.json
index d242714..bb85153 100644
--- a/compute/v1beta15/compute-api.json
+++ b/compute/v1beta15/compute-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/xt9hrN8ueU47r3vEuR90bsifdnQ\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/1b42mTNhp-IHR0jf9o6NABcHCFc\"",
  "discoveryVersion": "v1",
  "id": "compute:v1beta15",
  "name": "compute",
@@ -387,6 +387,14 @@
      "description": "Size of the persistent disk, specified in GB. This parameter is optional when creating a disk from a disk image or a snapshot, otherwise it is required.",
      "format": "int64"
     },
+    "sourceImage": {
+     "type": "string",
+     "description": "The source image used to create this disk. Once the source image has been deleted from the system, this field will not be set, even if an image with the same name has been re-created."
+    },
+    "sourceImageId": {
+     "type": "string",
+     "description": "The 'id' value of the image used to create this disk. This value may be used to determine whether the disk was created from the current or a previous instance of a given image."
+    },
     "sourceSnapshot": {
      "type": "string",
      "description": "The source snapshot used to create this disk. Once the source snapshot has been deleted from the system, this field will be cleared, and will not be set even if a snapshot with the same name has been re-created."
@@ -2711,7 +2719,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -2871,7 +2879,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -2927,7 +2935,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -3134,7 +3142,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -3282,7 +3290,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -3400,7 +3408,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -3560,7 +3568,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -3659,7 +3667,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -3765,7 +3773,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -3905,7 +3913,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -4153,7 +4161,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -4250,7 +4258,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -4596,7 +4604,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -4811,7 +4819,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -4859,7 +4867,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -4944,7 +4952,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -5092,7 +5100,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -5274,7 +5282,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -5363,7 +5371,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -5503,7 +5511,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -5616,7 +5624,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -5750,7 +5758,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -5954,7 +5962,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -6223,7 +6231,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -6312,7 +6320,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
diff --git a/compute/v1beta15/compute-gen.go b/compute/v1beta15/compute-gen.go
index 199558d..5f08be9 100644
--- a/compute/v1beta15/compute-gen.go
+++ b/compute/v1beta15/compute-gen.go
@@ -512,6 +512,16 @@
 	// otherwise it is required.
 	SizeGb int64 `json:"sizeGb,omitempty,string"`
 
+	// SourceImage: The source image used to create this disk. Once the
+	// source image has been deleted from the system, this field will not be
+	// set, even if an image with the same name has been re-created.
+	SourceImage string `json:"sourceImage,omitempty"`
+
+	// SourceImageId: The 'id' value of the image used to create this disk.
+	// This value may be used to determine whether the disk was created from
+	// the current or a previous instance of a given image.
+	SourceImageId string `json:"sourceImageId,omitempty"`
+
 	// SourceSnapshot: The source snapshot used to create this disk. Once
 	// the source snapshot has been deleted from the system, this field will
 	// be cleared, and will not be set even if a snapshot with the same name
@@ -2157,7 +2167,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *AddressesAggregatedListCall) MaxResults(maxResults int64) *AddressesAggregatedListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -2218,7 +2229,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -2539,7 +2550,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *AddressesListCall) MaxResults(maxResults int64) *AddressesListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -2602,7 +2614,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -2664,7 +2676,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *DisksAggregatedListCall) MaxResults(maxResults int64) *DisksAggregatedListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -2725,7 +2738,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -3158,7 +3171,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *DisksListCall) MaxResults(maxResults int64) *DisksListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -3221,7 +3235,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -3514,7 +3528,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *FirewallsListCall) MaxResults(maxResults int64) *FirewallsListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -3575,7 +3590,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -3807,7 +3822,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *ForwardingRulesAggregatedListCall) MaxResults(maxResults int64) *ForwardingRulesAggregatedListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -3868,7 +3884,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -4189,7 +4205,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *ForwardingRulesListCall) MaxResults(maxResults int64) *ForwardingRulesListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -4252,7 +4269,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -4413,7 +4430,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *GlobalOperationsAggregatedListCall) MaxResults(maxResults int64) *GlobalOperationsAggregatedListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -4474,7 +4492,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -4676,7 +4694,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *GlobalOperationsListCall) MaxResults(maxResults int64) *GlobalOperationsListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -4737,7 +4756,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -5023,7 +5042,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *HttpHealthChecksListCall) MaxResults(maxResults int64) *HttpHealthChecksListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -5084,7 +5104,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -5638,7 +5658,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *ImagesListCall) MaxResults(maxResults int64) *ImagesListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -5699,7 +5720,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -5863,7 +5884,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *InstancesAggregatedListCall) MaxResults(maxResults int64) *InstancesAggregatedListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -5923,7 +5945,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -6637,7 +6659,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *InstancesListCall) MaxResults(maxResults int64) *InstancesListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -6700,7 +6723,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -7125,7 +7148,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *KernelsListCall) MaxResults(maxResults int64) *KernelsListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -7186,7 +7210,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -7242,7 +7266,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *MachineTypesAggregatedListCall) MaxResults(maxResults int64) *MachineTypesAggregatedListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -7303,7 +7328,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -7449,7 +7474,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *MachineTypesListCall) MaxResults(maxResults int64) *MachineTypesListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -7512,7 +7538,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -7805,7 +7831,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *NetworksListCall) MaxResults(maxResults int64) *NetworksListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -7866,7 +7893,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -8235,7 +8262,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *RegionOperationsListCall) MaxResults(maxResults int64) *RegionOperationsListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -8298,7 +8326,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -8438,7 +8466,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *RegionsListCall) MaxResults(maxResults int64) *RegionsListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -8499,7 +8528,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -8785,7 +8814,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *RoutesListCall) MaxResults(maxResults int64) *RoutesListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -8846,7 +8876,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -9055,7 +9085,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *SnapshotsListCall) MaxResults(maxResults int64) *SnapshotsListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -9116,7 +9147,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -9367,7 +9398,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *TargetPoolsAggregatedListCall) MaxResults(maxResults int64) *TargetPoolsAggregatedListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -9428,7 +9460,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -9849,7 +9881,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *TargetPoolsListCall) MaxResults(maxResults int64) *TargetPoolsListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -9912,7 +9945,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -10455,7 +10488,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *ZoneOperationsListCall) MaxResults(maxResults int64) *ZoneOperationsListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -10518,7 +10552,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -10658,7 +10692,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *ZonesListCall) MaxResults(maxResults int64) *ZonesListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -10719,7 +10754,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
diff --git a/compute/v1beta16/compute-api.json b/compute/v1beta16/compute-api.json
index 4c409aa..2756734 100644
--- a/compute/v1beta16/compute-api.json
+++ b/compute/v1beta16/compute-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/6aE-0Ql1Qk6jNIkf5xhRS0iH-7M\"",
+ "etag": "\"qMhxoRFWKZK4K3KdZJuqms1o3fc/JD0bItbGNCln4h0qGgdLTo7sRwI\"",
  "discoveryVersion": "v1",
  "id": "compute:v1beta16",
  "name": "compute",
@@ -165,7 +165,15 @@
     },
     "status": {
      "type": "string",
-     "description": "The status of the address (output only)."
+     "description": "The status of the address (output only).",
+     "enum": [
+      "IN_USE",
+      "RESERVED"
+     ],
+     "enumDescriptions": [
+      "",
+      ""
+     ]
     },
     "users": {
      "type": "array",
@@ -265,6 +273,7 @@
         "NEXT_HOP_INSTANCE_NOT_ON_NETWORK",
         "NEXT_HOP_NOT_RUNNING",
         "NO_RESULTS_ON_PAGE",
+        "REQUIRED_TOS_AGREEMENT",
         "UNREACHABLE"
        ],
        "enumDescriptions": [
@@ -276,6 +285,7 @@
         "",
         "",
         "",
+        "",
         ""
        ]
       },
@@ -445,6 +455,14 @@
      "description": "Size of the persistent disk, specified in GB. This parameter is optional when creating a disk from a disk image or a snapshot, otherwise it is required.",
      "format": "int64"
     },
+    "sourceImage": {
+     "type": "string",
+     "description": "The source image used to create this disk. Once the source image has been deleted from the system, this field will not be set, even if an image with the same name has been re-created."
+    },
+    "sourceImageId": {
+     "type": "string",
+     "description": "The 'id' value of the image used to create this disk. This value may be used to determine whether the disk was created from the current or a previous instance of a given image."
+    },
     "sourceSnapshot": {
      "type": "string",
      "description": "The source snapshot used to create this disk. Once the source snapshot has been deleted from the system, this field will be cleared, and will not be set even if a snapshot with the same name has been re-created."
@@ -455,7 +473,19 @@
     },
     "status": {
      "type": "string",
-     "description": "The status of disk creation (output only)."
+     "description": "The status of disk creation (output only).",
+     "enum": [
+      "CREATING",
+      "FAILED",
+      "READY",
+      "RESTORING"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      "",
+      ""
+     ]
     },
     "zone": {
      "type": "string",
@@ -552,6 +582,7 @@
         "NEXT_HOP_INSTANCE_NOT_ON_NETWORK",
         "NEXT_HOP_NOT_RUNNING",
         "NO_RESULTS_ON_PAGE",
+        "REQUIRED_TOS_AGREEMENT",
         "UNREACHABLE"
        ],
        "enumDescriptions": [
@@ -563,6 +594,7 @@
         "",
         "",
         "",
+        "",
         ""
        ]
       },
@@ -864,6 +896,7 @@
         "NEXT_HOP_INSTANCE_NOT_ON_NETWORK",
         "NEXT_HOP_NOT_RUNNING",
         "NO_RESULTS_ON_PAGE",
+        "REQUIRED_TOS_AGREEMENT",
         "UNREACHABLE"
        ],
        "enumDescriptions": [
@@ -875,6 +908,7 @@
         "",
         "",
         "",
+        "",
         ""
        ]
       },
@@ -1251,6 +1285,10 @@
       "$ref": "NetworkInterface"
      }
     },
+    "scheduling": {
+     "$ref": "Scheduling",
+     "description": "Scheduling options for this instance."
+    },
     "selfLink": {
      "type": "string",
      "description": "Server defined URL for this resource (output only)."
@@ -1264,7 +1302,23 @@
     },
     "status": {
      "type": "string",
-     "description": "Instance status. One of the following values: \"PROVISIONING\", \"STAGING\", \"RUNNING\", \"STOPPING\", \"STOPPED\", \"TERMINATED\" (output only)."
+     "description": "Instance status. One of the following values: \"PROVISIONING\", \"STAGING\", \"RUNNING\", \"STOPPING\", \"STOPPED\", \"TERMINATED\" (output only).",
+     "enum": [
+      "PROVISIONING",
+      "RUNNING",
+      "STAGING",
+      "STOPPED",
+      "STOPPING",
+      "TERMINATED"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      "",
+      "",
+      "",
+      ""
+     ]
     },
     "statusMessage": {
      "type": "string",
@@ -1378,6 +1432,7 @@
         "NEXT_HOP_INSTANCE_NOT_ON_NETWORK",
         "NEXT_HOP_NOT_RUNNING",
         "NO_RESULTS_ON_PAGE",
+        "REQUIRED_TOS_AGREEMENT",
         "UNREACHABLE"
        ],
        "enumDescriptions": [
@@ -1389,6 +1444,7 @@
         "",
         "",
         "",
+        "",
         ""
        ]
       },
@@ -1656,6 +1712,7 @@
         "NEXT_HOP_INSTANCE_NOT_ON_NETWORK",
         "NEXT_HOP_NOT_RUNNING",
         "NO_RESULTS_ON_PAGE",
+        "REQUIRED_TOS_AGREEMENT",
         "UNREACHABLE"
        ],
        "enumDescriptions": [
@@ -1667,6 +1724,7 @@
         "",
         "",
         "",
+        "",
         ""
        ]
       },
@@ -1999,6 +2057,7 @@
          "NEXT_HOP_INSTANCE_NOT_ON_NETWORK",
          "NEXT_HOP_NOT_RUNNING",
          "NO_RESULTS_ON_PAGE",
+         "REQUIRED_TOS_AGREEMENT",
          "UNREACHABLE"
         ],
         "enumDescriptions": [
@@ -2010,6 +2069,7 @@
          "",
          "",
          "",
+         "",
          ""
         ]
        },
@@ -2132,6 +2192,7 @@
         "NEXT_HOP_INSTANCE_NOT_ON_NETWORK",
         "NEXT_HOP_NOT_RUNNING",
         "NO_RESULTS_ON_PAGE",
+        "REQUIRED_TOS_AGREEMENT",
         "UNREACHABLE"
        ],
        "enumDescriptions": [
@@ -2143,6 +2204,7 @@
         "",
         "",
         "",
+        "",
         ""
        ]
       },
@@ -2229,7 +2291,6 @@
      "type": "string",
      "description": "Name of the quota metric.",
      "enum": [
-      "BACKEND_GROUPS",
       "CPUS",
       "DISKS",
       "DISKS_TOTAL_GB",
@@ -2245,7 +2306,6 @@
       "KERNELS_TOTAL_GB",
       "NETWORKS",
       "OPERATIONS",
-      "PUBLIC_ENDPOINTS",
       "ROUTES",
       "SNAPSHOTS",
       "STATIC_ADDRESSES",
@@ -2270,8 +2330,6 @@
       "",
       "",
       "",
-      "",
-      "",
       ""
      ]
     },
@@ -2487,6 +2545,7 @@
          "NEXT_HOP_INSTANCE_NOT_ON_NETWORK",
          "NEXT_HOP_NOT_RUNNING",
          "NO_RESULTS_ON_PAGE",
+         "REQUIRED_TOS_AGREEMENT",
          "UNREACHABLE"
         ],
         "enumDescriptions": [
@@ -2498,6 +2557,7 @@
          "",
          "",
          "",
+         "",
          ""
         ]
        },
@@ -2558,6 +2618,29 @@
     }
    }
   },
+  "Scheduling": {
+   "id": "Scheduling",
+   "type": "object",
+   "description": "Scheduling options for an Instance.",
+   "properties": {
+    "automaticRestart": {
+     "type": "boolean",
+     "description": "Whether the Instance should be automatically restarted whenever it is terminated by Compute Engine (not terminated by user)."
+    },
+    "onHostMaintenance": {
+     "type": "string",
+     "description": "How the instance should behave when the host machine undergoes maintenance that may temporarily impact instance performance.",
+     "enum": [
+      "MIGRATE",
+      "TERMINATE"
+     ],
+     "enumDescriptions": [
+      "",
+      ""
+     ]
+    }
+   }
+  },
   "SerialPortOutput": {
    "id": "SerialPortOutput",
    "type": "object",
@@ -2643,7 +2726,21 @@
     },
     "status": {
      "type": "string",
-     "description": "The status of the persistent disk snapshot (output only)."
+     "description": "The status of the persistent disk snapshot (output only).",
+     "enum": [
+      "CREATING",
+      "DELETING",
+      "FAILED",
+      "READY",
+      "UPLOADING"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      "",
+      "",
+      ""
+     ]
     },
     "storageBytes": {
      "type": "string",
@@ -2947,6 +3044,7 @@
         "NEXT_HOP_INSTANCE_NOT_ON_NETWORK",
         "NEXT_HOP_NOT_RUNNING",
         "NO_RESULTS_ON_PAGE",
+        "REQUIRED_TOS_AGREEMENT",
         "UNREACHABLE"
        ],
        "enumDescriptions": [
@@ -2958,6 +3056,7 @@
         "",
         "",
         "",
+        "",
         ""
        ]
       },
@@ -3121,7 +3220,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -3281,7 +3380,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -3337,7 +3436,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -3544,7 +3643,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -3692,7 +3791,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -3810,7 +3909,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -3970,7 +4069,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -4069,7 +4168,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -4175,7 +4274,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -4315,7 +4414,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -4563,7 +4662,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -4660,7 +4759,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -5006,7 +5105,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -5128,6 +5227,49 @@
       "https://www.googleapis.com/auth/compute"
      ]
     },
+    "setScheduling": {
+     "id": "compute.instances.setScheduling",
+     "path": "{project}/zones/{zone}/instances/{instance}/setScheduling",
+     "httpMethod": "POST",
+     "description": "Sets an instance's scheduling options.",
+     "parameters": {
+      "instance": {
+       "type": "string",
+       "description": "Instance name.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      },
+      "project": {
+       "type": "string",
+       "description": "Project name.",
+       "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": "Name of the zone scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "zone",
+      "instance"
+     ],
+     "request": {
+      "$ref": "Scheduling"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
     "setTags": {
      "id": "compute.instances.setTags",
      "path": "{project}/zones/{zone}/instances/{instance}/setTags",
@@ -5221,7 +5363,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -5269,7 +5411,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -5354,7 +5496,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -5502,7 +5644,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -5684,7 +5826,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -5773,7 +5915,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -5913,7 +6055,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -6026,7 +6168,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -6160,7 +6302,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -6364,7 +6506,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -6633,7 +6775,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
@@ -6722,7 +6864,7 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
diff --git a/compute/v1beta16/compute-gen.go b/compute/v1beta16/compute-gen.go
index 2ac6134..00cb9f2 100644
--- a/compute/v1beta16/compute-gen.go
+++ b/compute/v1beta16/compute-gen.go
@@ -513,6 +513,16 @@
 	// otherwise it is required.
 	SizeGb int64 `json:"sizeGb,omitempty,string"`
 
+	// SourceImage: The source image used to create this disk. Once the
+	// source image has been deleted from the system, this field will not be
+	// set, even if an image with the same name has been re-created.
+	SourceImage string `json:"sourceImage,omitempty"`
+
+	// SourceImageId: The 'id' value of the image used to create this disk.
+	// This value may be used to determine whether the disk was created from
+	// the current or a previous instance of a given image.
+	SourceImageId string `json:"sourceImageId,omitempty"`
+
 	// SourceSnapshot: The source snapshot used to create this disk. Once
 	// the source snapshot has been deleted from the system, this field will
 	// be cleared, and will not be set even if a snapshot with the same name
@@ -1045,6 +1055,9 @@
 	// internet access.
 	NetworkInterfaces []*NetworkInterface `json:"networkInterfaces,omitempty"`
 
+	// Scheduling: Scheduling options for this instance.
+	Scheduling *Scheduling `json:"scheduling,omitempty"`
+
 	// SelfLink: Server defined URL for this resource (output only).
 	SelfLink string `json:"selfLink,omitempty"`
 
@@ -1803,6 +1816,18 @@
 	SelfLink string `json:"selfLink,omitempty"`
 }
 
+type Scheduling struct {
+	// AutomaticRestart: Whether the Instance should be automatically
+	// restarted whenever it is terminated by Compute Engine (not terminated
+	// by user).
+	AutomaticRestart bool `json:"automaticRestart,omitempty"`
+
+	// OnHostMaintenance: How the instance should behave when the host
+	// machine undergoes maintenance that may temporarily impact instance
+	// performance.
+	OnHostMaintenance string `json:"onHostMaintenance,omitempty"`
+}
+
 type SerialPortOutput struct {
 	// Contents: The contents of the console output.
 	Contents string `json:"contents,omitempty"`
@@ -2185,7 +2210,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *AddressesAggregatedListCall) MaxResults(maxResults int64) *AddressesAggregatedListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -2246,7 +2272,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -2567,7 +2593,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *AddressesListCall) MaxResults(maxResults int64) *AddressesListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -2630,7 +2657,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -2692,7 +2719,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *DisksAggregatedListCall) MaxResults(maxResults int64) *DisksAggregatedListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -2753,7 +2781,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -3186,7 +3214,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *DisksListCall) MaxResults(maxResults int64) *DisksListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -3249,7 +3278,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -3542,7 +3571,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *FirewallsListCall) MaxResults(maxResults int64) *FirewallsListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -3603,7 +3633,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -3835,7 +3865,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *ForwardingRulesAggregatedListCall) MaxResults(maxResults int64) *ForwardingRulesAggregatedListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -3896,7 +3927,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -4217,7 +4248,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *ForwardingRulesListCall) MaxResults(maxResults int64) *ForwardingRulesListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -4280,7 +4312,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -4441,7 +4473,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *GlobalOperationsAggregatedListCall) MaxResults(maxResults int64) *GlobalOperationsAggregatedListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -4502,7 +4535,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -4704,7 +4737,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *GlobalOperationsListCall) MaxResults(maxResults int64) *GlobalOperationsListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -4765,7 +4799,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -5051,7 +5085,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *HttpHealthChecksListCall) MaxResults(maxResults int64) *HttpHealthChecksListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -5112,7 +5147,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -5666,7 +5701,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *ImagesListCall) MaxResults(maxResults int64) *ImagesListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -5727,7 +5763,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -5891,7 +5927,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *InstancesAggregatedListCall) MaxResults(maxResults int64) *InstancesAggregatedListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -5951,7 +5988,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -6665,7 +6702,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *InstancesListCall) MaxResults(maxResults int64) *InstancesListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -6728,7 +6766,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -6953,6 +6991,104 @@
 
 }
 
+// method id "compute.instances.setScheduling":
+
+type InstancesSetSchedulingCall struct {
+	s          *Service
+	project    string
+	zone       string
+	instance   string
+	scheduling *Scheduling
+	opt_       map[string]interface{}
+}
+
+// SetScheduling: Sets an instance's scheduling options.
+func (r *InstancesService) SetScheduling(project string, zone string, instance string, scheduling *Scheduling) *InstancesSetSchedulingCall {
+	c := &InstancesSetSchedulingCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.zone = zone
+	c.instance = instance
+	c.scheduling = scheduling
+	return c
+}
+
+func (c *InstancesSetSchedulingCall) Do() (*Operation, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.scheduling)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/zones/{zone}/instances/{instance}/setScheduling")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(Operation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Sets an instance's scheduling options.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.instances.setScheduling",
+	//   "parameterOrder": [
+	//     "project",
+	//     "zone",
+	//     "instance"
+	//   ],
+	//   "parameters": {
+	//     "instance": {
+	//       "description": "Instance name.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "project": {
+	//       "description": "Project name.",
+	//       "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": "Name of the zone scoping 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}/setScheduling",
+	//   "request": {
+	//     "$ref": "Scheduling"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
 // method id "compute.instances.setTags":
 
 type InstancesSetTagsCall struct {
@@ -7153,7 +7289,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *KernelsListCall) MaxResults(maxResults int64) *KernelsListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -7214,7 +7351,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -7270,7 +7407,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *MachineTypesAggregatedListCall) MaxResults(maxResults int64) *MachineTypesAggregatedListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -7331,7 +7469,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -7477,7 +7615,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *MachineTypesListCall) MaxResults(maxResults int64) *MachineTypesListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -7540,7 +7679,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -7833,7 +7972,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *NetworksListCall) MaxResults(maxResults int64) *NetworksListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -7894,7 +8034,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -8263,7 +8403,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *RegionOperationsListCall) MaxResults(maxResults int64) *RegionOperationsListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -8326,7 +8467,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -8466,7 +8607,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *RegionsListCall) MaxResults(maxResults int64) *RegionsListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -8527,7 +8669,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -8813,7 +8955,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *RoutesListCall) MaxResults(maxResults int64) *RoutesListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -8874,7 +9017,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -9083,7 +9226,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *SnapshotsListCall) MaxResults(maxResults int64) *SnapshotsListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -9144,7 +9288,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -9395,7 +9539,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *TargetPoolsAggregatedListCall) MaxResults(maxResults int64) *TargetPoolsAggregatedListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -9456,7 +9601,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -9877,7 +10022,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *TargetPoolsListCall) MaxResults(maxResults int64) *TargetPoolsListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -9940,7 +10086,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -10483,7 +10629,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *ZoneOperationsListCall) MaxResults(maxResults int64) *ZoneOperationsListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -10546,7 +10693,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
@@ -10686,7 +10833,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Maximum and default value is 100.
+// results to be returned. Maximum value is 500 and default value is
+// 100.
 func (c *ZonesListCall) MaxResults(maxResults int64) *ZonesListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -10747,7 +10895,7 @@
 	//     },
 	//     "maxResults": {
 	//       "default": "100",
-	//       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+	//       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "maximum": "500",
diff --git a/coordinate/v1/coordinate-api.json b/coordinate/v1/coordinate-api.json
index cff349b..e7d4954 100644
--- a/coordinate/v1/coordinate-api.json
+++ b/coordinate/v1/coordinate-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/PS-rvsWcMt99OOrOfl1upLydS0Y\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/PS-rvsWcMt99OOrOfl1upLydS0Y\"",
  "discoveryVersion": "v1",
  "id": "coordinate:v1",
  "name": "coordinate",
diff --git a/customsearch/v1/customsearch-api.json b/customsearch/v1/customsearch-api.json
index a2049dd..f46586e 100644
--- a/customsearch/v1/customsearch-api.json
+++ b/customsearch/v1/customsearch-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/5fAOCCT-EMDzKZ0hPKCYdJUAc9k\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/5fAOCCT-EMDzKZ0hPKCYdJUAc9k\"",
  "discoveryVersion": "v1",
  "id": "customsearch:v1",
  "name": "customsearch",
diff --git a/datastore/v1beta1/datastore-api.json b/datastore/v1beta1/datastore-api.json
index f560ab5..c79fdb7 100644
--- a/datastore/v1beta1/datastore-api.json
+++ b/datastore/v1beta1/datastore-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/YrLZoq09n__afr7YsPCxL5HrUUs\"",
+ "etag": "\"qMhxoRFWKZK4K3KdZJuqms1o3fc/YrLZoq09n__afr7YsPCxL5HrUUs\"",
  "discoveryVersion": "v1",
  "id": "datastore:v1beta1",
  "name": "datastore",
diff --git a/datastore/v1beta2/datastore-api.json b/datastore/v1beta2/datastore-api.json
index 7ce57e1..e528aea 100644
--- a/datastore/v1beta2/datastore-api.json
+++ b/datastore/v1beta2/datastore-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/-F8QVVz5h8Pedx8KHkOr-HeXpnU\"",
+ "etag": "\"qMhxoRFWKZK4K3KdZJuqms1o3fc/-F8QVVz5h8Pedx8KHkOr-HeXpnU\"",
  "discoveryVersion": "v1",
  "id": "datastore:v1beta2",
  "name": "datastore",
diff --git a/dfareporting/v1.1/dfareporting-api.json b/dfareporting/v1.1/dfareporting-api.json
index 811ef17..59d2087 100644
--- a/dfareporting/v1.1/dfareporting-api.json
+++ b/dfareporting/v1.1/dfareporting-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/YdK1I3o4ZOUVUrD_2k7BkdHqzyQ\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/YdK1I3o4ZOUVUrD_2k7BkdHqzyQ\"",
  "discoveryVersion": "v1",
  "id": "dfareporting:v1.1",
  "name": "dfareporting",
diff --git a/dfareporting/v1.2/dfareporting-api.json b/dfareporting/v1.2/dfareporting-api.json
index 464eddc..007368c 100644
--- a/dfareporting/v1.2/dfareporting-api.json
+++ b/dfareporting/v1.2/dfareporting-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/qvRmv3vpF4CuJWK6RzcX1h-stNI\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/qvRmv3vpF4CuJWK6RzcX1h-stNI\"",
  "discoveryVersion": "v1",
  "id": "dfareporting:v1.2",
  "name": "dfareporting",
diff --git a/dfareporting/v1.3/dfareporting-api.json b/dfareporting/v1.3/dfareporting-api.json
index dd71af3..163d43e 100644
--- a/dfareporting/v1.3/dfareporting-api.json
+++ b/dfareporting/v1.3/dfareporting-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/bg8eKhQkwGnobYThDWedv2Ar2Io\"",
+ "etag": "\"qMhxoRFWKZK4K3KdZJuqms1o3fc/bg8eKhQkwGnobYThDWedv2Ar2Io\"",
  "discoveryVersion": "v1",
  "id": "dfareporting:v1.3",
  "name": "dfareporting",
diff --git a/dfareporting/v1/dfareporting-api.json b/dfareporting/v1/dfareporting-api.json
index 7406e4d..7112158 100644
--- a/dfareporting/v1/dfareporting-api.json
+++ b/dfareporting/v1/dfareporting-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/Km2zbuxZrnAbsnnH2v5x6aMXpTA\"",
+ "etag": "\"qMhxoRFWKZK4K3KdZJuqms1o3fc/Km2zbuxZrnAbsnnH2v5x6aMXpTA\"",
  "discoveryVersion": "v1",
  "id": "dfareporting:v1",
  "name": "dfareporting",
diff --git a/discovery/v1/discovery-api.json b/discovery/v1/discovery-api.json
index d81a169..0076aff 100644
--- a/discovery/v1/discovery-api.json
+++ b/discovery/v1/discovery-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/dG1NDjLwo4MlEwru1sJtI5oHDJM\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/dG1NDjLwo4MlEwru1sJtI5oHDJM\"",
  "discoveryVersion": "v1",
  "id": "discovery:v1",
  "name": "discovery",
diff --git a/doubleclickbidmanager/v1/doubleclickbidmanager-api.json b/doubleclickbidmanager/v1/doubleclickbidmanager-api.json
index 4d19853..9b0d374 100644
--- a/doubleclickbidmanager/v1/doubleclickbidmanager-api.json
+++ b/doubleclickbidmanager/v1/doubleclickbidmanager-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/boMHB08kZ6q795gOqaVisEQDjHU\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/boMHB08kZ6q795gOqaVisEQDjHU\"",
  "discoveryVersion": "v1",
  "id": "doubleclickbidmanager:v1",
  "name": "doubleclickbidmanager",
diff --git a/doubleclicksearch/v2/doubleclicksearch-api.json b/doubleclicksearch/v2/doubleclicksearch-api.json
index 59d9fd2..ab44fbe 100644
--- a/doubleclicksearch/v2/doubleclicksearch-api.json
+++ b/doubleclicksearch/v2/doubleclicksearch-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/RGhRKxO_GjBXj5TYzl087SnSEic\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/RGhRKxO_GjBXj5TYzl087SnSEic\"",
  "discoveryVersion": "v1",
  "id": "doubleclicksearch:v2",
  "name": "doubleclicksearch",
diff --git a/drive/v1/drive-api.json b/drive/v1/drive-api.json
index af0d145..fbf0838 100644
--- a/drive/v1/drive-api.json
+++ b/drive/v1/drive-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/BKZEraeTG_UbClCUMdkKci-Mt0c\"",
+ "etag": "\"qMhxoRFWKZK4K3KdZJuqms1o3fc/rxVbU8eh1vQD-6UeVy5fvAHaxjo\"",
  "discoveryVersion": "v1",
  "id": "drive:v1",
  "name": "drive",
@@ -320,7 +320,7 @@
       },
       "newRevision": {
        "type": "boolean",
-       "description": "Whether a blob upload should create a new revision. If not set or false, the blob data in the current head revision will be replaced.",
+       "description": "Whether a blob upload should create a new revision. If false, the blob data in the current head revision is replaced. If not set or true, a new blob is created as head revision, and previous revisions are preserved (causing increased use of the user's data storage quota).",
        "default": "true",
        "location": "query"
       },
@@ -364,7 +364,7 @@
       },
       "newRevision": {
        "type": "boolean",
-       "description": "Whether a blob upload should create a new revision. If not set or false, the blob data in the current head revision will be replaced.",
+       "description": "Whether a blob upload should create a new revision. If false, the blob data in the current head revision is replaced. If not set or true, a new blob is created as head revision, and previous revisions are preserved (causing increased use of the user's data storage quota).",
        "default": "true",
        "location": "query"
       },
diff --git a/drive/v1/drive-gen.go b/drive/v1/drive-gen.go
index 9530818..0a16353 100644
--- a/drive/v1/drive-gen.go
+++ b/drive/v1/drive-gen.go
@@ -401,8 +401,10 @@
 }
 
 // NewRevision sets the optional parameter "newRevision": Whether a blob
-// upload should create a new revision. If not set or false, the blob
-// data in the current head revision will be replaced.
+// upload should create a new revision. If false, the blob data in the
+// current head revision is replaced. If not set or true, a new blob is
+// created as head revision, and previous revisions are preserved
+// (causing increased use of the user's data storage quota).
 func (c *FilesPatchCall) NewRevision(newRevision bool) *FilesPatchCall {
 	c.opt_["newRevision"] = newRevision
 	return c
@@ -480,7 +482,7 @@
 	//     },
 	//     "newRevision": {
 	//       "default": "true",
-	//       "description": "Whether a blob upload should create a new revision. If not set or false, the blob data in the current head revision will be replaced.",
+	//       "description": "Whether a blob upload should create a new revision. If false, the blob data in the current head revision is replaced. If not set or true, a new blob is created as head revision, and previous revisions are preserved (causing increased use of the user's data storage quota).",
 	//       "location": "query",
 	//       "type": "boolean"
 	//     },
@@ -530,8 +532,10 @@
 }
 
 // NewRevision sets the optional parameter "newRevision": Whether a blob
-// upload should create a new revision. If not set or false, the blob
-// data in the current head revision will be replaced.
+// upload should create a new revision. If false, the blob data in the
+// current head revision is replaced. If not set or true, a new blob is
+// created as head revision, and previous revisions are preserved
+// (causing increased use of the user's data storage quota).
 func (c *FilesUpdateCall) NewRevision(newRevision bool) *FilesUpdateCall {
 	c.opt_["newRevision"] = newRevision
 	return c
@@ -637,7 +641,7 @@
 	//     },
 	//     "newRevision": {
 	//       "default": "true",
-	//       "description": "Whether a blob upload should create a new revision. If not set or false, the blob data in the current head revision will be replaced.",
+	//       "description": "Whether a blob upload should create a new revision. If false, the blob data in the current head revision is replaced. If not set or true, a new blob is created as head revision, and previous revisions are preserved (causing increased use of the user's data storage quota).",
 	//       "location": "query",
 	//       "type": "boolean"
 	//     },
diff --git a/drive/v2/drive-api.json b/drive/v2/drive-api.json
index 4c299a0..e165f7c 100644
--- a/drive/v2/drive-api.json
+++ b/drive/v2/drive-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/AFnpisGyT0XxOrZz7gMWdR5PpRg\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/wC5CIevsGN3DREvDOOaUSmrkhxI\"",
  "discoveryVersion": "v1",
  "id": "drive:v2",
  "name": "drive",
@@ -285,6 +285,14 @@
      "type": "boolean",
      "description": "Whether the app is authorized to access data on the user's Drive."
     },
+    "createInFolderTemplate": {
+     "type": "string",
+     "description": "The template url to create a new file with this app in a given folder. The template will contain {folderId} to be replaced by the folder to create the new file in."
+    },
+    "createUrl": {
+     "type": "string",
+     "description": "The url to create a new file with this app."
+    },
     "icons": {
      "type": "array",
      "description": "The various icons for the app.",
@@ -1119,7 +1127,7 @@
     },
     "properties": {
      "type": "array",
-     "description": "The list of properties.",
+     "description": "The list of properties. This is a write-only field.",
      "items": {
       "$ref": "Property"
      }
@@ -1674,7 +1682,12 @@
       "$ref": "App"
      },
      "scopes": [
-      "https://www.googleapis.com/auth/drive.apps.readonly"
+      "https://www.googleapis.com/auth/drive",
+      "https://www.googleapis.com/auth/drive.appdata",
+      "https://www.googleapis.com/auth/drive.apps.readonly",
+      "https://www.googleapis.com/auth/drive.file",
+      "https://www.googleapis.com/auth/drive.metadata.readonly",
+      "https://www.googleapis.com/auth/drive.readonly"
      ]
     },
     "list": {
@@ -2516,7 +2529,7 @@
       },
       "newRevision": {
        "type": "boolean",
-       "description": "Whether a blob upload should create a new revision. If not set or false, the blob data in the current head revision is replaced. If true, a new blob is created as head revision, and previous revisions are preserved (causing increased use of the user's data storage quota).",
+       "description": "Whether a blob upload should create a new revision. If false, the blob data in the current head revision is replaced. If not set or true, a new blob is created as head revision, and previous revisions are preserved (causing increased use of the user's data storage quota).",
        "default": "true",
        "location": "query"
       },
@@ -2679,7 +2692,7 @@
       },
       "newRevision": {
        "type": "boolean",
-       "description": "Whether a blob upload should create a new revision. If not set or false, the blob data in the current head revision is replaced. If true, a new blob is created as head revision, and previous revisions are preserved (causing increased use of the user's data storage quota).",
+       "description": "Whether a blob upload should create a new revision. If false, the blob data in the current head revision is replaced. If not set or true, a new blob is created as head revision, and previous revisions are preserved (causing increased use of the user's data storage quota).",
        "default": "true",
        "location": "query"
       },
diff --git a/drive/v2/drive-gen.go b/drive/v2/drive-gen.go
index b4f283c..e3359dd 100644
--- a/drive/v2/drive-gen.go
+++ b/drive/v2/drive-gen.go
@@ -355,6 +355,14 @@
 	// user's Drive.
 	Authorized bool `json:"authorized,omitempty"`
 
+	// CreateInFolderTemplate: The template url to create a new file with
+	// this app in a given folder. The template will contain {folderId} to
+	// be replaced by the folder to create the new file in.
+	CreateInFolderTemplate string `json:"createInFolderTemplate,omitempty"`
+
+	// CreateUrl: The url to create a new file with this app.
+	CreateUrl string `json:"createUrl,omitempty"`
+
 	// Icons: The various icons for the app.
 	Icons []*AppIcons `json:"icons,omitempty"`
 
@@ -847,7 +855,7 @@
 	// placed in the default root folder.
 	Parents []*ParentReference `json:"parents,omitempty"`
 
-	// Properties: The list of properties.
+	// Properties: The list of properties. This is a write-only field.
 	Properties []*Property `json:"properties,omitempty"`
 
 	// QuotaBytesUsed: The number of quota bytes used by this file.
@@ -1455,7 +1463,12 @@
 	//     "$ref": "App"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/drive.apps.readonly"
+	//     "https://www.googleapis.com/auth/drive",
+	//     "https://www.googleapis.com/auth/drive.appdata",
+	//     "https://www.googleapis.com/auth/drive.apps.readonly",
+	//     "https://www.googleapis.com/auth/drive.file",
+	//     "https://www.googleapis.com/auth/drive.metadata.readonly",
+	//     "https://www.googleapis.com/auth/drive.readonly"
 	//   ]
 	// }
 
@@ -3569,8 +3582,8 @@
 }
 
 // NewRevision sets the optional parameter "newRevision": Whether a blob
-// upload should create a new revision. If not set or false, the blob
-// data in the current head revision is replaced. If true, a new blob is
+// upload should create a new revision. If false, the blob data in the
+// current head revision is replaced. If not set or true, a new blob is
 // created as head revision, and previous revisions are preserved
 // (causing increased use of the user's data storage quota).
 func (c *FilesPatchCall) NewRevision(newRevision bool) *FilesPatchCall {
@@ -3716,7 +3729,7 @@
 	//     },
 	//     "newRevision": {
 	//       "default": "true",
-	//       "description": "Whether a blob upload should create a new revision. If not set or false, the blob data in the current head revision is replaced. If true, a new blob is created as head revision, and previous revisions are preserved (causing increased use of the user's data storage quota).",
+	//       "description": "Whether a blob upload should create a new revision. If false, the blob data in the current head revision is replaced. If not set or true, a new blob is created as head revision, and previous revisions are preserved (causing increased use of the user's data storage quota).",
 	//       "location": "query",
 	//       "type": "boolean"
 	//     },
@@ -4009,8 +4022,8 @@
 }
 
 // NewRevision sets the optional parameter "newRevision": Whether a blob
-// upload should create a new revision. If not set or false, the blob
-// data in the current head revision is replaced. If true, a new blob is
+// upload should create a new revision. If false, the blob data in the
+// current head revision is replaced. If not set or true, a new blob is
 // created as head revision, and previous revisions are preserved
 // (causing increased use of the user's data storage quota).
 func (c *FilesUpdateCall) NewRevision(newRevision bool) *FilesUpdateCall {
@@ -4184,7 +4197,7 @@
 	//     },
 	//     "newRevision": {
 	//       "default": "true",
-	//       "description": "Whether a blob upload should create a new revision. If not set or false, the blob data in the current head revision is replaced. If true, a new blob is created as head revision, and previous revisions are preserved (causing increased use of the user's data storage quota).",
+	//       "description": "Whether a blob upload should create a new revision. If false, the blob data in the current head revision is replaced. If not set or true, a new blob is created as head revision, and previous revisions are preserved (causing increased use of the user's data storage quota).",
 	//       "location": "query",
 	//       "type": "boolean"
 	//     },
diff --git a/freebase/v1-sandbox/freebase-api.json b/freebase/v1-sandbox/freebase-api.json
index b78f8b2..c371aff 100644
--- a/freebase/v1-sandbox/freebase-api.json
+++ b/freebase/v1-sandbox/freebase-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/U99ZyknsLQRi0oWob1lL-8fNevE\"",
+ "etag": "\"qMhxoRFWKZK4K3KdZJuqms1o3fc/U99ZyknsLQRi0oWob1lL-8fNevE\"",
  "discoveryVersion": "v1",
  "id": "freebase:v1-sandbox",
  "name": "freebase",
diff --git a/freebase/v1/freebase-api.json b/freebase/v1/freebase-api.json
index 19ab58d..106d2fd 100644
--- a/freebase/v1/freebase-api.json
+++ b/freebase/v1/freebase-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/jrWF9ZghWXSXmX56XJpkx2_G8NU\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/jrWF9ZghWXSXmX56XJpkx2_G8NU\"",
  "discoveryVersion": "v1",
  "id": "freebase:v1",
  "name": "freebase",
diff --git a/freebase/v1sandbox/freebase-api.json b/freebase/v1sandbox/freebase-api.json
index 2cb2491..0e288ee 100644
--- a/freebase/v1sandbox/freebase-api.json
+++ b/freebase/v1sandbox/freebase-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/8YSaj7jxmSfjsRrYtwnK2dHVPrQ\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/8YSaj7jxmSfjsRrYtwnK2dHVPrQ\"",
  "discoveryVersion": "v1",
  "id": "freebase:v1sandbox",
  "name": "freebase",
diff --git a/games/v1/games-api.json b/games/v1/games-api.json
index 5ecb571..d9b54cf 100644
--- a/games/v1/games-api.json
+++ b/games/v1/games-api.json
@@ -1,9 +1,10 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/Fv7vACHdCcGdY_nhHAAW_ODWfDQ\"",
+ "etag": "\"qMhxoRFWKZK4K3KdZJuqms1o3fc/jKO4sSDWQHdq9guVUNuYuRRGT2M\"",
  "discoveryVersion": "v1",
  "id": "games:v1",
  "name": "games",
+ "canonicalName": "Games",
  "version": "v1",
  "title": "Google Play Game Services API",
  "description": "The API for Google Play Game Services.",
@@ -195,6 +196,27 @@
     }
    }
   },
+  "AchievementSetStepsAtLeastResponse": {
+   "id": "AchievementSetStepsAtLeastResponse",
+   "type": "object",
+   "description": "This is a JSON template for an achievement set steps at least response.",
+   "properties": {
+    "currentSteps": {
+     "type": "integer",
+     "description": "The current steps recorded for this incremental achievement.",
+     "format": "int32"
+    },
+    "kind": {
+     "type": "string",
+     "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#achievementSetStepsAtLeastResponse.",
+     "default": "games#achievementSetStepsAtLeastResponse"
+    },
+    "newlyUnlocked": {
+     "type": "boolean",
+     "description": "Whether the the current steps for the achievement has reached the number of steps required to unlock."
+    }
+   }
+  },
   "AchievementUnlockResponse": {
    "id": "AchievementUnlockResponse",
    "type": "object",
@@ -211,6 +233,105 @@
     }
    }
   },
+  "AchievementUpdateMultipleRequest": {
+   "id": "AchievementUpdateMultipleRequest",
+   "type": "object",
+   "description": "This is a JSON template for a list of achievement update requests.",
+   "properties": {
+    "kind": {
+     "type": "string",
+     "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#achievementUpdateMultipleRequest.",
+     "default": "games#achievementUpdateMultipleRequest"
+    },
+    "updates": {
+     "type": "array",
+     "description": "The individual achievement update requests.",
+     "items": {
+      "$ref": "AchievementUpdateRequest"
+     }
+    }
+   }
+  },
+  "AchievementUpdateMultipleResponse": {
+   "id": "AchievementUpdateMultipleResponse",
+   "type": "object",
+   "description": "This is a JSON template for an achievement unlock response.",
+   "properties": {
+    "kind": {
+     "type": "string",
+     "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#achievementUpdateListResponse.",
+     "default": "games#achievementUpdateMultipleResponse"
+    },
+    "updatedAchievements": {
+     "type": "array",
+     "description": "The updated state of the achievements.",
+     "items": {
+      "$ref": "AchievementUpdateResponse"
+     }
+    }
+   }
+  },
+  "AchievementUpdateRequest": {
+   "id": "AchievementUpdateRequest",
+   "type": "object",
+   "description": "This is a JSON template for a request to update an achievement.",
+   "properties": {
+    "achievementId": {
+     "type": "string",
+     "description": "The achievement this update is being applied to."
+    },
+    "incrementPayload": {
+     "$ref": "GamesAchievementIncrement",
+     "description": "The payload if an update of type INCREMENT was requested for the achievement."
+    },
+    "kind": {
+     "type": "string",
+     "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#achievementUpdateRequest.",
+     "default": "games#achievementUpdateRequest"
+    },
+    "setStepsAtLeastPayload": {
+     "$ref": "GamesAchievementSetStepsAtLeast",
+     "description": "The payload if an update of type SET_STEPS_AT_LEAST was requested for the achievement."
+    },
+    "updateType": {
+     "type": "string",
+     "description": "The type of update being applied.\nPossible values are:  \n- \"REVEAL\" - Achievement is revealed. \n- \"UNLOCK\" - Achievement is unlocked. \n- \"INCREMENT\" - Achievement is incremented. \n- \"SET_STEPS_AT_LEAST\" - Achievement progress is set to at least the passed value."
+    }
+   }
+  },
+  "AchievementUpdateResponse": {
+   "id": "AchievementUpdateResponse",
+   "type": "object",
+   "description": "This is a JSON template for an achievement update response.",
+   "properties": {
+    "achievementId": {
+     "type": "string",
+     "description": "The achievement this update is was applied to."
+    },
+    "currentState": {
+     "type": "string",
+     "description": "The current state of the achievement.\nPossible values are:  \n- \"HIDDEN\" - Achievement is hidden. \n- \"REVEALED\" - Achievement is revealed. \n- \"UNLOCKED\" - Achievement is unlocked."
+    },
+    "currentSteps": {
+     "type": "integer",
+     "description": "The current steps recorded for this achievement if it is incremental.",
+     "format": "int32"
+    },
+    "kind": {
+     "type": "string",
+     "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#achievementUpdateResponse.",
+     "default": "games#achievementUpdateResponse"
+    },
+    "newlyUnlocked": {
+     "type": "boolean",
+     "description": "Whether this achievement was newly unlocked (that is, whether the unlock request for the achievement was the first for the player)."
+    },
+    "updateOccurred": {
+     "type": "boolean",
+     "description": "Whether the requested updates actually affected the achievement."
+    }
+   }
+  },
   "AggregateStats": {
    "id": "AggregateStats",
    "type": "object",
@@ -344,6 +465,45 @@
     }
    }
   },
+  "GamesAchievementIncrement": {
+   "id": "GamesAchievementIncrement",
+   "type": "object",
+   "description": "This is a JSON template for the payload to request to increment an achievement.",
+   "properties": {
+    "kind": {
+     "type": "string",
+     "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#GamesAchievementIncrement.",
+     "default": "games#GamesAchievementIncrement"
+    },
+    "requestId": {
+     "type": "string",
+     "description": "The requestId associated with an increment to an achievement.",
+     "format": "int64"
+    },
+    "steps": {
+     "type": "integer",
+     "description": "The number of steps to be incremented.",
+     "format": "int32"
+    }
+   }
+  },
+  "GamesAchievementSetStepsAtLeast": {
+   "id": "GamesAchievementSetStepsAtLeast",
+   "type": "object",
+   "description": "This is a JSON template for the payload to request to increment an achievement.",
+   "properties": {
+    "kind": {
+     "type": "string",
+     "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#GamesAchievementSetStepsAtLeast.",
+     "default": "games#GamesAchievementSetStepsAtLeast"
+    },
+    "steps": {
+     "type": "integer",
+     "description": "The minimum number of steps for the achievement to be set to.",
+     "format": "int32"
+    }
+   }
+  },
   "ImageAsset": {
    "id": "ImageAsset",
    "type": "object",
@@ -557,6 +717,10 @@
      "description": "The rank of this score for this leaderboard.",
      "format": "int64"
     },
+    "scoreTag": {
+     "type": "string",
+     "description": "Additional information about the score. Values must contain no more than 64 URI-safe characters as defined by section 2.3 of RFC 3986."
+    },
     "scoreValue": {
      "type": "string",
      "description": "The numerical value of this score.",
@@ -865,6 +1029,10 @@
      "type": "string",
      "description": "The formatted value of this score."
     },
+    "scoreTag": {
+     "type": "string",
+     "description": "Additional information about the score. Values must contain no more than 64 URI-safe characters as defined by section 2.3 of RFC 3986."
+    },
     "scoreValue": {
      "type": "string",
      "description": "The numerical value of this score.",
@@ -905,6 +1073,10 @@
     "nextPageToken": {
      "type": "string",
      "description": "The pagination token for the next page of results."
+    },
+    "player": {
+     "$ref": "Player",
+     "description": "The Player resources for the owner of this score."
     }
    }
   },
@@ -927,6 +1099,10 @@
      "description": "The numerical value for this player score.",
      "format": "int64"
     },
+    "scoreTag": {
+     "type": "string",
+     "description": "Additional information about this score. Values will contain no more than 64 URI-safe characters as defined by section 2.3 of RFC 3986."
+    },
     "timeSpan": {
      "type": "string",
      "description": "The time span for this player score.\nPossible values are:  \n- \"ALL_TIME\" - The score is an all-time score. \n- \"WEEKLY\" - The score is a weekly score. \n- \"DAILY\" - The score is a daily score."
@@ -977,6 +1153,10 @@
      "type": "string",
      "description": "The leaderboard ID that this score was submitted to."
     },
+    "scoreTag": {
+     "type": "string",
+     "description": "Additional information about this score. Values will contain no more than 64 URI-safe characters as defined by section 2.3 of RFC 3986."
+    },
     "unbeatenScores": {
      "type": "array",
      "description": "The scores in time spans that have not been beaten. As an example, the submitted score may be better than the player's DAILY score, but not better than the player's scores for the WEEKLY or ALL_TIME time spans.",
@@ -1010,6 +1190,10 @@
    "type": "object",
    "description": "This is a JSON template for the result of checking a revision.",
    "properties": {
+    "apiVersion": {
+     "type": "string",
+     "description": "The version of the API this client revision should use when calling API methods."
+    },
     "kind": {
      "type": "string",
      "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#revisionCheckResponse.",
@@ -1373,7 +1557,7 @@
    "properties": {
     "autoMatchedPlayer": {
      "$ref": "AnonymousPlayer",
-     "description": "Information about a player that has been auto-matched against the requesting player. (Either player or autoMatchedPlayer will be set.)"
+     "description": "Information about a player that has been anonymously auto-matched against the requesting player. (Either player or autoMatchedPlayer will be set.)"
     },
     "capabilities": {
      "type": "array",
@@ -1405,7 +1589,7 @@
     },
     "player": {
      "$ref": "Player",
-     "description": "Information about the player. Not populated if this player was auto-matched against the requesting player. (Either player or autoMatchedPlayer will be set.)"
+     "description": "Information about the player. Not populated if this player was anonymously auto-matched against the requesting player. (Either player or autoMatchedPlayer will be set.)"
     },
     "status": {
      "type": "string",
@@ -1467,6 +1651,11 @@
      "type": "string",
      "description": "The new score being submitted.",
      "format": "int64"
+    },
+    "scoreTag": {
+     "type": "string",
+     "description": "Additional information about this score. Values will contain no more than 64 URI-safe characters as defined by section 2.3 of RFC 3986.",
+     "pattern": "[a-zA-Z0-9-._~]{0,64}"
     }
    }
   }
@@ -1633,6 +1822,39 @@
       "https://www.googleapis.com/auth/plus.login"
      ]
     },
+    "setStepsAtLeast": {
+     "id": "games.achievements.setStepsAtLeast",
+     "path": "achievements/{achievementId}/setStepsAtLeast",
+     "httpMethod": "POST",
+     "description": "Sets the steps for the currently authenticated player towards unlocking an achievement. If the steps parameter is less than the current number of steps that the player already gained for the achievement, the achievement is not modified.",
+     "parameters": {
+      "achievementId": {
+       "type": "string",
+       "description": "The ID of the achievement used by this method.",
+       "required": true,
+       "location": "path"
+      },
+      "steps": {
+       "type": "integer",
+       "description": "The minimum value to set the steps to.",
+       "required": true,
+       "format": "int32",
+       "minimum": "1",
+       "location": "query"
+      }
+     },
+     "parameterOrder": [
+      "achievementId",
+      "steps"
+     ],
+     "response": {
+      "$ref": "AchievementSetStepsAtLeastResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/games",
+      "https://www.googleapis.com/auth/plus.login"
+     ]
+    },
     "unlock": {
      "id": "games.achievements.unlock",
      "path": "achievements/{achievementId}/unlock",
@@ -1656,6 +1878,22 @@
       "https://www.googleapis.com/auth/games",
       "https://www.googleapis.com/auth/plus.login"
      ]
+    },
+    "updateMultiple": {
+     "id": "games.achievements.updateMultiple",
+     "path": "achievements/updateMultiple",
+     "httpMethod": "POST",
+     "description": "Updates multiple achievements for the currently authenticated player.",
+     "request": {
+      "$ref": "AchievementUpdateMultipleRequest"
+     },
+     "response": {
+      "$ref": "AchievementUpdateMultipleResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/games",
+      "https://www.googleapis.com/auth/plus.login"
+     ]
     }
    }
   },
@@ -1821,7 +2059,7 @@
      "parameters": {
       "clientRevision": {
        "type": "string",
-       "description": "The revision of the client SDK used by your application.",
+       "description": "The revision of the client SDK used by your application. Format:\n[PLATFORM_TYPE]:[VERSION_NUMBER]. Possible values of PLATFORM_TYPE are:\n \n- \"ANDROID\" - Client is running the Android SDK. \n- \"IOS\" - Client is running the iOS SDK. \n- \"WEB_APP\" - Client is running as a Web App.",
        "required": true,
        "location": "query"
       }
@@ -2321,6 +2559,12 @@
        "required": true,
        "format": "int64",
        "location": "query"
+      },
+      "scoreTag": {
+       "type": "string",
+       "description": "Additional information about the score you're submitting. Values must contain no more than 64 URI-safe characters as defined by section 2.3 of RFC 3986.",
+       "pattern": "[a-zA-Z0-9-._~]{0,64}",
+       "location": "query"
       }
      },
      "parameterOrder": [
diff --git a/games/v1/games-gen.go b/games/v1/games-gen.go
index a7cbdc7..4d6e940 100644
--- a/games/v1/games-gen.go
+++ b/games/v1/games-gen.go
@@ -250,6 +250,20 @@
 	Kind string `json:"kind,omitempty"`
 }
 
+type AchievementSetStepsAtLeastResponse struct {
+	// CurrentSteps: The current steps recorded for this incremental
+	// achievement.
+	CurrentSteps int64 `json:"currentSteps,omitempty"`
+
+	// Kind: Uniquely identifies the type of this resource. Value is always
+	// the fixed string games#achievementSetStepsAtLeastResponse.
+	Kind string `json:"kind,omitempty"`
+
+	// NewlyUnlocked: Whether the the current steps for the achievement has
+	// reached the number of steps required to unlock.
+	NewlyUnlocked bool `json:"newlyUnlocked,omitempty"`
+}
+
 type AchievementUnlockResponse struct {
 	// Kind: Uniquely identifies the type of this resource. Value is always
 	// the fixed string games#achievementUnlockResponse.
@@ -261,6 +275,84 @@
 	NewlyUnlocked bool `json:"newlyUnlocked,omitempty"`
 }
 
+type AchievementUpdateMultipleRequest struct {
+	// Kind: Uniquely identifies the type of this resource. Value is always
+	// the fixed string games#achievementUpdateMultipleRequest.
+	Kind string `json:"kind,omitempty"`
+
+	// Updates: The individual achievement update requests.
+	Updates []*AchievementUpdateRequest `json:"updates,omitempty"`
+}
+
+type AchievementUpdateMultipleResponse struct {
+	// Kind: Uniquely identifies the type of this resource. Value is always
+	// the fixed string games#achievementUpdateListResponse.
+	Kind string `json:"kind,omitempty"`
+
+	// UpdatedAchievements: The updated state of the achievements.
+	UpdatedAchievements []*AchievementUpdateResponse `json:"updatedAchievements,omitempty"`
+}
+
+type AchievementUpdateRequest struct {
+	// AchievementId: The achievement this update is being applied to.
+	AchievementId string `json:"achievementId,omitempty"`
+
+	// IncrementPayload: The payload if an update of type INCREMENT was
+	// requested for the achievement.
+	IncrementPayload *GamesAchievementIncrement `json:"incrementPayload,omitempty"`
+
+	// Kind: Uniquely identifies the type of this resource. Value is always
+	// the fixed string games#achievementUpdateRequest.
+	Kind string `json:"kind,omitempty"`
+
+	// SetStepsAtLeastPayload: The payload if an update of type
+	// SET_STEPS_AT_LEAST was requested for the achievement.
+	SetStepsAtLeastPayload *GamesAchievementSetStepsAtLeast `json:"setStepsAtLeastPayload,omitempty"`
+
+	// UpdateType: The type of update being applied.
+	// Possible values are:
+	//
+	// - "REVEAL" - Achievement is revealed.
+	// - "UNLOCK" - Achievement is
+	// unlocked.
+	// - "INCREMENT" - Achievement is incremented.
+	// -
+	// "SET_STEPS_AT_LEAST" - Achievement progress is set to at least the
+	// passed value.
+	UpdateType string `json:"updateType,omitempty"`
+}
+
+type AchievementUpdateResponse struct {
+	// AchievementId: The achievement this update is was applied to.
+	AchievementId string `json:"achievementId,omitempty"`
+
+	// CurrentState: The current state of the achievement.
+	// Possible values
+	// are:
+	// - "HIDDEN" - Achievement is hidden.
+	// - "REVEALED" -
+	// Achievement is revealed.
+	// - "UNLOCKED" - Achievement is unlocked.
+	CurrentState string `json:"currentState,omitempty"`
+
+	// CurrentSteps: The current steps recorded for this achievement if it
+	// is incremental.
+	CurrentSteps int64 `json:"currentSteps,omitempty"`
+
+	// Kind: Uniquely identifies the type of this resource. Value is always
+	// the fixed string games#achievementUpdateResponse.
+	Kind string `json:"kind,omitempty"`
+
+	// NewlyUnlocked: Whether this achievement was newly unlocked (that is,
+	// whether the unlock request for the achievement was the first for the
+	// player).
+	NewlyUnlocked bool `json:"newlyUnlocked,omitempty"`
+
+	// UpdateOccurred: Whether the requested updates actually affected the
+	// achievement.
+	UpdateOccurred bool `json:"updateOccurred,omitempty"`
+}
+
 type AggregateStats struct {
 	// Count: The number of messages sent between a pair of peers.
 	Count int64 `json:"count,omitempty,string"`
@@ -343,6 +435,28 @@
 	Secondary string `json:"secondary,omitempty"`
 }
 
+type GamesAchievementIncrement struct {
+	// Kind: Uniquely identifies the type of this resource. Value is always
+	// the fixed string games#GamesAchievementIncrement.
+	Kind string `json:"kind,omitempty"`
+
+	// RequestId: The requestId associated with an increment to an
+	// achievement.
+	RequestId int64 `json:"requestId,omitempty,string"`
+
+	// Steps: The number of steps to be incremented.
+	Steps int64 `json:"steps,omitempty"`
+}
+
+type GamesAchievementSetStepsAtLeast struct {
+	// Kind: Uniquely identifies the type of this resource. Value is always
+	// the fixed string games#GamesAchievementSetStepsAtLeast.
+	Kind string `json:"kind,omitempty"`
+
+	// Steps: The minimum number of steps for the achievement to be set to.
+	Steps int64 `json:"steps,omitempty"`
+}
+
 type ImageAsset struct {
 	// Height: The height of the asset.
 	Height int64 `json:"height,omitempty"`
@@ -503,6 +617,11 @@
 	// ScoreRank: The rank of this score for this leaderboard.
 	ScoreRank int64 `json:"scoreRank,omitempty,string"`
 
+	// ScoreTag: Additional information about the score. Values must contain
+	// no more than 64 URI-safe characters as defined by section 2.3 of RFC
+	// 3986.
+	ScoreTag string `json:"scoreTag,omitempty"`
+
 	// ScoreValue: The numerical value of this score.
 	ScoreValue int64 `json:"scoreValue,omitempty,string"`
 
@@ -711,6 +830,11 @@
 	// ScoreString: The formatted value of this score.
 	ScoreString string `json:"scoreString,omitempty"`
 
+	// ScoreTag: Additional information about the score. Values must contain
+	// no more than 64 URI-safe characters as defined by section 2.3 of RFC
+	// 3986.
+	ScoreTag string `json:"scoreTag,omitempty"`
+
 	// ScoreValue: The numerical value of this score.
 	ScoreValue int64 `json:"scoreValue,omitempty,string"`
 
@@ -741,6 +865,9 @@
 
 	// NextPageToken: The pagination token for the next page of results.
 	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// Player: The Player resources for the owner of this score.
+	Player *Player `json:"player,omitempty"`
 }
 
 type PlayerScore struct {
@@ -754,6 +881,11 @@
 	// Score: The numerical value for this player score.
 	Score int64 `json:"score,omitempty,string"`
 
+	// ScoreTag: Additional information about this score. Values will
+	// contain no more than 64 URI-safe characters as defined by section 2.3
+	// of RFC 3986.
+	ScoreTag string `json:"scoreTag,omitempty"`
+
 	// TimeSpan: The time span for this player score.
 	// Possible values are:
 	//
@@ -794,6 +926,11 @@
 	// LeaderboardId: The leaderboard ID that this score was submitted to.
 	LeaderboardId string `json:"leaderboardId,omitempty"`
 
+	// ScoreTag: Additional information about this score. Values will
+	// contain no more than 64 URI-safe characters as defined by section 2.3
+	// of RFC 3986.
+	ScoreTag string `json:"scoreTag,omitempty"`
+
 	// UnbeatenScores: The scores in time spans that have not been beaten.
 	// As an example, the submitted score may be better than the player's
 	// DAILY score, but not better than the player's scores for the WEEKLY
@@ -811,6 +948,10 @@
 }
 
 type RevisionCheckResponse struct {
+	// ApiVersion: The version of the API this client revision should use
+	// when calling API methods.
+	ApiVersion string `json:"apiVersion,omitempty"`
+
 	// Kind: Uniquely identifies the type of this resource. Value is always
 	// the fixed string games#revisionCheckResponse.
 	Kind string `json:"kind,omitempty"`
@@ -1107,8 +1248,8 @@
 
 type RoomParticipant struct {
 	// AutoMatchedPlayer: Information about a player that has been
-	// auto-matched against the requesting player. (Either player or
-	// autoMatchedPlayer will be set.)
+	// anonymously auto-matched against the requesting player. (Either
+	// player or autoMatchedPlayer will be set.)
 	AutoMatchedPlayer *AnonymousPlayer `json:"autoMatchedPlayer,omitempty"`
 
 	// Capabilities: The capabilities which can be used when communicating
@@ -1153,8 +1294,8 @@
 	LeaveReason string `json:"leaveReason,omitempty"`
 
 	// Player: Information about the player. Not populated if this player
-	// was auto-matched against the requesting player. (Either player or
-	// autoMatchedPlayer will be set.)
+	// was anonymously auto-matched against the requesting player. (Either
+	// player or autoMatchedPlayer will be set.)
 	Player *Player `json:"player,omitempty"`
 
 	// Status: The status of the participant with respect to the
@@ -1221,6 +1362,11 @@
 
 	// Score: The new score being submitted.
 	Score int64 `json:"score,omitempty,string"`
+
+	// ScoreTag: Additional information about this score. Values will
+	// contain no more than 64 URI-safe characters as defined by section 2.3
+	// of RFC 3986.
+	ScoreTag string `json:"scoreTag,omitempty"`
 }
 
 // method id "games.achievementDefinitions.list":
@@ -1632,6 +1778,86 @@
 
 }
 
+// method id "games.achievements.setStepsAtLeast":
+
+type AchievementsSetStepsAtLeastCall struct {
+	s             *Service
+	achievementId string
+	steps         int64
+	opt_          map[string]interface{}
+}
+
+// SetStepsAtLeast: Sets the steps for the currently authenticated
+// player towards unlocking an achievement. If the steps parameter is
+// less than the current number of steps that the player already gained
+// for the achievement, the achievement is not modified.
+func (r *AchievementsService) SetStepsAtLeast(achievementId string, steps int64) *AchievementsSetStepsAtLeastCall {
+	c := &AchievementsSetStepsAtLeastCall{s: r.s, opt_: make(map[string]interface{})}
+	c.achievementId = achievementId
+	c.steps = steps
+	return c
+}
+
+func (c *AchievementsSetStepsAtLeastCall) Do() (*AchievementSetStepsAtLeastResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	params.Set("steps", fmt.Sprintf("%v", c.steps))
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/games/v1/", "achievements/{achievementId}/setStepsAtLeast")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{achievementId}", url.QueryEscape(c.achievementId), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(AchievementSetStepsAtLeastResponse)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Sets the steps for the currently authenticated player towards unlocking an achievement. If the steps parameter is less than the current number of steps that the player already gained for the achievement, the achievement is not modified.",
+	//   "httpMethod": "POST",
+	//   "id": "games.achievements.setStepsAtLeast",
+	//   "parameterOrder": [
+	//     "achievementId",
+	//     "steps"
+	//   ],
+	//   "parameters": {
+	//     "achievementId": {
+	//       "description": "The ID of the achievement used by this method.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "steps": {
+	//       "description": "The minimum value to set the steps to.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "minimum": "1",
+	//       "required": true,
+	//       "type": "integer"
+	//     }
+	//   },
+	//   "path": "achievements/{achievementId}/setStepsAtLeast",
+	//   "response": {
+	//     "$ref": "AchievementSetStepsAtLeastResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/games",
+	//     "https://www.googleapis.com/auth/plus.login"
+	//   ]
+	// }
+
+}
+
 // method id "games.achievements.unlock":
 
 type AchievementsUnlockCall struct {
@@ -1698,6 +1924,69 @@
 
 }
 
+// method id "games.achievements.updateMultiple":
+
+type AchievementsUpdateMultipleCall struct {
+	s                                *Service
+	achievementupdatemultiplerequest *AchievementUpdateMultipleRequest
+	opt_                             map[string]interface{}
+}
+
+// UpdateMultiple: Updates multiple achievements for the currently
+// authenticated player.
+func (r *AchievementsService) UpdateMultiple(achievementupdatemultiplerequest *AchievementUpdateMultipleRequest) *AchievementsUpdateMultipleCall {
+	c := &AchievementsUpdateMultipleCall{s: r.s, opt_: make(map[string]interface{})}
+	c.achievementupdatemultiplerequest = achievementupdatemultiplerequest
+	return c
+}
+
+func (c *AchievementsUpdateMultipleCall) Do() (*AchievementUpdateMultipleResponse, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.achievementupdatemultiplerequest)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/games/v1/", "achievements/updateMultiple")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(AchievementUpdateMultipleResponse)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates multiple achievements for the currently authenticated player.",
+	//   "httpMethod": "POST",
+	//   "id": "games.achievements.updateMultiple",
+	//   "path": "achievements/updateMultiple",
+	//   "request": {
+	//     "$ref": "AchievementUpdateMultipleRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "AchievementUpdateMultipleResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/games",
+	//     "https://www.googleapis.com/auth/plus.login"
+	//   ]
+	// }
+
+}
+
 // method id "games.applications.get":
 
 type ApplicationsGetCall struct {
@@ -2147,7 +2436,7 @@
 	//   ],
 	//   "parameters": {
 	//     "clientRevision": {
-	//       "description": "The revision of the client SDK used by your application.",
+	//       "description": "The revision of the client SDK used by your application. Format:\n[PLATFORM_TYPE]:[VERSION_NUMBER]. Possible values of PLATFORM_TYPE are:\n \n- \"ANDROID\" - Client is running the Android SDK. \n- \"IOS\" - Client is running the iOS SDK. \n- \"WEB_APP\" - Client is running as a Web App.",
 	//       "location": "query",
 	//       "required": true,
 	//       "type": "string"
@@ -3330,6 +3619,15 @@
 	return c
 }
 
+// ScoreTag sets the optional parameter "scoreTag": Additional
+// information about the score you're submitting. Values must contain no
+// more than 64 URI-safe characters as defined by section 2.3 of RFC
+// 3986.
+func (c *ScoresSubmitCall) ScoreTag(scoreTag string) *ScoresSubmitCall {
+	c.opt_["scoreTag"] = scoreTag
+	return c
+}
+
 func (c *ScoresSubmitCall) Do() (*PlayerScoreResponse, error) {
 	var body io.Reader = nil
 	params := make(url.Values)
@@ -3338,6 +3636,9 @@
 	if v, ok := c.opt_["language"]; ok {
 		params.Set("language", fmt.Sprintf("%v", v))
 	}
+	if v, ok := c.opt_["scoreTag"]; ok {
+		params.Set("scoreTag", fmt.Sprintf("%v", v))
+	}
 	urls := googleapi.ResolveRelative("https://www.googleapis.com/games/v1/", "leaderboards/{leaderboardId}/scores")
 	urls += "?" + params.Encode()
 	req, _ := http.NewRequest("POST", urls, body)
@@ -3383,6 +3684,12 @@
 	//       "location": "query",
 	//       "required": true,
 	//       "type": "string"
+	//     },
+	//     "scoreTag": {
+	//       "description": "Additional information about the score you're submitting. Values must contain no more than 64 URI-safe characters as defined by section 2.3 of RFC 3986.",
+	//       "location": "query",
+	//       "pattern": "[a-zA-Z0-9-._~]{0,64}",
+	//       "type": "string"
 	//     }
 	//   },
 	//   "path": "leaderboards/{leaderboardId}/scores",
diff --git a/gamesmanagement/v1management/gamesmanagement-api.json b/gamesmanagement/v1management/gamesmanagement-api.json
index 0cf5860..f3835fd 100644
--- a/gamesmanagement/v1management/gamesmanagement-api.json
+++ b/gamesmanagement/v1management/gamesmanagement-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/6BKryY7xXCfpi_SWyFmbgtFDNRs\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/6BKryY7xXCfpi_SWyFmbgtFDNRs\"",
  "discoveryVersion": "v1",
  "id": "gamesManagement:v1management",
  "name": "gamesManagement",
diff --git a/gan/v1beta1/gan-api.json b/gan/v1beta1/gan-api.json
index cf20a8d..d41a182 100644
--- a/gan/v1beta1/gan-api.json
+++ b/gan/v1beta1/gan-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/jwtjOFqKKHJzL2rsaKQ8X5cVxho\"",
+ "etag": "\"qMhxoRFWKZK4K3KdZJuqms1o3fc/0f7uRmJraUnv6U9LmngxWGiEMV0\"",
  "discoveryVersion": "v1",
  "id": "gan:v1beta1",
  "name": "gan",
@@ -65,18 +65,6 @@
    "location": "query"
   }
  },
- "auth": {
-  "oauth2": {
-   "scopes": {
-    "https://www.googleapis.com/auth/gan": {
-     "description": "Manage your GAN data"
-    },
-    "https://www.googleapis.com/auth/gan.readonly": {
-     "description": "View your GAN data"
-    }
-   }
-  }
- },
  "schemas": {
   "Advertiser": {
    "id": "Advertiser",
@@ -1071,11 +1059,7 @@
      ],
      "response": {
       "$ref": "Advertiser"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/gan",
-      "https://www.googleapis.com/auth/gan.readonly"
-     ]
+     }
     },
     "list": {
      "id": "gan.advertisers.list",
@@ -1167,11 +1151,7 @@
      ],
      "response": {
       "$ref": "Advertisers"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/gan",
-      "https://www.googleapis.com/auth/gan.readonly"
-     ]
+     }
     }
    }
   },
@@ -1214,11 +1194,7 @@
      ],
      "response": {
       "$ref": "CcOffers"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/gan",
-      "https://www.googleapis.com/auth/gan.readonly"
-     ]
+     }
     }
    }
   },
@@ -1374,11 +1350,7 @@
      ],
      "response": {
       "$ref": "Events"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/gan",
-      "https://www.googleapis.com/auth/gan.readonly"
-     ]
+     }
     }
    }
   },
@@ -1425,11 +1397,7 @@
      ],
      "response": {
       "$ref": "Link"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/gan",
-      "https://www.googleapis.com/auth/gan.readonly"
-     ]
+     }
     },
     "insert": {
      "id": "gan.links.insert",
@@ -1467,10 +1435,7 @@
      },
      "response": {
       "$ref": "Link"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/gan"
-     ]
+     }
     },
     "list": {
      "id": "gan.links.list",
@@ -1615,11 +1580,7 @@
      ],
      "response": {
       "$ref": "Links"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/gan",
-      "https://www.googleapis.com/auth/gan.readonly"
-     ]
+     }
     }
    }
   },
@@ -1663,11 +1624,7 @@
      ],
      "response": {
       "$ref": "Publisher"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/gan",
-      "https://www.googleapis.com/auth/gan.readonly"
-     ]
+     }
     },
     "list": {
      "id": "gan.publishers.list",
@@ -1759,11 +1716,7 @@
      ],
      "response": {
       "$ref": "Publishers"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/gan",
-      "https://www.googleapis.com/auth/gan.readonly"
-     ]
+     }
     }
    }
   },
@@ -1898,11 +1851,7 @@
      ],
      "response": {
       "$ref": "Report"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/gan",
-      "https://www.googleapis.com/auth/gan.readonly"
-     ]
+     }
     }
    }
   }
diff --git a/gan/v1beta1/gan-gen.go b/gan/v1beta1/gan-gen.go
index fead285..45d2200 100644
--- a/gan/v1beta1/gan-gen.go
+++ b/gan/v1beta1/gan-gen.go
@@ -39,15 +39,6 @@
 const apiVersion = "v1beta1"
 const basePath = "https://www.googleapis.com/gan/v1beta1/"
 
-// OAuth2 scopes used by this API.
-const (
-	// Manage your GAN data
-	GanScope = "https://www.googleapis.com/auth/gan"
-
-	// View your GAN data
-	GanReadonlyScope = "https://www.googleapis.com/auth/gan.readonly"
-)
-
 func New(client *http.Client) (*Service, error) {
 	if client == nil {
 		return nil, errors.New("client is nil")
@@ -929,11 +920,7 @@
 	//   "path": "{role}/{roleId}/advertiser",
 	//   "response": {
 	//     "$ref": "Advertiser"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/gan",
-	//     "https://www.googleapis.com/auth/gan.readonly"
-	//   ]
+	//   }
 	// }
 
 }
@@ -1151,11 +1138,7 @@
 	//   "path": "{role}/{roleId}/advertisers",
 	//   "response": {
 	//     "$ref": "Advertisers"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/gan",
-	//     "https://www.googleapis.com/auth/gan.readonly"
-	//   ]
+	//   }
 	// }
 
 }
@@ -1256,11 +1239,7 @@
 	//   "path": "publishers/{publisher}/ccOffers",
 	//   "response": {
 	//     "$ref": "CcOffers"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/gan",
-	//     "https://www.googleapis.com/auth/gan.readonly"
-	//   ]
+	//   }
 	// }
 
 }
@@ -1635,11 +1614,7 @@
 	//   "path": "{role}/{roleId}/events",
 	//   "response": {
 	//     "$ref": "Events"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/gan",
-	//     "https://www.googleapis.com/auth/gan.readonly"
-	//   ]
+	//   }
 	// }
 
 }
@@ -1732,11 +1707,7 @@
 	//   "path": "{role}/{roleId}/link/{linkId}",
 	//   "response": {
 	//     "$ref": "Link"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/gan",
-	//     "https://www.googleapis.com/auth/gan.readonly"
-	//   ]
+	//   }
 	// }
 
 }
@@ -1826,10 +1797,7 @@
 	//   },
 	//   "response": {
 	//     "$ref": "Link"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/gan"
-	//   ]
+	//   }
 	// }
 
 }
@@ -2149,11 +2117,7 @@
 	//   "path": "{role}/{roleId}/links",
 	//   "response": {
 	//     "$ref": "Links"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/gan",
-	//     "https://www.googleapis.com/auth/gan.readonly"
-	//   ]
+	//   }
 	// }
 
 }
@@ -2250,11 +2214,7 @@
 	//   "path": "{role}/{roleId}/publisher",
 	//   "response": {
 	//     "$ref": "Publisher"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/gan",
-	//     "https://www.googleapis.com/auth/gan.readonly"
-	//   ]
+	//   }
 	// }
 
 }
@@ -2472,11 +2432,7 @@
 	//   "path": "{role}/{roleId}/publishers",
 	//   "response": {
 	//     "$ref": "Publishers"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/gan",
-	//     "https://www.googleapis.com/auth/gan.readonly"
-	//   ]
+	//   }
 	// }
 
 }
@@ -2768,11 +2724,7 @@
 	//   "path": "{role}/{roleId}/report/{reportType}",
 	//   "response": {
 	//     "$ref": "Report"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/gan",
-	//     "https://www.googleapis.com/auth/gan.readonly"
-	//   ]
+	//   }
 	// }
 
 }
diff --git a/groupsmigration/v1/groupsmigration-api.json b/groupsmigration/v1/groupsmigration-api.json
index cdd7cd8..773d906 100644
--- a/groupsmigration/v1/groupsmigration-api.json
+++ b/groupsmigration/v1/groupsmigration-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/BJXZBhUL6VndsB8q_Dgu-kIvzFE\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/BJXZBhUL6VndsB8q_Dgu-kIvzFE\"",
  "discoveryVersion": "v1",
  "id": "groupsmigration:v1",
  "name": "groupsmigration",
diff --git a/groupssettings/v1/groupssettings-api.json b/groupssettings/v1/groupssettings-api.json
index d04192c..9cb732e 100644
--- a/groupssettings/v1/groupssettings-api.json
+++ b/groupssettings/v1/groupssettings-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/OFXClfv6OCS3sTJnuMIzhjS2gtA\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/OFXClfv6OCS3sTJnuMIzhjS2gtA\"",
  "discoveryVersion": "v1",
  "id": "groupssettings:v1",
  "name": "groupssettings",
diff --git a/identitytoolkit/v3/identitytoolkit-api.json b/identitytoolkit/v3/identitytoolkit-api.json
index cff3745..3c28c9e 100644
--- a/identitytoolkit/v3/identitytoolkit-api.json
+++ b/identitytoolkit/v3/identitytoolkit-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/5XO3LWHuKyhXxKxz2XO3IM-j3F4\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/EHeFV5mCu-X5cQeRCxRTTM7NMJo\"",
  "discoveryVersion": "v1",
  "id": "identitytoolkit:v3",
  "name": "identitytoolkit",
@@ -193,6 +193,10 @@
            "type": "string",
            "description": "The user's display name at the IDP."
           },
+          "federatedId": {
+           "type": "string",
+           "description": "User's identifier at IDP."
+          },
           "photoUrl": {
            "type": "string",
            "description": "The user's photo url at the IDP."
@@ -456,6 +460,14 @@
    "type": "object",
    "description": "Request to verify the password.",
    "properties": {
+    "captchaChallenge": {
+     "type": "string",
+     "description": "The captcha challenge."
+    },
+    "captchaResponse": {
+     "type": "string",
+     "description": "Response to the captcha."
+    },
     "email": {
      "type": "string",
      "description": "The email of the user."
@@ -776,6 +788,10 @@
      "type": "string",
      "description": "The RP local ID if it's already been mapped to the IdP account identified by the federated ID."
     },
+    "photoUrl": {
+     "type": "string",
+     "description": "The URI of the user's photo at IdP"
+    },
     "registered": {
      "type": "boolean",
      "description": "Whether the email is registered."
diff --git a/identitytoolkit/v3/identitytoolkit-gen.go b/identitytoolkit/v3/identitytoolkit-gen.go
index bc009eb..a5f6dfc 100644
--- a/identitytoolkit/v3/identitytoolkit-gen.go
+++ b/identitytoolkit/v3/identitytoolkit-gen.go
@@ -149,6 +149,9 @@
 	// DisplayName: The user's display name at the IDP.
 	DisplayName string `json:"displayName,omitempty"`
 
+	// FederatedId: User's identifier at IDP.
+	FederatedId string `json:"federatedId,omitempty"`
+
 	// PhotoUrl: The user's photo url at the IDP.
 	PhotoUrl string `json:"photoUrl,omitempty"`
 
@@ -297,6 +300,12 @@
 }
 
 type IdentitytoolkitRelyingpartyVerifyPasswordRequest struct {
+	// CaptchaChallenge: The captcha challenge.
+	CaptchaChallenge string `json:"captchaChallenge,omitempty"`
+
+	// CaptchaResponse: Response to the captcha.
+	CaptchaResponse string `json:"captchaResponse,omitempty"`
+
 	// Email: The email of the user.
 	Email string `json:"email,omitempty"`
 
@@ -521,6 +530,9 @@
 	// account identified by the federated ID.
 	LocalId string `json:"localId,omitempty"`
 
+	// PhotoUrl: The URI of the user's photo at IdP
+	PhotoUrl string `json:"photoUrl,omitempty"`
+
 	// Registered: Whether the email is registered.
 	Registered bool `json:"registered,omitempty"`
 }
diff --git a/licensing/v1/licensing-api.json b/licensing/v1/licensing-api.json
index 30036be..baa0e54 100644
--- a/licensing/v1/licensing-api.json
+++ b/licensing/v1/licensing-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/i7ROTyL5fTp9c4DP_LXJg5raK-k\"",
+ "etag": "\"qMhxoRFWKZK4K3KdZJuqms1o3fc/i7ROTyL5fTp9c4DP_LXJg5raK-k\"",
  "discoveryVersion": "v1",
  "id": "licensing:v1",
  "name": "licensing",
diff --git a/mirror/v1/mirror-api.json b/mirror/v1/mirror-api.json
index b4f9411..a7500ce 100644
--- a/mirror/v1/mirror-api.json
+++ b/mirror/v1/mirror-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/TkhJ1-ITz0PDJP0q_6cuyPtPfFM\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/1x_xvRB-bzhRNpCB1wSs_0KfWIA\"",
  "discoveryVersion": "v1",
  "id": "mirror:v1",
  "name": "mirror",
@@ -68,6 +68,18 @@
    "location": "query"
   }
  },
+ "auth": {
+  "oauth2": {
+   "scopes": {
+    "https://www.googleapis.com/auth/glass.location": {
+     "description": "View your location"
+    },
+    "https://www.googleapis.com/auth/glass.timeline": {
+     "description": "View and manage your Glass timeline"
+    }
+   }
+  }
+ },
  "schemas": {
   "Attachment": {
    "id": "Attachment",
@@ -118,7 +130,13 @@
    "properties": {
     "type": {
      "type": "string",
-     "description": "The type of operation this command corresponds to. Allowed values are:  \n- TAKE_A_NOTE - Shares a timeline item with the transcription of user speech from the \"Take a note\" voice menu command.  \n- POST_AN_UPDATE - Shares a timeline item with the transcription of user speech from the \"Post an update\" voice menu command."
+     "description": "The type of operation this command corresponds to. Allowed values are:  \n- TAKE_A_NOTE - Shares a timeline item with the transcription of user speech from the \"Take a note\" voice menu command.  \n- POST_AN_UPDATE - Shares a timeline item with the transcription of user speech from the \"Post an update\" voice menu command.",
+     "annotations": {
+      "required": [
+       "mirror.contacts.insert",
+       "mirror.contacts.update"
+      ]
+     }
     }
    }
   },
@@ -651,6 +669,9 @@
      },
      "parameterOrder": [
       "id"
+     ],
+     "scopes": [
+      "https://www.googleapis.com/auth/glass.timeline"
      ]
     },
     "get": {
@@ -671,7 +692,10 @@
      ],
      "response": {
       "$ref": "Contact"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/glass.timeline"
+     ]
     },
     "insert": {
      "id": "mirror.contacts.insert",
@@ -683,7 +707,10 @@
      },
      "response": {
       "$ref": "Contact"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/glass.timeline"
+     ]
     },
     "list": {
      "id": "mirror.contacts.list",
@@ -692,7 +719,10 @@
      "description": "Retrieves a list of contacts for the authenticated user.",
      "response": {
       "$ref": "ContactsListResponse"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/glass.timeline"
+     ]
     },
     "patch": {
      "id": "mirror.contacts.patch",
@@ -715,7 +745,10 @@
      },
      "response": {
       "$ref": "Contact"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/glass.timeline"
+     ]
     },
     "update": {
      "id": "mirror.contacts.update",
@@ -738,7 +771,10 @@
      },
      "response": {
       "$ref": "Contact"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/glass.timeline"
+     ]
     }
    }
   },
@@ -762,7 +798,11 @@
      ],
      "response": {
       "$ref": "Location"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/glass.location",
+      "https://www.googleapis.com/auth/glass.timeline"
+     ]
     },
     "list": {
      "id": "mirror.locations.list",
@@ -771,7 +811,11 @@
      "description": "Retrieves a list of locations for the user.",
      "response": {
       "$ref": "LocationsListResponse"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/glass.location",
+      "https://www.googleapis.com/auth/glass.timeline"
+     ]
     }
    }
   },
@@ -792,6 +836,9 @@
      },
      "parameterOrder": [
       "id"
+     ],
+     "scopes": [
+      "https://www.googleapis.com/auth/glass.timeline"
      ]
     },
     "insert": {
@@ -804,7 +851,10 @@
      },
      "response": {
       "$ref": "Subscription"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/glass.timeline"
+     ]
     },
     "list": {
      "id": "mirror.subscriptions.list",
@@ -813,7 +863,10 @@
      "description": "Retrieves a list of subscriptions for the authenticated user and service.",
      "response": {
       "$ref": "SubscriptionsListResponse"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/glass.timeline"
+     ]
     },
     "update": {
      "id": "mirror.subscriptions.update",
@@ -836,7 +889,10 @@
      },
      "response": {
       "$ref": "Subscription"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/glass.timeline"
+     ]
     }
    }
   },
@@ -857,6 +913,10 @@
      },
      "parameterOrder": [
       "id"
+     ],
+     "scopes": [
+      "https://www.googleapis.com/auth/glass.location",
+      "https://www.googleapis.com/auth/glass.timeline"
      ]
     },
     "get": {
@@ -877,7 +937,11 @@
      ],
      "response": {
       "$ref": "TimelineItem"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/glass.location",
+      "https://www.googleapis.com/auth/glass.timeline"
+     ]
     },
     "insert": {
      "id": "mirror.timeline.insert",
@@ -890,6 +954,10 @@
      "response": {
       "$ref": "TimelineItem"
      },
+     "scopes": [
+      "https://www.googleapis.com/auth/glass.location",
+      "https://www.googleapis.com/auth/glass.timeline"
+     ],
      "supportsMediaUpload": true,
      "mediaUpload": {
       "accept": [
@@ -963,7 +1031,11 @@
      },
      "response": {
       "$ref": "TimelineListResponse"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/glass.location",
+      "https://www.googleapis.com/auth/glass.timeline"
+     ]
     },
     "patch": {
      "id": "mirror.timeline.patch",
@@ -986,7 +1058,11 @@
      },
      "response": {
       "$ref": "TimelineItem"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/glass.location",
+      "https://www.googleapis.com/auth/glass.timeline"
+     ]
     },
     "update": {
      "id": "mirror.timeline.update",
@@ -1010,6 +1086,10 @@
      "response": {
       "$ref": "TimelineItem"
      },
+     "scopes": [
+      "https://www.googleapis.com/auth/glass.location",
+      "https://www.googleapis.com/auth/glass.timeline"
+     ],
      "supportsMediaUpload": true,
      "mediaUpload": {
       "accept": [
@@ -1056,6 +1136,9 @@
        "parameterOrder": [
         "itemId",
         "attachmentId"
+       ],
+       "scopes": [
+        "https://www.googleapis.com/auth/glass.timeline"
        ]
       },
       "get": {
@@ -1084,6 +1167,9 @@
        "response": {
         "$ref": "Attachment"
        },
+       "scopes": [
+        "https://www.googleapis.com/auth/glass.timeline"
+       ],
        "supportsMediaDownload": true
       },
       "insert": {
@@ -1105,6 +1191,9 @@
        "response": {
         "$ref": "Attachment"
        },
+       "scopes": [
+        "https://www.googleapis.com/auth/glass.timeline"
+       ],
        "supportsMediaUpload": true,
        "mediaUpload": {
         "accept": [
@@ -1143,7 +1232,10 @@
        ],
        "response": {
         "$ref": "AttachmentsListResponse"
-       }
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/glass.timeline"
+       ]
       }
      }
     }
diff --git a/mirror/v1/mirror-gen.go b/mirror/v1/mirror-gen.go
index eaad7ba..9d3d5e5 100644
--- a/mirror/v1/mirror-gen.go
+++ b/mirror/v1/mirror-gen.go
@@ -39,6 +39,15 @@
 const apiVersion = "v1"
 const basePath = "https://www.googleapis.com/mirror/v1/"
 
+// OAuth2 scopes used by this API.
+const (
+	// View your location
+	GlassLocationScope = "https://www.googleapis.com/auth/glass.location"
+
+	// View and manage your Glass timeline
+	GlassTimelineScope = "https://www.googleapis.com/auth/glass.timeline"
+)
+
 func New(client *http.Client) (*Service, error) {
 	if client == nil {
 		return nil, errors.New("client is nil")
@@ -685,7 +694,10 @@
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "contacts/{id}"
+	//   "path": "contacts/{id}",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/glass.timeline"
+	//   ]
 	// }
 
 }
@@ -746,7 +758,10 @@
 	//   "path": "contacts/{id}",
 	//   "response": {
 	//     "$ref": "Contact"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/glass.timeline"
+	//   ]
 	// }
 
 }
@@ -804,7 +819,10 @@
 	//   },
 	//   "response": {
 	//     "$ref": "Contact"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/glass.timeline"
+	//   ]
 	// }
 
 }
@@ -851,7 +869,10 @@
 	//   "path": "contacts",
 	//   "response": {
 	//     "$ref": "ContactsListResponse"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/glass.timeline"
+	//   ]
 	// }
 
 }
@@ -924,7 +945,10 @@
 	//   },
 	//   "response": {
 	//     "$ref": "Contact"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/glass.timeline"
+	//   ]
 	// }
 
 }
@@ -996,7 +1020,10 @@
 	//   },
 	//   "response": {
 	//     "$ref": "Contact"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/glass.timeline"
+	//   ]
 	// }
 
 }
@@ -1057,7 +1084,11 @@
 	//   "path": "locations/{id}",
 	//   "response": {
 	//     "$ref": "Location"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/glass.location",
+	//     "https://www.googleapis.com/auth/glass.timeline"
+	//   ]
 	// }
 
 }
@@ -1104,7 +1135,11 @@
 	//   "path": "locations",
 	//   "response": {
 	//     "$ref": "LocationsListResponse"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/glass.location",
+	//     "https://www.googleapis.com/auth/glass.timeline"
+	//   ]
 	// }
 
 }
@@ -1158,7 +1193,10 @@
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "subscriptions/{id}"
+	//   "path": "subscriptions/{id}",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/glass.timeline"
+	//   ]
 	// }
 
 }
@@ -1216,7 +1254,10 @@
 	//   },
 	//   "response": {
 	//     "$ref": "Subscription"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/glass.timeline"
+	//   ]
 	// }
 
 }
@@ -1264,7 +1305,10 @@
 	//   "path": "subscriptions",
 	//   "response": {
 	//     "$ref": "SubscriptionsListResponse"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/glass.timeline"
+	//   ]
 	// }
 
 }
@@ -1336,7 +1380,10 @@
 	//   },
 	//   "response": {
 	//     "$ref": "Subscription"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/glass.timeline"
+	//   ]
 	// }
 
 }
@@ -1390,7 +1437,11 @@
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "timeline/{id}"
+	//   "path": "timeline/{id}",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/glass.location",
+	//     "https://www.googleapis.com/auth/glass.timeline"
+	//   ]
 	// }
 
 }
@@ -1451,7 +1502,11 @@
 	//   "path": "timeline/{id}",
 	//   "response": {
 	//     "$ref": "TimelineItem"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/glass.location",
+	//     "https://www.googleapis.com/auth/glass.timeline"
+	//   ]
 	// }
 
 }
@@ -1541,6 +1596,10 @@
 	//   "response": {
 	//     "$ref": "TimelineItem"
 	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/glass.location",
+	//     "https://www.googleapis.com/auth/glass.timeline"
+	//   ],
 	//   "supportsMediaUpload": true
 	// }
 
@@ -1704,7 +1763,11 @@
 	//   "path": "timeline",
 	//   "response": {
 	//     "$ref": "TimelineListResponse"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/glass.location",
+	//     "https://www.googleapis.com/auth/glass.timeline"
+	//   ]
 	// }
 
 }
@@ -1777,7 +1840,11 @@
 	//   },
 	//   "response": {
 	//     "$ref": "TimelineItem"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/glass.location",
+	//     "https://www.googleapis.com/auth/glass.timeline"
+	//   ]
 	// }
 
 }
@@ -1881,6 +1948,10 @@
 	//   "response": {
 	//     "$ref": "TimelineItem"
 	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/glass.location",
+	//     "https://www.googleapis.com/auth/glass.timeline"
+	//   ],
 	//   "supportsMediaUpload": true
 	// }
 
@@ -1945,7 +2016,10 @@
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "timeline/{itemId}/attachments/{attachmentId}"
+	//   "path": "timeline/{itemId}/attachments/{attachmentId}",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/glass.timeline"
+	//   ]
 	// }
 
 }
@@ -2018,6 +2092,9 @@
 	//   "response": {
 	//     "$ref": "Attachment"
 	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/glass.timeline"
+	//   ],
 	//   "supportsMediaDownload": true
 	// }
 
@@ -2114,6 +2191,9 @@
 	//   "response": {
 	//     "$ref": "Attachment"
 	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/glass.timeline"
+	//   ],
 	//   "supportsMediaUpload": true
 	// }
 
@@ -2175,7 +2255,10 @@
 	//   "path": "timeline/{itemId}/attachments",
 	//   "response": {
 	//     "$ref": "AttachmentsListResponse"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/glass.timeline"
+	//   ]
 	// }
 
 }
diff --git a/oauth2/v1/oauth2-api.json b/oauth2/v1/oauth2-api.json
index eb5c6e7..72fce33 100644
--- a/oauth2/v1/oauth2-api.json
+++ b/oauth2/v1/oauth2-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/B_T-KX8lOQBH1CsI6E-WKqK2W0U\"",
+ "etag": "\"qMhxoRFWKZK4K3KdZJuqms1o3fc/B_T-KX8lOQBH1CsI6E-WKqK2W0U\"",
  "discoveryVersion": "v1",
  "id": "oauth2:v1",
  "name": "oauth2",
diff --git a/oauth2/v2/oauth2-api.json b/oauth2/v2/oauth2-api.json
index d329223..c5424ec 100644
--- a/oauth2/v2/oauth2-api.json
+++ b/oauth2/v2/oauth2-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/610kr4ZlL53w3blZCnftCmKVFqI\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/610kr4ZlL53w3blZCnftCmKVFqI\"",
  "discoveryVersion": "v1",
  "id": "oauth2:v2",
  "name": "oauth2",
diff --git a/orkut/v2/orkut-api.json b/orkut/v2/orkut-api.json
index 28431c0..9eed38f 100644
--- a/orkut/v2/orkut-api.json
+++ b/orkut/v2/orkut-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/xiMdcGrwm4vNaftUqbcmg_X46_0\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/xiMdcGrwm4vNaftUqbcmg_X46_0\"",
  "discoveryVersion": "v1",
  "id": "orkut:v2",
  "name": "orkut",
diff --git a/pagespeedonline/v1/pagespeedonline-api.json b/pagespeedonline/v1/pagespeedonline-api.json
index 615754a..d6e20bf 100644
--- a/pagespeedonline/v1/pagespeedonline-api.json
+++ b/pagespeedonline/v1/pagespeedonline-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/ewJSghUqJkC7pZG1bHbl30ND5JQ\"",
+ "etag": "\"qMhxoRFWKZK4K3KdZJuqms1o3fc/lV8t-NZJJnHD2jAQ6XOk0Sq9WCQ\"",
  "discoveryVersion": "v1",
  "id": "pagespeedonline:v1",
  "name": "pagespeedonline",
@@ -94,11 +94,6 @@
           "description": "The impact (unbounded floating point value) that implementing the suggestions for this rule would have on making the page faster. Impact is comparable between rules to determine which rule's suggestions would have a higher or lower impact on making a page faster. For instance, if enabling compression would save 1MB, while optimizing images would save 500kB, the enable compression rule would have 2x the impact of the image optimization rule, all other things being equal.",
           "format": "double"
          },
-         "ruleScore": {
-          "type": "integer",
-          "description": "The score (0-100) for this rule. The rule score indicates how well a page implements the recommendations for the given rule. For instance, if none of the compressible resources on a page are compressed, the rule score would be 0, while if all of the compressible resources on a page are compressed, the rule score would be 100.",
-          "format": "int32"
-         },
          "urlBlocks": {
           "type": "array",
           "description": "List of blocks of URLs. Each block may contain a heading and a list of URLs. Each URL may optionally include additional details.",
diff --git a/plus/v1/plus-api.json b/plus/v1/plus-api.json
index 1b4ddd1..d2dfa4e 100644
--- a/plus/v1/plus-api.json
+++ b/plus/v1/plus-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/DMGlXi8jhJTMEmr-VAaiIhmcCGI\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/uTNUsIyrlXE3F_OAnzONFFhzkso\"",
  "discoveryVersion": "v1",
  "id": "plus:v1",
  "name": "plus",
@@ -73,6 +73,12 @@
     },
     "https://www.googleapis.com/auth/plus.me": {
      "description": "Know who you are on Google"
+    },
+    "https://www.googleapis.com/auth/userinfo.email": {
+     "description": "View your email address"
+    },
+    "https://www.googleapis.com/auth/userinfo.profile": {
+     "description": "View basic information about your account"
     }
    }
   }
@@ -1045,16 +1051,16 @@
     },
     "ageRange": {
      "type": "object",
-     "description": "The age range of the person.",
+     "description": "The age range of the person. Valid ranges are 17 or younger, 18 to 20, and 21 or older. Age is determined from the user's birthday using Western age reckoning.",
      "properties": {
       "max": {
        "type": "integer",
-       "description": "The age range's upper bound, if any.",
+       "description": "The age range's upper bound, if any. Possible values include, but are not limited to, the following:  \n- \"17\" - for age 17 \n- \"20\" - for age 20",
        "format": "int32"
       },
       "min": {
        "type": "integer",
-       "description": "The age range's lower bound, if any.",
+       "description": "The age range's lower bound, if any. Possible values include, but are not limited to, the following:  \n- \"21\" - for age 21 \n- \"18\" - for age 18",
        "format": "int32"
       }
      }
@@ -1126,6 +1132,27 @@
      "type": "string",
      "description": "The name of this person, which is suitable for display."
     },
+    "domain": {
+     "type": "string",
+     "description": "The hosted domain name for the user's Google Apps account. For instance, example.com. The plus.profile.emails.read or email scope is needed to get this domain name."
+    },
+    "emails": {
+     "type": "array",
+     "description": "A list of email addresses that this person has, including their Google account email address, and the public verified email addresses on their Google+ profile. The plus.profile.emails.read scope is needed to retrieve these email addresses, or the email scope can be used to retrieve just the Google account email address.",
+     "items": {
+      "type": "object",
+      "properties": {
+       "type": {
+        "type": "string",
+        "description": "The type of address. Possible values include, but are not limited to, the following values:  \n- \"account\" - Google account email address. \n- \"home\" - Home email address. \n- \"work\" - Work email address. \n- \"other\" - Other."
+       },
+       "value": {
+        "type": "string",
+        "description": "The email address."
+       }
+      }
+     }
+    },
     "etag": {
      "type": "string",
      "description": "ETag of this response for caching purposes."
@@ -1199,6 +1226,10 @@
      "type": "string",
      "description": "Type of person within Google+. Possible values include, but are not limited to, the following values:  \n- \"person\" - represents an actual person. \n- \"page\" - represents a page."
     },
+    "occupation": {
+     "type": "string",
+     "description": "The occupation of this person."
+    },
     "organizations": {
      "type": "array",
      "description": "A list of current or past organizations with which this person is associated.",
@@ -1270,6 +1301,10 @@
      "type": "string",
      "description": "The person's relationship status. Possible values include, but are not limited to, the following values:  \n- \"single\" - Person is single. \n- \"in_a_relationship\" - Person is in a relationship. \n- \"engaged\" - Person is engaged. \n- \"married\" - Person is married. \n- \"its_complicated\" - The relationship is complicated. \n- \"open_relationship\" - Person is in an open relationship. \n- \"widowed\" - Person is widowed. \n- \"in_domestic_partnership\" - Person is in a domestic partnership. \n- \"in_civil_union\" - Person is in a civil union."
     },
+    "skills": {
+     "type": "string",
+     "description": "The person's skills."
+    },
     "tagline": {
      "type": "string",
      "description": "The brief description (tagline) of this person."
@@ -1626,7 +1661,8 @@
       "$ref": "Moment"
      },
      "scopes": [
-      "https://www.googleapis.com/auth/plus.login"
+      "https://www.googleapis.com/auth/plus.login",
+      "https://www.googleapis.com/auth/plus.me"
      ]
     },
     "list": {
@@ -1686,7 +1722,8 @@
       "$ref": "MomentsFeed"
      },
      "scopes": [
-      "https://www.googleapis.com/auth/plus.login"
+      "https://www.googleapis.com/auth/plus.login",
+      "https://www.googleapis.com/auth/plus.me"
      ]
     },
     "remove": {
@@ -1734,7 +1771,9 @@
      },
      "scopes": [
       "https://www.googleapis.com/auth/plus.login",
-      "https://www.googleapis.com/auth/plus.me"
+      "https://www.googleapis.com/auth/plus.me",
+      "https://www.googleapis.com/auth/userinfo.email",
+      "https://www.googleapis.com/auth/userinfo.profile"
      ]
     },
     "list": {
@@ -1748,9 +1787,11 @@
        "description": "The collection of people to list.",
        "required": true,
        "enum": [
+        "connected",
         "visible"
        ],
        "enumDescriptions": [
+        "The list of visible people in the authenticated user's circles who also use the requesting app. This list is limited to users who made their app activities visible to the authenticated user.",
         "The list of people who this user has added to one or more circles, limited to the circles visible to the requesting application."
        ],
        "location": "path"
@@ -1797,7 +1838,8 @@
       "$ref": "PeopleFeed"
      },
      "scopes": [
-      "https://www.googleapis.com/auth/plus.login"
+      "https://www.googleapis.com/auth/plus.login",
+      "https://www.googleapis.com/auth/plus.me"
      ]
     },
     "listByActivity": {
diff --git a/plus/v1/plus-gen.go b/plus/v1/plus-gen.go
index 8e781d3..08acc39 100644
--- a/plus/v1/plus-gen.go
+++ b/plus/v1/plus-gen.go
@@ -46,6 +46,12 @@
 
 	// Know who you are on Google
 	PlusMeScope = "https://www.googleapis.com/auth/plus.me"
+
+	// View your email address
+	UserinfoEmailScope = "https://www.googleapis.com/auth/userinfo.email"
+
+	// View basic information about your account
+	UserinfoProfileScope = "https://www.googleapis.com/auth/userinfo.profile"
 )
 
 func New(client *http.Client) (*Service, error) {
@@ -867,7 +873,9 @@
 	// AboutMe: A short biography for this person.
 	AboutMe string `json:"aboutMe,omitempty"`
 
-	// AgeRange: The age range of the person.
+	// AgeRange: The age range of the person. Valid ranges are 17 or
+	// younger, 18 to 20, and 21 or older. Age is determined from the user's
+	// birthday using Western age reckoning.
 	AgeRange *PersonAgeRange `json:"ageRange,omitempty"`
 
 	// Birthday: The person's date of birth, represented as YYYY-MM-DD.
@@ -889,6 +897,18 @@
 	// DisplayName: The name of this person, which is suitable for display.
 	DisplayName string `json:"displayName,omitempty"`
 
+	// Domain: The hosted domain name for the user's Google Apps account.
+	// For instance, example.com. The plus.profile.emails.read or email
+	// scope is needed to get this domain name.
+	Domain string `json:"domain,omitempty"`
+
+	// Emails: A list of email addresses that this person has, including
+	// their Google account email address, and the public verified email
+	// addresses on their Google+ profile. The plus.profile.emails.read
+	// scope is needed to retrieve these email addresses, or the email scope
+	// can be used to retrieve just the Google account email address.
+	Emails []*PersonEmails `json:"emails,omitempty"`
+
 	// Etag: ETag of this response for caching purposes.
 	Etag string `json:"etag,omitempty"`
 
@@ -929,6 +949,9 @@
 	// - "page" - represents a page.
 	ObjectType string `json:"objectType,omitempty"`
 
+	// Occupation: The occupation of this person.
+	Occupation string `json:"occupation,omitempty"`
+
 	// Organizations: A list of current or past organizations with which
 	// this person is associated.
 	Organizations []*PersonOrganizations `json:"organizations,omitempty"`
@@ -960,6 +983,9 @@
 	// civil union.
 	RelationshipStatus string `json:"relationshipStatus,omitempty"`
 
+	// Skills: The person's skills.
+	Skills string `json:"skills,omitempty"`
+
 	// Tagline: The brief description (tagline) of this person.
 	Tagline string `json:"tagline,omitempty"`
 
@@ -974,10 +1000,18 @@
 }
 
 type PersonAgeRange struct {
-	// Max: The age range's upper bound, if any.
+	// Max: The age range's upper bound, if any. Possible values include,
+	// but are not limited to, the following:
+	// - "17" - for age 17
+	// - "20"
+	// - for age 20
 	Max int64 `json:"max,omitempty"`
 
-	// Min: The age range's lower bound, if any.
+	// Min: The age range's lower bound, if any. Possible values include,
+	// but are not limited to, the following:
+	// - "21" - for age 21
+	// - "18"
+	// - for age 18
 	Min int64 `json:"min,omitempty"`
 }
 
@@ -1018,6 +1052,21 @@
 	Width int64 `json:"width,omitempty"`
 }
 
+type PersonEmails struct {
+	// Type: The type of address. Possible values include, but are not
+	// limited to, the following values:
+	// - "account" - Google account
+	// email address.
+	// - "home" - Home email address.
+	// - "work" - Work email
+	// address.
+	// - "other" - Other.
+	Type string `json:"type,omitempty"`
+
+	// Value: The email address.
+	Value string `json:"value,omitempty"`
+}
+
 type PersonImage struct {
 	// Url: The URL of the person's profile photo. To resize the image and
 	// crop it to a square, append the query string ?sz=x, where x is the
@@ -1787,7 +1836,8 @@
 	//     "$ref": "Moment"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/plus.login",
+	//     "https://www.googleapis.com/auth/plus.me"
 	//   ]
 	// }
 
@@ -1935,7 +1985,8 @@
 	//     "$ref": "MomentsFeed"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/plus.login",
+	//     "https://www.googleapis.com/auth/plus.me"
 	//   ]
 	// }
 
@@ -2059,7 +2110,9 @@
 	//   },
 	//   "scopes": [
 	//     "https://www.googleapis.com/auth/plus.login",
-	//     "https://www.googleapis.com/auth/plus.me"
+	//     "https://www.googleapis.com/auth/plus.me",
+	//     "https://www.googleapis.com/auth/userinfo.email",
+	//     "https://www.googleapis.com/auth/userinfo.profile"
 	//   ]
 	// }
 
@@ -2152,9 +2205,11 @@
 	//     "collection": {
 	//       "description": "The collection of people to list.",
 	//       "enum": [
+	//         "connected",
 	//         "visible"
 	//       ],
 	//       "enumDescriptions": [
+	//         "The list of visible people in the authenticated user's circles who also use the requesting app. This list is limited to users who made their app activities visible to the authenticated user.",
 	//         "The list of people who this user has added to one or more circles, limited to the circles visible to the requesting application."
 	//       ],
 	//       "location": "path",
@@ -2200,7 +2255,8 @@
 	//     "$ref": "PeopleFeed"
 	//   },
 	//   "scopes": [
-	//     "https://www.googleapis.com/auth/plus.login"
+	//     "https://www.googleapis.com/auth/plus.login",
+	//     "https://www.googleapis.com/auth/plus.me"
 	//   ]
 	// }
 
diff --git a/plusdomains/v1/plusdomains-api.json b/plusdomains/v1/plusdomains-api.json
index 57f4ad9..79e135f 100644
--- a/plusdomains/v1/plusdomains-api.json
+++ b/plusdomains/v1/plusdomains-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/1SYNRqKEaVTALhb3i7j_Y_K70js\"",
+ "etag": "\"qMhxoRFWKZK4K3KdZJuqms1o3fc/YrdEaGy03tV2BNsqBq5fSw9csZ8\"",
  "discoveryVersion": "v1",
  "id": "plusDomains:v1",
  "name": "plusDomains",
@@ -91,6 +91,12 @@
     },
     "https://www.googleapis.com/auth/plus.stream.write": {
      "description": "Manage your Google+ posts, comments, and stream"
+    },
+    "https://www.googleapis.com/auth/userinfo.email": {
+     "description": "View your email address"
+    },
+    "https://www.googleapis.com/auth/userinfo.profile": {
+     "description": "View basic information about your account"
     }
    }
   }
@@ -924,6 +930,11 @@
      "description": "The type of resource.",
      "default": "plus#media"
     },
+    "mediaCreatedTime": {
+     "type": "string",
+     "description": "The time at which this media was originally created in UTC. Formatted as an RFC 3339 timestamp that matches this example: 2010-11-25T14:30:27.655Z",
+     "format": "date-time"
+    },
     "mediaUrl": {
      "type": "string",
      "description": "The URL of this photo or video's still image."
@@ -1088,6 +1099,27 @@
      "type": "string",
      "description": "The name of this person, which is suitable for display."
     },
+    "domain": {
+     "type": "string",
+     "description": "The hosted domain name for the user's Google Apps account. For instance, example.com. The plus.profile.emails.read or email scope is needed to get this domain name."
+    },
+    "emails": {
+     "type": "array",
+     "description": "A list of email addresses that this person has, including their Google account email address, and the public verified email addresses on their Google+ profile. The plus.profile.emails.read scope is needed to retrieve these email addresses, or the email scope can be used to retrieve just the Google account email address.",
+     "items": {
+      "type": "object",
+      "properties": {
+       "type": {
+        "type": "string",
+        "description": "The type of address. Possible values include, but are not limited to, the following values:  \n- \"account\" - Google account email address. \n- \"home\" - Home email address. \n- \"work\" - Work email address. \n- \"other\" - Other."
+       },
+       "value": {
+        "type": "string",
+        "description": "The email address."
+       }
+      }
+     }
+    },
     "etag": {
      "type": "string",
      "description": "ETag of this response for caching purposes."
@@ -1157,6 +1189,10 @@
      "type": "string",
      "description": "Type of person within Google+. Possible values include, but are not limited to, the following values:  \n- \"person\" - represents an actual person. \n- \"page\" - represents a page."
     },
+    "occupation": {
+     "type": "string",
+     "description": "The occupation of this person."
+    },
     "organizations": {
      "type": "array",
      "description": "A list of current or past organizations with which this person is associated.",
@@ -1228,6 +1264,10 @@
      "type": "string",
      "description": "The person's relationship status. Possible values include, but are not limited to, the following values:  \n- \"single\" - Person is single. \n- \"in_a_relationship\" - Person is in a relationship. \n- \"engaged\" - Person is engaged. \n- \"married\" - Person is married. \n- \"its_complicated\" - The relationship is complicated. \n- \"open_relationship\" - Person is in an open relationship. \n- \"widowed\" - Person is widowed. \n- \"in_domestic_partnership\" - Person is in a domestic partnership. \n- \"in_civil_union\" - Person is in a civil union."
     },
+    "skills": {
+     "type": "string",
+     "description": "The person's skills."
+    },
     "tagline": {
      "type": "string",
      "description": "The brief description (tagline) of this person."
@@ -1935,7 +1975,9 @@
      "scopes": [
       "https://www.googleapis.com/auth/plus.login",
       "https://www.googleapis.com/auth/plus.me",
-      "https://www.googleapis.com/auth/plus.profiles.read"
+      "https://www.googleapis.com/auth/plus.profiles.read",
+      "https://www.googleapis.com/auth/userinfo.email",
+      "https://www.googleapis.com/auth/userinfo.profile"
      ]
     },
     "list": {
diff --git a/plusdomains/v1/plusdomains-gen.go b/plusdomains/v1/plusdomains-gen.go
index 8c40329..128c845 100644
--- a/plusdomains/v1/plusdomains-gen.go
+++ b/plusdomains/v1/plusdomains-gen.go
@@ -65,6 +65,12 @@
 
 	// Manage your Google+ posts, comments, and stream
 	PlusStreamWriteScope = "https://www.googleapis.com/auth/plus.stream.write"
+
+	// View your email address
+	UserinfoEmailScope = "https://www.googleapis.com/auth/userinfo.email"
+
+	// View basic information about your account
+	UserinfoProfileScope = "https://www.googleapis.com/auth/userinfo.profile"
 )
 
 func New(client *http.Client) (*Service, error) {
@@ -770,6 +776,11 @@
 	// Kind: The type of resource.
 	Kind string `json:"kind,omitempty"`
 
+	// MediaCreatedTime: The time at which this media was originally created
+	// in UTC. Formatted as an RFC 3339 timestamp that matches this example:
+	// 2010-11-25T14:30:27.655Z
+	MediaCreatedTime string `json:"mediaCreatedTime,omitempty"`
+
 	// MediaUrl: The URL of this photo or video's still image.
 	MediaUrl string `json:"mediaUrl,omitempty"`
 
@@ -892,6 +903,18 @@
 	// DisplayName: The name of this person, which is suitable for display.
 	DisplayName string `json:"displayName,omitempty"`
 
+	// Domain: The hosted domain name for the user's Google Apps account.
+	// For instance, example.com. The plus.profile.emails.read or email
+	// scope is needed to get this domain name.
+	Domain string `json:"domain,omitempty"`
+
+	// Emails: A list of email addresses that this person has, including
+	// their Google account email address, and the public verified email
+	// addresses on their Google+ profile. The plus.profile.emails.read
+	// scope is needed to retrieve these email addresses, or the email scope
+	// can be used to retrieve just the Google account email address.
+	Emails []*PersonEmails `json:"emails,omitempty"`
+
 	// Etag: ETag of this response for caching purposes.
 	Etag string `json:"etag,omitempty"`
 
@@ -929,6 +952,9 @@
 	// - "page" - represents a page.
 	ObjectType string `json:"objectType,omitempty"`
 
+	// Occupation: The occupation of this person.
+	Occupation string `json:"occupation,omitempty"`
+
 	// Organizations: A list of current or past organizations with which
 	// this person is associated.
 	Organizations []*PersonOrganizations `json:"organizations,omitempty"`
@@ -960,6 +986,9 @@
 	// civil union.
 	RelationshipStatus string `json:"relationshipStatus,omitempty"`
 
+	// Skills: The person's skills.
+	Skills string `json:"skills,omitempty"`
+
 	// Tagline: The brief description (tagline) of this person.
 	Tagline string `json:"tagline,omitempty"`
 
@@ -1010,6 +1039,21 @@
 	Width int64 `json:"width,omitempty"`
 }
 
+type PersonEmails struct {
+	// Type: The type of address. Possible values include, but are not
+	// limited to, the following values:
+	// - "account" - Google account
+	// email address.
+	// - "home" - Home email address.
+	// - "work" - Work email
+	// address.
+	// - "other" - Other.
+	Type string `json:"type,omitempty"`
+
+	// Value: The email address.
+	Value string `json:"value,omitempty"`
+}
+
 type PersonImage struct {
 	// Url: The URL of the person's profile photo. To resize the image and
 	// crop it to a square, append the query string ?sz=x, where x is the
@@ -2652,7 +2696,9 @@
 	//   "scopes": [
 	//     "https://www.googleapis.com/auth/plus.login",
 	//     "https://www.googleapis.com/auth/plus.me",
-	//     "https://www.googleapis.com/auth/plus.profiles.read"
+	//     "https://www.googleapis.com/auth/plus.profiles.read",
+	//     "https://www.googleapis.com/auth/userinfo.email",
+	//     "https://www.googleapis.com/auth/userinfo.profile"
 	//   ]
 	// }
 
diff --git a/prediction/v1.2/prediction-api.json b/prediction/v1.2/prediction-api.json
index 0cdbf8f..b3c5c76 100644
--- a/prediction/v1.2/prediction-api.json
+++ b/prediction/v1.2/prediction-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/09e1Ml5Gun7YuEJCdDnZKGXCSr8\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/09e1Ml5Gun7YuEJCdDnZKGXCSr8\"",
  "discoveryVersion": "v1",
  "id": "prediction:v1.2",
  "name": "prediction",
diff --git a/prediction/v1.3/prediction-api.json b/prediction/v1.3/prediction-api.json
index 08bf18c..eb96f8c 100644
--- a/prediction/v1.3/prediction-api.json
+++ b/prediction/v1.3/prediction-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/LnKBxoqCwKX9VdR55fP9N9U7tho\"",
+ "etag": "\"qMhxoRFWKZK4K3KdZJuqms1o3fc/LnKBxoqCwKX9VdR55fP9N9U7tho\"",
  "discoveryVersion": "v1",
  "id": "prediction:v1.3",
  "name": "prediction",
diff --git a/prediction/v1.4/prediction-api.json b/prediction/v1.4/prediction-api.json
index f4d499e..0185e53 100644
--- a/prediction/v1.4/prediction-api.json
+++ b/prediction/v1.4/prediction-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/UHTvp9INyqQZLFiUGGWOxf3PFTA\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/UHTvp9INyqQZLFiUGGWOxf3PFTA\"",
  "discoveryVersion": "v1",
  "id": "prediction:v1.4",
  "name": "prediction",
diff --git a/prediction/v1.5/prediction-api.json b/prediction/v1.5/prediction-api.json
index a3b2810..8946822 100644
--- a/prediction/v1.5/prediction-api.json
+++ b/prediction/v1.5/prediction-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/ym-BJa5yGEZsHgX-PiovxSth2PY\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/ym-BJa5yGEZsHgX-PiovxSth2PY\"",
  "discoveryVersion": "v1",
  "id": "prediction:v1.5",
  "name": "prediction",
diff --git a/reseller/v1/reseller-api.json b/reseller/v1/reseller-api.json
index f50e1fe..b5fd8e7 100644
--- a/reseller/v1/reseller-api.json
+++ b/reseller/v1/reseller-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/4IzNaFm7TYB6eJZscTcmpsBKk-0\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/Qaw4O4xIZ1X1A6NR-C3D43AiI0M\"",
  "discoveryVersion": "v1",
  "id": "reseller:v1",
  "name": "reseller",
@@ -68,6 +68,18 @@
    "location": "query"
   }
  },
+ "auth": {
+  "oauth2": {
+   "scopes": {
+    "https://www.googleapis.com/auth/apps.order": {
+     "description": "Manage users on your domain"
+    },
+    "https://www.googleapis.com/auth/apps.order.readonly": {
+     "description": "Manage users on your domain"
+    }
+   }
+  }
+ },
  "schemas": {
   "Address": {
    "id": "Address",
@@ -369,7 +381,11 @@
      ],
      "response": {
       "$ref": "Customer"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/apps.order",
+      "https://www.googleapis.com/auth/apps.order.readonly"
+     ]
     },
     "insert": {
      "id": "reseller.customers.insert",
@@ -388,7 +404,10 @@
      },
      "response": {
       "$ref": "Customer"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/apps.order"
+     ]
     },
     "patch": {
      "id": "reseller.customers.patch",
@@ -411,7 +430,10 @@
      },
      "response": {
       "$ref": "Customer"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/apps.order"
+     ]
     },
     "update": {
      "id": "reseller.customers.update",
@@ -434,7 +456,10 @@
      },
      "response": {
       "$ref": "Customer"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/apps.order"
+     ]
     }
    }
   },
@@ -468,7 +493,10 @@
      },
      "response": {
       "$ref": "Subscription"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/apps.order"
+     ]
     },
     "changeRenewalSettings": {
      "id": "reseller.subscriptions.changeRenewalSettings",
@@ -498,7 +526,10 @@
      },
      "response": {
       "$ref": "Subscription"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/apps.order"
+     ]
     },
     "changeSeats": {
      "id": "reseller.subscriptions.changeSeats",
@@ -528,7 +559,10 @@
      },
      "response": {
       "$ref": "Subscription"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/apps.order"
+     ]
     },
     "delete": {
      "id": "reseller.subscriptions.delete",
@@ -569,6 +603,9 @@
       "customerId",
       "subscriptionId",
       "deletionType"
+     ],
+     "scopes": [
+      "https://www.googleapis.com/auth/apps.order"
      ]
     },
     "get": {
@@ -596,7 +633,11 @@
      ],
      "response": {
       "$ref": "Subscription"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/apps.order",
+      "https://www.googleapis.com/auth/apps.order.readonly"
+     ]
     },
     "insert": {
      "id": "reseller.subscriptions.insert",
@@ -624,7 +665,10 @@
      },
      "response": {
       "$ref": "Subscription"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/apps.order"
+     ]
     },
     "list": {
      "id": "reseller.subscriptions.list",
@@ -663,7 +707,11 @@
      },
      "response": {
       "$ref": "Subscriptions"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/apps.order",
+      "https://www.googleapis.com/auth/apps.order.readonly"
+     ]
     },
     "startPaidService": {
      "id": "reseller.subscriptions.startPaidService",
@@ -690,7 +738,10 @@
      ],
      "response": {
       "$ref": "Subscription"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/apps.order"
+     ]
     }
    }
   }
diff --git a/reseller/v1/reseller-gen.go b/reseller/v1/reseller-gen.go
index 5876d96..93e0b1b 100644
--- a/reseller/v1/reseller-gen.go
+++ b/reseller/v1/reseller-gen.go
@@ -39,6 +39,15 @@
 const apiVersion = "v1"
 const basePath = "https://www.googleapis.com/apps/reseller/v1/"
 
+// OAuth2 scopes used by this API.
+const (
+	// Manage users on your domain
+	AppsOrderScope = "https://www.googleapis.com/auth/apps.order"
+
+	// Manage users on your domain
+	AppsOrderReadonlyScope = "https://www.googleapis.com/auth/apps.order.readonly"
+)
+
 func New(client *http.Client) (*Service, error) {
 	if client == nil {
 		return nil, errors.New("client is nil")
@@ -319,7 +328,11 @@
 	//   "path": "customers/{customerId}",
 	//   "response": {
 	//     "$ref": "Customer"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/apps.order",
+	//     "https://www.googleapis.com/auth/apps.order.readonly"
+	//   ]
 	// }
 
 }
@@ -396,7 +409,10 @@
 	//   },
 	//   "response": {
 	//     "$ref": "Customer"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/apps.order"
+	//   ]
 	// }
 
 }
@@ -469,7 +485,10 @@
 	//   },
 	//   "response": {
 	//     "$ref": "Customer"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/apps.order"
+	//   ]
 	// }
 
 }
@@ -542,7 +561,10 @@
 	//   },
 	//   "response": {
 	//     "$ref": "Customer"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/apps.order"
+	//   ]
 	// }
 
 }
@@ -624,7 +646,10 @@
 	//   },
 	//   "response": {
 	//     "$ref": "Subscription"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/apps.order"
+	//   ]
 	// }
 
 }
@@ -706,7 +731,10 @@
 	//   },
 	//   "response": {
 	//     "$ref": "Subscription"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/apps.order"
+	//   ]
 	// }
 
 }
@@ -788,7 +816,10 @@
 	//   },
 	//   "response": {
 	//     "$ref": "Subscription"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/apps.order"
+	//   ]
 	// }
 
 }
@@ -872,7 +903,10 @@
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "customers/{customerId}/subscriptions/{subscriptionId}"
+	//   "path": "customers/{customerId}/subscriptions/{subscriptionId}",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/apps.order"
+	//   ]
 	// }
 
 }
@@ -943,7 +977,11 @@
 	//   "path": "customers/{customerId}/subscriptions/{subscriptionId}",
 	//   "response": {
 	//     "$ref": "Subscription"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/apps.order",
+	//     "https://www.googleapis.com/auth/apps.order.readonly"
+	//   ]
 	// }
 
 }
@@ -1031,7 +1069,10 @@
 	//   },
 	//   "response": {
 	//     "$ref": "Subscription"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/apps.order"
+	//   ]
 	// }
 
 }
@@ -1162,7 +1203,11 @@
 	//   "path": "subscriptions",
 	//   "response": {
 	//     "$ref": "Subscriptions"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/apps.order",
+	//     "https://www.googleapis.com/auth/apps.order.readonly"
+	//   ]
 	// }
 
 }
@@ -1233,7 +1278,10 @@
 	//   "path": "customers/{customerId}/subscriptions/{subscriptionId}/startPaidService",
 	//   "response": {
 	//     "$ref": "Subscription"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/apps.order"
+	//   ]
 	// }
 
 }
diff --git a/reseller/v1sandbox/reseller-api.json b/reseller/v1sandbox/reseller-api.json
index 20c92e2..e77f6d2 100644
--- a/reseller/v1sandbox/reseller-api.json
+++ b/reseller/v1sandbox/reseller-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/utT2Wi3czAg-dnRo1mJTmtoTko0\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/lCOFlgVtGlgupSVNF85eEEfwphE\"",
  "discoveryVersion": "v1",
  "id": "reseller:v1sandbox",
  "name": "reseller",
@@ -68,6 +68,18 @@
    "location": "query"
   }
  },
+ "auth": {
+  "oauth2": {
+   "scopes": {
+    "https://www.googleapis.com/auth/apps.order": {
+     "description": "Manage users on your domain"
+    },
+    "https://www.googleapis.com/auth/apps.order.readonly": {
+     "description": "Manage users on your domain"
+    }
+   }
+  }
+ },
  "schemas": {
   "Address": {
    "id": "Address",
@@ -369,7 +381,11 @@
      ],
      "response": {
       "$ref": "Customer"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/apps.order",
+      "https://www.googleapis.com/auth/apps.order.readonly"
+     ]
     },
     "insert": {
      "id": "reseller.customers.insert",
@@ -388,7 +404,10 @@
      },
      "response": {
       "$ref": "Customer"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/apps.order"
+     ]
     },
     "patch": {
      "id": "reseller.customers.patch",
@@ -411,7 +430,10 @@
      },
      "response": {
       "$ref": "Customer"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/apps.order"
+     ]
     },
     "update": {
      "id": "reseller.customers.update",
@@ -434,7 +456,10 @@
      },
      "response": {
       "$ref": "Customer"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/apps.order"
+     ]
     }
    }
   },
@@ -468,7 +493,10 @@
      },
      "response": {
       "$ref": "Subscription"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/apps.order"
+     ]
     },
     "changeRenewalSettings": {
      "id": "reseller.subscriptions.changeRenewalSettings",
@@ -498,7 +526,10 @@
      },
      "response": {
       "$ref": "Subscription"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/apps.order"
+     ]
     },
     "changeSeats": {
      "id": "reseller.subscriptions.changeSeats",
@@ -528,7 +559,10 @@
      },
      "response": {
       "$ref": "Subscription"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/apps.order"
+     ]
     },
     "delete": {
      "id": "reseller.subscriptions.delete",
@@ -569,6 +603,9 @@
       "customerId",
       "subscriptionId",
       "deletionType"
+     ],
+     "scopes": [
+      "https://www.googleapis.com/auth/apps.order"
      ]
     },
     "get": {
@@ -596,7 +633,11 @@
      ],
      "response": {
       "$ref": "Subscription"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/apps.order",
+      "https://www.googleapis.com/auth/apps.order.readonly"
+     ]
     },
     "insert": {
      "id": "reseller.subscriptions.insert",
@@ -624,7 +665,10 @@
      },
      "response": {
       "$ref": "Subscription"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/apps.order"
+     ]
     },
     "list": {
      "id": "reseller.subscriptions.list",
@@ -663,7 +707,11 @@
      },
      "response": {
       "$ref": "Subscriptions"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/apps.order",
+      "https://www.googleapis.com/auth/apps.order.readonly"
+     ]
     },
     "startPaidService": {
      "id": "reseller.subscriptions.startPaidService",
@@ -690,7 +738,10 @@
      ],
      "response": {
       "$ref": "Subscription"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/apps.order"
+     ]
     }
    }
   }
diff --git a/reseller/v1sandbox/reseller-gen.go b/reseller/v1sandbox/reseller-gen.go
index e9d8c31..a2a3ae3 100644
--- a/reseller/v1sandbox/reseller-gen.go
+++ b/reseller/v1sandbox/reseller-gen.go
@@ -39,6 +39,15 @@
 const apiVersion = "v1sandbox"
 const basePath = "https://www.googleapis.com/apps/reseller/v1sandbox/"
 
+// OAuth2 scopes used by this API.
+const (
+	// Manage users on your domain
+	AppsOrderScope = "https://www.googleapis.com/auth/apps.order"
+
+	// Manage users on your domain
+	AppsOrderReadonlyScope = "https://www.googleapis.com/auth/apps.order.readonly"
+)
+
 func New(client *http.Client) (*Service, error) {
 	if client == nil {
 		return nil, errors.New("client is nil")
@@ -319,7 +328,11 @@
 	//   "path": "customers/{customerId}",
 	//   "response": {
 	//     "$ref": "Customer"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/apps.order",
+	//     "https://www.googleapis.com/auth/apps.order.readonly"
+	//   ]
 	// }
 
 }
@@ -396,7 +409,10 @@
 	//   },
 	//   "response": {
 	//     "$ref": "Customer"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/apps.order"
+	//   ]
 	// }
 
 }
@@ -469,7 +485,10 @@
 	//   },
 	//   "response": {
 	//     "$ref": "Customer"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/apps.order"
+	//   ]
 	// }
 
 }
@@ -542,7 +561,10 @@
 	//   },
 	//   "response": {
 	//     "$ref": "Customer"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/apps.order"
+	//   ]
 	// }
 
 }
@@ -624,7 +646,10 @@
 	//   },
 	//   "response": {
 	//     "$ref": "Subscription"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/apps.order"
+	//   ]
 	// }
 
 }
@@ -706,7 +731,10 @@
 	//   },
 	//   "response": {
 	//     "$ref": "Subscription"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/apps.order"
+	//   ]
 	// }
 
 }
@@ -788,7 +816,10 @@
 	//   },
 	//   "response": {
 	//     "$ref": "Subscription"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/apps.order"
+	//   ]
 	// }
 
 }
@@ -872,7 +903,10 @@
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "customers/{customerId}/subscriptions/{subscriptionId}"
+	//   "path": "customers/{customerId}/subscriptions/{subscriptionId}",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/apps.order"
+	//   ]
 	// }
 
 }
@@ -943,7 +977,11 @@
 	//   "path": "customers/{customerId}/subscriptions/{subscriptionId}",
 	//   "response": {
 	//     "$ref": "Subscription"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/apps.order",
+	//     "https://www.googleapis.com/auth/apps.order.readonly"
+	//   ]
 	// }
 
 }
@@ -1031,7 +1069,10 @@
 	//   },
 	//   "response": {
 	//     "$ref": "Subscription"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/apps.order"
+	//   ]
 	// }
 
 }
@@ -1162,7 +1203,11 @@
 	//   "path": "subscriptions",
 	//   "response": {
 	//     "$ref": "Subscriptions"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/apps.order",
+	//     "https://www.googleapis.com/auth/apps.order.readonly"
+	//   ]
 	// }
 
 }
@@ -1233,7 +1278,10 @@
 	//   "path": "customers/{customerId}/subscriptions/{subscriptionId}/startPaidService",
 	//   "response": {
 	//     "$ref": "Subscription"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/apps.order"
+	//   ]
 	// }
 
 }
diff --git a/shopping/v1/shopping-api.json b/shopping/v1/shopping-api.json
index 0890280..70b1635 100644
--- a/shopping/v1/shopping-api.json
+++ b/shopping/v1/shopping-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/CO6ob9R1rU0741WpW7wTq9Ju-zg\"",
+ "etag": "\"qMhxoRFWKZK4K3KdZJuqms1o3fc/eYPSUUittvTUsdwxdJRMVIUXPek\"",
  "discoveryVersion": "v1",
  "id": "shopping:v1",
  "name": "shopping",
@@ -316,13 +316,6 @@
       "type": "string"
      }
     },
-    "relatedQueries": {
-     "type": "array",
-     "description": "Related queries.",
-     "items": {
-      "type": "string"
-     }
-    },
     "requestId": {
      "type": "string",
      "description": "Unique identifier for this request."
@@ -1164,16 +1157,6 @@
        "description": "Whether to return redirect information as configured in the GCS account",
        "location": "query"
       },
-      "relatedQueries.enabled": {
-       "type": "boolean",
-       "description": "Whether to return related queries",
-       "location": "query"
-      },
-      "relatedQueries.useGcsConfig": {
-       "type": "boolean",
-       "description": "This parameter is currently ignored",
-       "location": "query"
-      },
       "restrictBy": {
        "type": "string",
        "description": "Restriction specification",
diff --git a/shopping/v1/shopping-gen.go b/shopping/v1/shopping-gen.go
index 4d68096..04f27f9 100644
--- a/shopping/v1/shopping-gen.go
+++ b/shopping/v1/shopping-gen.go
@@ -143,9 +143,6 @@
 	// Redirects: Redirects.
 	Redirects []string `json:"redirects,omitempty"`
 
-	// RelatedQueries: Related queries.
-	RelatedQueries []string `json:"relatedQueries,omitempty"`
-
 	// RequestId: Unique identifier for this request.
 	RequestId string `json:"requestId,omitempty"`
 
@@ -1093,20 +1090,6 @@
 	return c
 }
 
-// RelatedQueriesEnabled sets the optional parameter
-// "relatedQueries.enabled": Whether to return related queries
-func (c *ProductsListCall) RelatedQueriesEnabled(relatedQueriesEnabled bool) *ProductsListCall {
-	c.opt_["relatedQueries.enabled"] = relatedQueriesEnabled
-	return c
-}
-
-// RelatedQueriesUseGcsConfig sets the optional parameter
-// "relatedQueries.useGcsConfig": This parameter is currently ignored
-func (c *ProductsListCall) RelatedQueriesUseGcsConfig(relatedQueriesUseGcsConfig bool) *ProductsListCall {
-	c.opt_["relatedQueries.useGcsConfig"] = relatedQueriesUseGcsConfig
-	return c
-}
-
 // RestrictBy sets the optional parameter "restrictBy": Restriction
 // specification
 func (c *ProductsListCall) RestrictBy(restrictBy string) *ProductsListCall {
@@ -1262,12 +1245,6 @@
 	if v, ok := c.opt_["redirects.useGcsConfig"]; ok {
 		params.Set("redirects.useGcsConfig", fmt.Sprintf("%v", v))
 	}
-	if v, ok := c.opt_["relatedQueries.enabled"]; ok {
-		params.Set("relatedQueries.enabled", fmt.Sprintf("%v", v))
-	}
-	if v, ok := c.opt_["relatedQueries.useGcsConfig"]; ok {
-		params.Set("relatedQueries.useGcsConfig", fmt.Sprintf("%v", v))
-	}
 	if v, ok := c.opt_["restrictBy"]; ok {
 		params.Set("restrictBy", fmt.Sprintf("%v", v))
 	}
@@ -1481,16 +1458,6 @@
 	//       "location": "query",
 	//       "type": "boolean"
 	//     },
-	//     "relatedQueries.enabled": {
-	//       "description": "Whether to return related queries",
-	//       "location": "query",
-	//       "type": "boolean"
-	//     },
-	//     "relatedQueries.useGcsConfig": {
-	//       "description": "This parameter is currently ignored",
-	//       "location": "query",
-	//       "type": "boolean"
-	//     },
 	//     "restrictBy": {
 	//       "description": "Restriction specification",
 	//       "location": "query",
diff --git a/siteverification/v1/siteverification-api.json b/siteverification/v1/siteverification-api.json
index 3b65178..f266f43 100644
--- a/siteverification/v1/siteverification-api.json
+++ b/siteverification/v1/siteverification-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/T-KUOZ6MW3qGb2TywsMrS2SH2E4\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/T-KUOZ6MW3qGb2TywsMrS2SH2E4\"",
  "discoveryVersion": "v1",
  "id": "siteVerification:v1",
  "name": "siteVerification",
diff --git a/spectrum/v1explorer/spectrum-api.json b/spectrum/v1explorer/spectrum-api.json
new file mode 100644
index 0000000..a08176b
--- /dev/null
+++ b/spectrum/v1explorer/spectrum-api.json
@@ -0,0 +1,991 @@
+{
+ "kind": "discovery#restDescription",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/W1KBbX-gDHMUVgPHQ9VDTGhsP9o\"",
+ "discoveryVersion": "v1",
+ "id": "spectrum:v1explorer",
+ "name": "spectrum",
+ "version": "v1explorer",
+ "title": "Google Spectrum Database API",
+ "description": "API for spectrum-management functions.",
+ "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": "http://developers.google.com/spectrum",
+ "protocol": "rest",
+ "baseUrl": "https://www.googleapis.com/spectrum/v1explorer/paws/",
+ "basePath": "/spectrum/v1explorer/paws/",
+ "rootUrl": "https://www.googleapis.com/",
+ "servicePath": "spectrum/v1explorer/paws/",
+ "batchPath": "batch",
+ "parameters": {
+  "alt": {
+   "type": "string",
+   "description": "Data format for the response.",
+   "default": "json",
+   "enum": [
+    "csv",
+    "json"
+   ],
+   "enumDescriptions": [
+    "Responses with Content-Type of text/csv",
+    "Responses with Content-Type of application/json"
+   ],
+   "location": "query"
+  },
+  "fields": {
+   "type": "string",
+   "description": "Selector specifying which fields to include in a partial response.",
+   "location": "query"
+  },
+  "key": {
+   "type": "string",
+   "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+   "location": "query"
+  },
+  "oauth_token": {
+   "type": "string",
+   "description": "OAuth 2.0 token for the current user.",
+   "location": "query"
+  },
+  "prettyPrint": {
+   "type": "boolean",
+   "description": "Returns response with indentations and line breaks.",
+   "default": "true",
+   "location": "query"
+  },
+  "quotaUser": {
+   "type": "string",
+   "description": "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. Overrides userIp if both are provided.",
+   "location": "query"
+  },
+  "userIp": {
+   "type": "string",
+   "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.",
+   "location": "query"
+  }
+ },
+ "schemas": {
+  "AntennaCharacteristics": {
+   "id": "AntennaCharacteristics",
+   "type": "object",
+   "description": "Antenna characteristics provide additional information, such as the antenna height, antenna type, etc. Whether antenna characteristics must be provided in a request depends on the device type and regulatory domain.",
+   "properties": {
+    "height": {
+     "type": "number",
+     "description": "The antenna height in meters. Whether the antenna height is required depends on the device type and the regulatory domain. Note that the height may be negative.",
+     "format": "double"
+    },
+    "heightType": {
+     "type": "string",
+     "description": "If the height is required, then the height type (AGL for above ground level or AMSL for above mean sea level) is also required. The default is AGL."
+    },
+    "heightUncertainty": {
+     "type": "number",
+     "description": "The height uncertainty in meters. Whether this is required depends on the regulatory domain.",
+     "format": "double"
+    }
+   }
+  },
+  "DatabaseSpec": {
+   "id": "DatabaseSpec",
+   "type": "object",
+   "description": "This message contains the name and URI of a database.",
+   "properties": {
+    "name": {
+     "type": "string",
+     "description": "The display name for a database."
+    },
+    "uri": {
+     "type": "string",
+     "description": "The corresponding URI of the database."
+    }
+   }
+  },
+  "DbUpdateSpec": {
+   "id": "DbUpdateSpec",
+   "type": "object",
+   "description": "This message is provided by the database to notify devices of an upcoming change to the database URI.",
+   "properties": {
+    "databases": {
+     "type": "array",
+     "description": "A required list of one or more databases. A device should update its preconfigured list of databases to replace (only) the database that provided the response with the specified entries.",
+     "items": {
+      "$ref": "DatabaseSpec"
+     }
+    }
+   }
+  },
+  "DeviceCapabilities": {
+   "id": "DeviceCapabilities",
+   "type": "object",
+   "description": "Device capabilities provide additional information that may be used by a device to provide additional information to the database that may help it to determine available spectrum. If the database does not support device capabilities it will ignore the parameter altogether.",
+   "properties": {
+    "frequencyRanges": {
+     "type": "array",
+     "description": "An optional list of frequency ranges supported by the device. Each element must contain start and stop frequencies in which the device can operate. Channel identifiers are optional. When specified, the database should not return available spectrum that falls outside these ranges or channel IDs.",
+     "items": {
+      "$ref": "FrequencyRange"
+     }
+    }
+   }
+  },
+  "DeviceDescriptor": {
+   "id": "DeviceDescriptor",
+   "type": "object",
+   "description": "The device descriptor contains parameters that identify the specific device, such as its manufacturer serial number, regulatory-specific identifier (e.g., FCC ID), and any other device characteristics required by regulatory domains.",
+   "properties": {
+    "etsiEnDeviceCategory": {
+     "type": "string",
+     "description": "Specifies the ETSI white space device category. Valid values are the strings master and slave. This field is case-insensitive. Consult the ETSI documentation for details about the device types."
+    },
+    "etsiEnDeviceEmissionsClass": {
+     "type": "string",
+     "description": "Specifies the ETSI white space device emissions class. The values are represented by numeric strings, such as 1, 2, etc. Consult the ETSI documentation for details about the device types."
+    },
+    "etsiEnDeviceType": {
+     "type": "string",
+     "description": "Specifies the ETSI white space device type. Valid values are single-letter strings, such as A, B, etc. Consult the ETSI documentation for details about the device types."
+    },
+    "etsiEnTechnologyId": {
+     "type": "string",
+     "description": "Specifies the ETSI white space device technology identifier. The string value must not exceed 64 characters in length. Consult the ETSI documentation for details about the device types."
+    },
+    "fccId": {
+     "type": "string",
+     "description": "Specifies the device's FCC certification identifier. The value is an identifier string whose length should not exceed 32 characters. Note that, in practice, a valid FCC ID may be limited to 19 characters."
+    },
+    "fccTvbdDeviceType": {
+     "type": "string",
+     "description": "Specifies the TV Band White Space device type, as defined by the FCC. Valid values are FIXED, MODE_1, MODE_2."
+    },
+    "manufacturerId": {
+     "type": "string",
+     "description": "The manufacturer's ID may be required by the regulatory domain. This should represent the name of the device manufacturer, should be consistent across all devices from the same manufacturer, and should be distinct from that of other manufacturers. The string value must not exceed 64 characters in length."
+    },
+    "modelId": {
+     "type": "string",
+     "description": "The device's model ID may be required by the regulatory domain. The string value must not exceed 64 characters in length."
+    },
+    "rulesetIds": {
+     "type": "array",
+     "description": "The list of identifiers for rulesets supported by the device. A database may require that the device provide this list before servicing the device requests. If the database does not support any of the rulesets specified in the list, the database may refuse to service the device requests. If present, the list must contain at least one entry.\n\nFor information about the valid requests, see section 9.2 of the PAWS specification. Currently, FccTvBandWhiteSpace-2010 is the only supported ruleset.",
+     "items": {
+      "type": "string"
+     }
+    },
+    "serialNumber": {
+     "type": "string",
+     "description": "The manufacturer's device serial number; required by the applicable regulatory domain. The length of the value must not exceed 64 characters."
+    }
+   }
+  },
+  "DeviceOwner": {
+   "id": "DeviceOwner",
+   "type": "object",
+   "description": "This parameter contains device-owner information required as part of device registration. The regulatory domains may require additional parameters.\n\nAll contact information must be expressed using the structure defined by the vCard format specification. Only the contact fields of vCard are supported:  \n- fn: Full name of an individual \n- org: Name of the organization \n- adr: Address fields \n- tel: Telephone numbers \n- email: Email addresses  \n\nNote that the vCard specification defines maximum lengths for each field.",
+   "properties": {
+    "operator": {
+     "$ref": "Vcard",
+     "description": "The vCard contact information for the device operator is optional, but may be required by specific regulatory domains."
+    },
+    "owner": {
+     "$ref": "Vcard",
+     "description": "The vCard contact information for the individual or business that owns the device is required."
+    }
+   }
+  },
+  "DeviceValidity": {
+   "id": "DeviceValidity",
+   "type": "object",
+   "description": "The device validity element describes whether a particular device is valid to operate in the regulatory domain.",
+   "properties": {
+    "deviceDesc": {
+     "$ref": "DeviceDescriptor",
+     "description": "The descriptor of the device for which the validity check was requested. It will always be present."
+    },
+    "isValid": {
+     "type": "boolean",
+     "description": "The validity status: true if the device is valid for operation, false otherwise. It will always be present."
+    },
+    "reason": {
+     "type": "string",
+     "description": "If the device identifier is not valid, the database may include a reason. The reason may be in any language. The length of the value should not exceed 128 characters."
+    }
+   }
+  },
+  "EventTime": {
+   "id": "EventTime",
+   "type": "object",
+   "description": "The start and stop times of an event. This is used to indicate the time period for which a spectrum profile is valid.\n\nBoth times are expressed using the format, YYYY-MM-DDThh:mm:ssZ, as defined in RFC3339. The times must be expressed using UTC.",
+   "properties": {
+    "startTime": {
+     "type": "string",
+     "description": "The inclusive start of the event. It will be present."
+    },
+    "stopTime": {
+     "type": "string",
+     "description": "The exclusive end of the event. It will be present."
+    }
+   }
+  },
+  "FrequencyRange": {
+   "id": "FrequencyRange",
+   "type": "object",
+   "description": "A specific range of frequencies together with the associated maximum power level and channel identifier.",
+   "properties": {
+    "channelId": {
+     "type": "string",
+     "description": "The database may include a channel identifier, when applicable. When it is included, the device should treat it as informative. The length of the identifier should not exceed 16 characters."
+    },
+    "maxPowerDBm": {
+     "type": "number",
+     "description": "The maximum total power level (EIRP)—computed over the corresponding operating bandwidth—that is permitted within the frequency range. Depending on the context in which the frequency-range element appears, this value may be required. For example, it is required in the available-spectrum response, available-spectrum-batch response, and spectrum-use notification message, but it should not be present (it is not applicable) when the frequency range appears inside a device-capabilities message.",
+     "format": "double"
+    },
+    "startHz": {
+     "type": "number",
+     "description": "The required inclusive start of the frequency range (in Hertz).",
+     "format": "double"
+    },
+    "stopHz": {
+     "type": "number",
+     "description": "The required exclusive end of the frequency range (in Hertz).",
+     "format": "double"
+    }
+   }
+  },
+  "GeoLocation": {
+   "id": "GeoLocation",
+   "type": "object",
+   "description": "This parameter is used to specify the geolocation of the device.",
+   "properties": {
+    "confidence": {
+     "type": "integer",
+     "description": "The location confidence level, as an integer percentage, may be required, depending on the regulatory domain. When the parameter is optional and not provided, its value is assumed to be 95. Valid values range from 0 to 99, since, in practice, 100-percent confidence is not achievable. The confidence value is meaningful only when geolocation refers to a point with uncertainty.",
+     "format": "int32"
+    },
+    "point": {
+     "$ref": "GeoLocationEllipse",
+     "description": "If present, indicates that the geolocation represents a point. Paradoxically, a point is parameterized using an ellipse, where the center represents the location of the point and the distances along the major and minor axes represent the uncertainty. The uncertainty values may be required, depending on the regulatory domain."
+    },
+    "region": {
+     "$ref": "GeoLocationPolygon",
+     "description": "If present, indicates that the geolocation represents a region. Database support for regions is optional."
+    }
+   }
+  },
+  "GeoLocationEllipse": {
+   "id": "GeoLocationEllipse",
+   "type": "object",
+   "description": "A \"point\" with uncertainty is represented using the Ellipse shape.",
+   "properties": {
+    "center": {
+     "$ref": "GeoLocationPoint",
+     "description": "A required geo-spatial point representing the center of the ellipse."
+    },
+    "orientation": {
+     "type": "number",
+     "description": "A floating-point number that expresses the orientation of the ellipse, representing the rotation, in degrees, of the semi-major axis from North towards the East. For example, when the uncertainty is greatest along the North-South direction, orientation is 0 degrees; conversely, if the uncertainty is greatest along the East-West direction, orientation is 90 degrees. When orientation is not present, the orientation is assumed to be 0.",
+     "format": "double"
+    },
+    "semiMajorAxis": {
+     "type": "number",
+     "description": "A floating-point number that expresses the location uncertainty along the major axis of the ellipse. May be required by the regulatory domain. When the uncertainty is optional, the default value is 0.",
+     "format": "double"
+    },
+    "semiMinorAxis": {
+     "type": "number",
+     "description": "A floating-point number that expresses the location uncertainty along the minor axis of the ellipse. May be required by the regulatory domain. When the uncertainty is optional, the default value is 0.",
+     "format": "double"
+    }
+   }
+  },
+  "GeoLocationPoint": {
+   "id": "GeoLocationPoint",
+   "type": "object",
+   "description": "A single geolocation on the globe.",
+   "properties": {
+    "latitude": {
+     "type": "number",
+     "description": "A required floating-point number that expresses the latitude in degrees using the WGS84 datum. For details on this encoding, see the National Imagery and Mapping Agency's Technical Report TR8350.2.",
+     "format": "double"
+    },
+    "longitude": {
+     "type": "number",
+     "description": "A required floating-point number that expresses the longitude in degrees using the WGS84 datum. For details on this encoding, see the National Imagery and Mapping Agency's Technical Report TR8350.2.",
+     "format": "double"
+    }
+   }
+  },
+  "GeoLocationPolygon": {
+   "id": "GeoLocationPolygon",
+   "type": "object",
+   "description": "A region is represented using the polygonal shape.",
+   "properties": {
+    "exterior": {
+     "type": "array",
+     "description": "When the geolocation describes a region, the exterior field refers to a list of latitude/longitude points that represent the vertices of a polygon. The first and last points must be the same. Thus, a minimum of four points is required. The following polygon restrictions from RFC5491 apply:  \n- A connecting line shall not cross another connecting line of the same polygon. \n- The vertices must be defined in a counterclockwise order. \n- The edges of a polygon are defined by the shortest path between two points in space (not a geodesic curve). Consequently, the length between two adjacent vertices should be restricted to a maximum of 130 km. \n- All vertices are assumed to be at the same altitude. \n- Polygon shapes should be restricted to a maximum of 15 vertices (16 points that include the repeated vertex).",
+     "items": {
+      "$ref": "GeoLocationPoint"
+     }
+    }
+   }
+  },
+  "GeoSpectrumSchedule": {
+   "id": "GeoSpectrumSchedule",
+   "type": "object",
+   "description": "The schedule of spectrum profiles available at a particular geolocation.",
+   "properties": {
+    "location": {
+     "$ref": "GeoLocation",
+     "description": "The geolocation identifies the location at which the spectrum schedule applies. It will always be present."
+    },
+    "spectrumSchedules": {
+     "type": "array",
+     "description": "A list of available spectrum profiles and associated times. It will always be present, and at least one schedule must be included (though it may be empty if there is no available spectrum). More than one schedule may be included to represent future changes to the available spectrum.",
+     "items": {
+      "$ref": "SpectrumSchedule"
+     }
+    }
+   }
+  },
+  "PawsGetSpectrumBatchRequest": {
+   "id": "PawsGetSpectrumBatchRequest",
+   "type": "object",
+   "description": "The request message for a batch available spectrum query protocol.",
+   "properties": {
+    "antenna": {
+     "$ref": "AntennaCharacteristics",
+     "description": "Depending on device type and regulatory domain, antenna characteristics may be required."
+    },
+    "capabilities": {
+     "$ref": "DeviceCapabilities",
+     "description": "The master device may include its device capabilities to limit the available-spectrum batch response to the spectrum that is compatible with its capabilities. The database should not return spectrum that is incompatible with the specified capabilities."
+    },
+    "deviceDesc": {
+     "$ref": "DeviceDescriptor",
+     "description": "When the available spectrum request is made on behalf of a specific device (a master or slave device), device descriptor information for the device on whose behalf the request is made is required (in such cases, the requestType parameter must be empty). When a requestType value is specified, device descriptor information may be optional or required according to the rules of the applicable regulatory domain."
+    },
+    "locations": {
+     "type": "array",
+     "description": "A geolocation list is required. This allows a device to specify its current location plus additional anticipated locations when allowed by the regulatory domain. At least one location must be included. Geolocation must be given as the location of the radiation center of the device's antenna. If a location specifies a region, rather than a point, the database may return an UNIMPLEMENTED error if it does not support query by region.\n\nThere is no upper limit on the number of locations included in a available spectrum batch request, but the database may restrict the number of locations it supports by returning a response with fewer locations than specified in the batch request. Note that geolocations must be those of the master device (a device with geolocation capability that makes an available spectrum batch request), whether the master device is making the request on its own behalf or on behalf of a slave device (one without geolocation capability).",
+     "items": {
+      "$ref": "GeoLocation"
+     }
+    },
+    "masterDeviceDesc": {
+     "$ref": "DeviceDescriptor",
+     "description": "When an available spectrum batch request is made by the master device (a device with geolocation capability) on behalf of a slave device (a device without geolocation capability), the rules of the applicable regulatory domain may require the master device to provide its own device descriptor information (in addition to device descriptor information for the slave device in a separate parameter)."
+    },
+    "owner": {
+     "$ref": "DeviceOwner",
+     "description": "Depending on device type and regulatory domain, device owner information may be included in an available spectrum batch request. This allows the device to register and get spectrum-availability information in a single request."
+    },
+    "requestType": {
+     "type": "string",
+     "description": "The request type parameter is an optional parameter that can be used to modify an available spectrum batch request, but its use depends on applicable regulatory rules. For example, It may be used to request generic slave device parameters without having to specify the device descriptor for a specific device. When the requestType parameter is missing, the request is for a specific device (master or slave), and the device descriptor parameter for the device on whose behalf the batch request is made is required."
+    },
+    "type": {
+     "type": "string",
+     "description": "The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).\n\nRequired field."
+    },
+    "version": {
+     "type": "string",
+     "description": "The PAWS version. Must be exactly 1.0.\n\nRequired field."
+    }
+   }
+  },
+  "PawsGetSpectrumBatchResponse": {
+   "id": "PawsGetSpectrumBatchResponse",
+   "type": "object",
+   "description": "The response message for the batch available spectrum query contains a schedule of available spectrum for the device at multiple locations.",
+   "properties": {
+    "databaseChange": {
+     "$ref": "DbUpdateSpec",
+     "description": "A database may include the databaseChange parameter to notify a device of a change to its database URI, providing one or more alternate database URIs. The device should use this information to update its list of pre-configured databases by (only) replacing its entry for the responding database with the list of alternate URIs."
+    },
+    "deviceDesc": {
+     "$ref": "DeviceDescriptor",
+     "description": "The database must return in its available spectrum response the device descriptor information it received in the master device's available spectrum batch request."
+    },
+    "geoSpectrumSchedules": {
+     "type": "array",
+     "description": "The available spectrum batch response must contain a geo-spectrum schedule list, The list may be empty if spectrum is not available. The database may return more than one geo-spectrum schedule to represent future changes to the available spectrum. How far in advance a schedule may be provided depends upon the applicable regulatory domain. The database may return available spectrum for fewer geolocations than requested. The device must not make assumptions about the order of the entries in the list, and must use the geolocation value in each geo-spectrum schedule entry to match available spectrum to a location.",
+     "items": {
+      "$ref": "GeoSpectrumSchedule"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"spectrum#pawsGetSpectrumBatchResponse\".",
+     "default": "spectrum#pawsGetSpectrumBatchResponse"
+    },
+    "maxContiguousBwHz": {
+     "type": "number",
+     "description": "The database may return a constraint on the allowed maximum contiguous bandwidth (in Hertz). A regulatory domain may require the database to return this parameter. When this parameter is present in the response, the device must apply this constraint to its spectrum-selection logic to ensure that no single block of spectrum has bandwidth that exceeds this value.",
+     "format": "double"
+    },
+    "maxTotalBwHz": {
+     "type": "number",
+     "description": "The database may return a constraint on the allowed maximum total bandwidth (in Hertz), which does not need to be contiguous. A regulatory domain may require the database to return this parameter. When this parameter is present in the available spectrum batch response, the device must apply this constraint to its spectrum-selection logic to ensure that total bandwidth does not exceed this value.",
+     "format": "double"
+    },
+    "needsSpectrumReport": {
+     "type": "boolean",
+     "description": "For regulatory domains that require a spectrum-usage report from devices, the database must return true for this parameter if the geo-spectrum schedules list is not empty; otherwise, the database should either return false or omit this parameter. If this parameter is present and its value is true, the device must send a spectrum use notify message to the database; otherwise, the device should not send the notification."
+    },
+    "rulesetInfo": {
+     "$ref": "RulesetInfo",
+     "description": "The database should return ruleset information, which identifies the applicable regulatory authority and ruleset for the available spectrum batch response. If included, the device must use the corresponding ruleset to interpret the response. Values provided in the returned ruleset information, such as maxLocationChange, take precedence over any conflicting values provided in the ruleset information returned in a prior initialization response sent by the database to the device."
+    },
+    "timestamp": {
+     "type": "string",
+     "description": "The database includes a timestamp of the form, YYYY-MM-DDThh:mm:ssZ (Internet timestamp format per RFC3339), in its available spectrum batch response. The timestamp should be used by the device as a reference for the start and stop times specified in the response spectrum schedules."
+    },
+    "type": {
+     "type": "string",
+     "description": "The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).\n\nRequired field."
+    },
+    "version": {
+     "type": "string",
+     "description": "The PAWS version. Must be exactly 1.0.\n\nRequired field."
+    }
+   }
+  },
+  "PawsGetSpectrumRequest": {
+   "id": "PawsGetSpectrumRequest",
+   "type": "object",
+   "description": "The request message for the available spectrum query protocol which must include the device's geolocation.",
+   "properties": {
+    "antenna": {
+     "$ref": "AntennaCharacteristics",
+     "description": "Depending on device type and regulatory domain, the characteristics of the antenna may be required."
+    },
+    "capabilities": {
+     "$ref": "DeviceCapabilities",
+     "description": "The master device may include its device capabilities to limit the available-spectrum response to the spectrum that is compatible with its capabilities. The database should not return spectrum that is incompatible with the specified capabilities."
+    },
+    "deviceDesc": {
+     "$ref": "DeviceDescriptor",
+     "description": "When the available spectrum request is made on behalf of a specific device (a master or slave device), device descriptor information for that device is required (in such cases, the requestType parameter must be empty). When a requestType value is specified, device descriptor information may be optional or required according to the rules of the applicable regulatory domain."
+    },
+    "location": {
+     "$ref": "GeoLocation",
+     "description": "The geolocation of the master device (a device with geolocation capability that makes an available spectrum request) is required whether the master device is making the request on its own behalf or on behalf of a slave device (one without geolocation capability). The location must be the location of the radiation center of the master device's antenna. To support mobile devices, a regulatory domain may allow the anticipated position of the master device to be given instead. If the location specifies a region, rather than a point, the database may return an UNIMPLEMENTED error code if it does not support query by region."
+    },
+    "masterDeviceDesc": {
+     "$ref": "DeviceDescriptor",
+     "description": "When an available spectrum request is made by the master device (a device with geolocation capability) on behalf of a slave device (a device without geolocation capability), the rules of the applicable regulatory domain may require the master device to provide its own device descriptor information (in addition to device descriptor information for the slave device, which is provided in a separate parameter)."
+    },
+    "owner": {
+     "$ref": "DeviceOwner",
+     "description": "Depending on device type and regulatory domain, device owner information may be included in an available spectrum request. This allows the device to register and get spectrum-availability information in a single request."
+    },
+    "requestType": {
+     "type": "string",
+     "description": "The request type parameter is an optional parameter that can be used to modify an available spectrum request, but its use depends on applicable regulatory rules. It may be used, for example, to request generic slave device parameters without having to specify the device descriptor for a specific device. When the requestType parameter is missing, the request is for a specific device (master or slave), and the deviceDesc parameter for the device on whose behalf the request is made is required."
+    },
+    "type": {
+     "type": "string",
+     "description": "The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).\n\nRequired field."
+    },
+    "version": {
+     "type": "string",
+     "description": "The PAWS version. Must be exactly 1.0.\n\nRequired field."
+    }
+   }
+  },
+  "PawsGetSpectrumResponse": {
+   "id": "PawsGetSpectrumResponse",
+   "type": "object",
+   "description": "The response message for the available spectrum query which contains a schedule of available spectrum for the device.",
+   "properties": {
+    "databaseChange": {
+     "$ref": "DbUpdateSpec",
+     "description": "A database may include the databaseChange parameter to notify a device of a change to its database URI, providing one or more alternate database URIs. The device should use this information to update its list of pre-configured databases by (only) replacing its entry for the responding database with the list of alternate URIs."
+    },
+    "deviceDesc": {
+     "$ref": "DeviceDescriptor",
+     "description": "The database must return, in its available spectrum response, the device descriptor information it received in the master device's available spectrum request."
+    },
+    "kind": {
+     "type": "string",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"spectrum#pawsGetSpectrumResponse\".",
+     "default": "spectrum#pawsGetSpectrumResponse"
+    },
+    "maxContiguousBwHz": {
+     "type": "number",
+     "description": "The database may return a constraint on the allowed maximum contiguous bandwidth (in Hertz). A regulatory domain may require the database to return this parameter. When this parameter is present in the response, the device must apply this constraint to its spectrum-selection logic to ensure that no single block of spectrum has bandwidth that exceeds this value.",
+     "format": "double"
+    },
+    "maxTotalBwHz": {
+     "type": "number",
+     "description": "The database may return a constraint on the allowed maximum total bandwidth (in Hertz), which need not be contiguous. A regulatory domain may require the database to return this parameter. When this parameter is present in the available spectrum response, the device must apply this constraint to its spectrum-selection logic to ensure that total bandwidth does not exceed this value.",
+     "format": "double"
+    },
+    "needsSpectrumReport": {
+     "type": "boolean",
+     "description": "For regulatory domains that require a spectrum-usage report from devices, the database must return true for this parameter if the spectrum schedule list is not empty; otherwise, the database will either return false or omit this parameter. If this parameter is present and its value is true, the device must send a spectrum use notify message to the database; otherwise, the device must not send the notification."
+    },
+    "rulesetInfo": {
+     "$ref": "RulesetInfo",
+     "description": "The database should return ruleset information, which identifies the applicable regulatory authority and ruleset for the available spectrum response. If included, the device must use the corresponding ruleset to interpret the response. Values provided in the returned ruleset information, such as maxLocationChange, take precedence over any conflicting values provided in the ruleset information returned in a prior initialization response sent by the database to the device."
+    },
+    "spectrumSchedules": {
+     "type": "array",
+     "description": "The available spectrum response must contain a spectrum schedule list. The list may be empty if spectrum is not available. The database may return more than one spectrum schedule to represent future changes to the available spectrum. How far in advance a schedule may be provided depends on the applicable regulatory domain.",
+     "items": {
+      "$ref": "SpectrumSchedule"
+     }
+    },
+    "timestamp": {
+     "type": "string",
+     "description": "The database includes a timestamp of the form YYYY-MM-DDThh:mm:ssZ (Internet timestamp format per RFC3339) in its available spectrum response. The timestamp should be used by the device as a reference for the start and stop times specified in the response spectrum schedules."
+    },
+    "type": {
+     "type": "string",
+     "description": "The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).\n\nRequired field."
+    },
+    "version": {
+     "type": "string",
+     "description": "The PAWS version. Must be exactly 1.0.\n\nRequired field."
+    }
+   }
+  },
+  "PawsInitRequest": {
+   "id": "PawsInitRequest",
+   "type": "object",
+   "description": "The initialization request message allows the master device to initiate exchange of capabilities with the database.",
+   "properties": {
+    "deviceDesc": {
+     "$ref": "DeviceDescriptor",
+     "description": "The DeviceDescriptor parameter is required. If the database does not support the device or any of the rulesets specified in the device descriptor, it must return an UNSUPPORTED error code in the error response."
+    },
+    "location": {
+     "$ref": "GeoLocation",
+     "description": "A device's geolocation is required."
+    },
+    "type": {
+     "type": "string",
+     "description": "The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).\n\nRequired field."
+    },
+    "version": {
+     "type": "string",
+     "description": "The PAWS version. Must be exactly 1.0.\n\nRequired field."
+    }
+   }
+  },
+  "PawsInitResponse": {
+   "id": "PawsInitResponse",
+   "type": "object",
+   "description": "The initialization response message communicates database parameters to the requesting device.",
+   "properties": {
+    "databaseChange": {
+     "$ref": "DbUpdateSpec",
+     "description": "A database may include the databaseChange parameter to notify a device of a change to its database URI, providing one or more alternate database URIs. The device should use this information to update its list of pre-configured databases by (only) replacing its entry for the responding database with the list of alternate URIs."
+    },
+    "kind": {
+     "type": "string",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"spectrum#pawsInitResponse\".",
+     "default": "spectrum#pawsInitResponse"
+    },
+    "rulesetInfo": {
+     "$ref": "RulesetInfo",
+     "description": "The rulesetInfo parameter must be included in the response. This parameter specifies the regulatory domain and parameters applicable to that domain. The database must include the authority field, which defines the regulatory domain for the location specified in the INIT_REQ message."
+    },
+    "type": {
+     "type": "string",
+     "description": "The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).\n\nRequired field."
+    },
+    "version": {
+     "type": "string",
+     "description": "The PAWS version. Must be exactly 1.0.\n\nRequired field."
+    }
+   }
+  },
+  "PawsNotifySpectrumUseRequest": {
+   "id": "PawsNotifySpectrumUseRequest",
+   "type": "object",
+   "description": "The spectrum-use notification message which must contain the geolocation of the Device and parameters required by the regulatory domain.",
+   "properties": {
+    "deviceDesc": {
+     "$ref": "DeviceDescriptor",
+     "description": "Device descriptor information is required in the spectrum-use notification message."
+    },
+    "location": {
+     "$ref": "GeoLocation",
+     "description": "The geolocation of the master device (the device that is sending the spectrum-use notification) to the database is required in the spectrum-use notification message."
+    },
+    "spectra": {
+     "type": "array",
+     "description": "A spectrum list is required in the spectrum-use notification. The list specifies the spectrum that the device expects to use, which includes frequency ranges and maximum power levels. The list may be empty if the device decides not to use any of spectrum. For consistency, the psdBandwidthHz value should match that from one of the spectrum elements in the corresponding available spectrum response previously sent to the device by the database. Note that maximum power levels in the spectrum element must be expressed as power spectral density over the specified psdBandwidthHz value. The actual bandwidth to be used (as computed from the start and stop frequencies) may be different from the psdBandwidthHz value. As an example, when regulatory rules express maximum power spectral density in terms of maximum power over any 100 kHz band, then the psdBandwidthHz value should be set to 100 kHz, even though the actual bandwidth used can be 20 kHz.",
+     "items": {
+      "$ref": "SpectrumMessage"
+     }
+    },
+    "type": {
+     "type": "string",
+     "description": "The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).\n\nRequired field."
+    },
+    "version": {
+     "type": "string",
+     "description": "The PAWS version. Must be exactly 1.0.\n\nRequired field."
+    }
+   }
+  },
+  "PawsNotifySpectrumUseResponse": {
+   "id": "PawsNotifySpectrumUseResponse",
+   "type": "object",
+   "description": "An empty response to the notification.",
+   "properties": {
+    "kind": {
+     "type": "string",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"spectrum#pawsNotifySpectrumUseResponse\".",
+     "default": "spectrum#pawsNotifySpectrumUseResponse"
+    },
+    "type": {
+     "type": "string",
+     "description": "The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).\n\nRequired field."
+    },
+    "version": {
+     "type": "string",
+     "description": "The PAWS version. Must be exactly 1.0.\n\nRequired field."
+    }
+   }
+  },
+  "PawsRegisterRequest": {
+   "id": "PawsRegisterRequest",
+   "type": "object",
+   "description": "The registration request message contains the required registration parameters.",
+   "properties": {
+    "antenna": {
+     "$ref": "AntennaCharacteristics",
+     "description": "Antenna characteristics, including its height and height type."
+    },
+    "deviceDesc": {
+     "$ref": "DeviceDescriptor",
+     "description": "A DeviceDescriptor is required."
+    },
+    "deviceOwner": {
+     "$ref": "DeviceOwner",
+     "description": "Device owner information is required."
+    },
+    "location": {
+     "$ref": "GeoLocation",
+     "description": "A device's geolocation is required."
+    },
+    "type": {
+     "type": "string",
+     "description": "The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).\n\nRequired field."
+    },
+    "version": {
+     "type": "string",
+     "description": "The PAWS version. Must be exactly 1.0.\n\nRequired field."
+    }
+   }
+  },
+  "PawsRegisterResponse": {
+   "id": "PawsRegisterResponse",
+   "type": "object",
+   "description": "The registration response message simply acknowledges receipt of the request and is otherwise empty.",
+   "properties": {
+    "databaseChange": {
+     "$ref": "DbUpdateSpec",
+     "description": "A database may include the databaseChange parameter to notify a device of a change to its database URI, providing one or more alternate database URIs. The device should use this information to update its list of pre-configured databases by (only) replacing its entry for the responding database with the list of alternate URIs."
+    },
+    "kind": {
+     "type": "string",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"spectrum#pawsRegisterResponse\".",
+     "default": "spectrum#pawsRegisterResponse"
+    },
+    "type": {
+     "type": "string",
+     "description": "The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).\n\nRequired field."
+    },
+    "version": {
+     "type": "string",
+     "description": "The PAWS version. Must be exactly 1.0.\n\nRequired field."
+    }
+   }
+  },
+  "PawsVerifyDeviceRequest": {
+   "id": "PawsVerifyDeviceRequest",
+   "type": "object",
+   "description": "The device validation request message.",
+   "properties": {
+    "deviceDescs": {
+     "type": "array",
+     "description": "A list of device descriptors, which specifies the slave devices to be validated, is required.",
+     "items": {
+      "$ref": "DeviceDescriptor"
+     }
+    },
+    "type": {
+     "type": "string",
+     "description": "The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).\n\nRequired field."
+    },
+    "version": {
+     "type": "string",
+     "description": "The PAWS version. Must be exactly 1.0.\n\nRequired field."
+    }
+   }
+  },
+  "PawsVerifyDeviceResponse": {
+   "id": "PawsVerifyDeviceResponse",
+   "type": "object",
+   "description": "The device validation response message.",
+   "properties": {
+    "databaseChange": {
+     "$ref": "DbUpdateSpec",
+     "description": "A database may include the databaseChange parameter to notify a device of a change to its database URI, providing one or more alternate database URIs. The device should use this information to update its list of pre-configured databases by (only) replacing its entry for the responding database with the list of alternate URIs."
+    },
+    "deviceValidities": {
+     "type": "array",
+     "description": "A device validities list is required in the device validation response to report whether each slave device listed in a previous device validation request is valid. The number of entries must match the number of device descriptors listed in the previous device validation request.",
+     "items": {
+      "$ref": "DeviceValidity"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"spectrum#pawsVerifyDeviceResponse\".",
+     "default": "spectrum#pawsVerifyDeviceResponse"
+    },
+    "type": {
+     "type": "string",
+     "description": "The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).\n\nRequired field."
+    },
+    "version": {
+     "type": "string",
+     "description": "The PAWS version. Must be exactly 1.0.\n\nRequired field."
+    }
+   }
+  },
+  "RulesetInfo": {
+   "id": "RulesetInfo",
+   "type": "object",
+   "description": "This contains parameters for the ruleset of a regulatory domain that is communicated using the initialization and available-spectrum processes.",
+   "properties": {
+    "authority": {
+     "type": "string",
+     "description": "The regulatory domain to which the ruleset belongs is required. It must be a 2-letter country code. The device should use this to determine additional device behavior required by the associated regulatory domain."
+    },
+    "maxLocationChange": {
+     "type": "number",
+     "description": "The maximum location change in meters is required in the initialization response, but optional otherwise. When the device changes location by more than this specified distance, it must contact the database to get the available spectrum for the new location. If the device is using spectrum that is no longer available, it must immediately cease use of the spectrum under rules for database-managed spectrum. If this value is provided within the context of an available-spectrum response, it takes precedence over the value within the initialization response.",
+     "format": "double"
+    },
+    "maxPollingSecs": {
+     "type": "integer",
+     "description": "The maximum duration, in seconds, between requests for available spectrum. It is required in the initialization response, but optional otherwise. The device must contact the database to get available spectrum no less frequently than this duration. If the new spectrum information indicates that the device is using spectrum that is no longer available, it must immediately cease use of those frequencies under rules for database-managed spectrum. If this value is provided within the context of an available-spectrum response, it takes precedence over the value within the initialization response.",
+     "format": "int32"
+    },
+    "rulesetIds": {
+     "type": "array",
+     "description": "The identifiers of the rulesets supported for the device's location. The database should include at least one applicable ruleset in the initialization response. The device may use the ruleset identifiers to determine parameters to include in subsequent requests. Within the context of the available-spectrum responses, the database should include the identifier of the ruleset that it used to determine the available-spectrum response. If included, the device must use the specified ruleset to interpret the response. If the device does not support the indicated ruleset, it must not operate in the spectrum governed by the ruleset.",
+     "items": {
+      "type": "string"
+     }
+    }
+   }
+  },
+  "SpectrumMessage": {
+   "id": "SpectrumMessage",
+   "type": "object",
+   "description": "Available spectrum can be logically characterized by a list of frequency ranges and permissible power levels for each range.",
+   "properties": {
+    "bandwidth": {
+     "type": "number",
+     "description": "The bandwidth (in Hertz) for which permissible power levels are specified. For example, FCC regulation would require only one spectrum specification at 6MHz bandwidth, but Ofcom regulation would require two specifications, at 0.1MHz and 8MHz. This parameter may be empty if there is no available spectrum. It will be present otherwise.",
+     "format": "double"
+    },
+    "frequencyRanges": {
+     "type": "array",
+     "description": "The list of frequency ranges and permissible power levels. The list may be empty if there is no available spectrum, otherwise it will be present.",
+     "items": {
+      "$ref": "FrequencyRange"
+     }
+    }
+   }
+  },
+  "SpectrumSchedule": {
+   "id": "SpectrumSchedule",
+   "type": "object",
+   "description": "The spectrum schedule element combines an event time with spectrum profile to define a time period in which the profile is valid.",
+   "properties": {
+    "eventTime": {
+     "$ref": "EventTime",
+     "description": "The event time expresses when the spectrum profile is valid. It will always be present."
+    },
+    "spectra": {
+     "type": "array",
+     "description": "A list of spectrum messages representing the usable profile. It will always be present, but may be empty when there is no available spectrum.",
+     "items": {
+      "$ref": "SpectrumMessage"
+     }
+    }
+   }
+  },
+  "Vcard": {
+   "id": "Vcard",
+   "type": "object",
+   "description": "A vCard-in-JSON message that contains only the fields needed for PAWS:  \n- fn: Full name of an individual \n- org: Name of the organization \n- adr: Address fields \n- tel: Telephone numbers \n- email: Email addresses",
+   "properties": {
+    "adr": {
+     "$ref": "VcardAddress",
+     "description": "The street address of the entity."
+    },
+    "email": {
+     "$ref": "VcardTypedText",
+     "description": "An email address that can be used to reach the contact."
+    },
+    "fn": {
+     "type": "string",
+     "description": "The full name of the contact person. For example: John A. Smith."
+    },
+    "org": {
+     "$ref": "VcardTypedText",
+     "description": "The organization associated with the registering entity."
+    },
+    "tel": {
+     "$ref": "VcardTelephone",
+     "description": "A telephone number that can be used to call the contact."
+    }
+   }
+  },
+  "VcardAddress": {
+   "id": "VcardAddress",
+   "type": "object",
+   "description": "The structure used to represent a street address.",
+   "properties": {
+    "code": {
+     "type": "string",
+     "description": "The postal code associated with the address. For example: 94423."
+    },
+    "country": {
+     "type": "string",
+     "description": "The country name. For example: US."
+    },
+    "locality": {
+     "type": "string",
+     "description": "The city or local equivalent portion of the address. For example: San Jose."
+    },
+    "pobox": {
+     "type": "string",
+     "description": "An optional post office box number."
+    },
+    "region": {
+     "type": "string",
+     "description": "The state or local equivalent portion of the address. For example: CA."
+    },
+    "street": {
+     "type": "string",
+     "description": "The street number and name. For example: 123 Any St."
+    }
+   }
+  },
+  "VcardTelephone": {
+   "id": "VcardTelephone",
+   "type": "object",
+   "description": "The structure used to represent a telephone number.",
+   "properties": {
+    "uri": {
+     "type": "string",
+     "description": "A nested telephone URI of the form: tel:+1-123-456-7890."
+    }
+   }
+  },
+  "VcardTypedText": {
+   "id": "VcardTypedText",
+   "type": "object",
+   "description": "The structure used to represent an organization and an email address.",
+   "properties": {
+    "text": {
+     "type": "string",
+     "description": "The text string associated with this item. For example, for an org field: ACME, inc. For an email field: smith@example.com."
+    }
+   }
+  }
+ },
+ "resources": {
+  "paws": {
+   "methods": {
+    "getSpectrum": {
+     "id": "spectrum.paws.getSpectrum",
+     "path": "getSpectrum",
+     "httpMethod": "POST",
+     "description": "Requests information about the available spectrum for a device at a location. Requests from a fixed-mode device must include owner information so the device can be registered with the database.",
+     "request": {
+      "$ref": "PawsGetSpectrumRequest"
+     },
+     "response": {
+      "$ref": "PawsGetSpectrumResponse"
+     }
+    },
+    "getSpectrumBatch": {
+     "id": "spectrum.paws.getSpectrumBatch",
+     "path": "getSpectrumBatch",
+     "httpMethod": "POST",
+     "description": "The Google Spectrum Database does not support batch requests, so this method always yields an UNIMPLEMENTED error.",
+     "request": {
+      "$ref": "PawsGetSpectrumBatchRequest"
+     },
+     "response": {
+      "$ref": "PawsGetSpectrumBatchResponse"
+     }
+    },
+    "init": {
+     "id": "spectrum.paws.init",
+     "path": "init",
+     "httpMethod": "POST",
+     "description": "Initializes the connection between a white space device and the database.",
+     "request": {
+      "$ref": "PawsInitRequest"
+     },
+     "response": {
+      "$ref": "PawsInitResponse"
+     }
+    },
+    "notifySpectrumUse": {
+     "id": "spectrum.paws.notifySpectrumUse",
+     "path": "notifySpectrumUse",
+     "httpMethod": "POST",
+     "description": "Notifies the database that the device has selected certain frequency ranges for transmission. Only to be invoked when required by the regulator. The Google Spectrum Database does not operate in domains that require notification, so this always yields an UNIMPLEMENTED error.",
+     "request": {
+      "$ref": "PawsNotifySpectrumUseRequest"
+     },
+     "response": {
+      "$ref": "PawsNotifySpectrumUseResponse"
+     }
+    },
+    "register": {
+     "id": "spectrum.paws.register",
+     "path": "register",
+     "httpMethod": "POST",
+     "description": "The Google Spectrum Database implements registration in the getSpectrum method. As such this always returns an UNIMPLEMENTED error.",
+     "request": {
+      "$ref": "PawsRegisterRequest"
+     },
+     "response": {
+      "$ref": "PawsRegisterResponse"
+     }
+    },
+    "verifyDevice": {
+     "id": "spectrum.paws.verifyDevice",
+     "path": "verifyDevice",
+     "httpMethod": "POST",
+     "description": "Validates a device for white space use in accordance with regulatory rules. The Google Spectrum Database does not support master/slave configurations, so this always yields an UNIMPLEMENTED error.",
+     "request": {
+      "$ref": "PawsVerifyDeviceRequest"
+     },
+     "response": {
+      "$ref": "PawsVerifyDeviceResponse"
+     }
+    }
+   }
+  }
+ }
+}
diff --git a/spectrum/v1explorer/spectrum-gen.go b/spectrum/v1explorer/spectrum-gen.go
new file mode 100644
index 0000000..2b950e6
--- /dev/null
+++ b/spectrum/v1explorer/spectrum-gen.go
@@ -0,0 +1,1321 @@
+// Package spectrum provides access to the Google Spectrum Database API.
+//
+// See http://developers.google.com/spectrum
+//
+// Usage example:
+//
+//   import "code.google.com/p/google-api-go-client/spectrum/v1explorer"
+//   ...
+//   spectrumService, err := spectrum.New(oauthHttpClient)
+package spectrum
+
+import (
+	"bytes"
+	"code.google.com/p/google-api-go-client/googleapi"
+	"encoding/json"
+	"errors"
+	"fmt"
+	"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
+
+const apiId = "spectrum:v1explorer"
+const apiName = "spectrum"
+const apiVersion = "v1explorer"
+const basePath = "https://www.googleapis.com/spectrum/v1explorer/paws/"
+
+func New(client *http.Client) (*Service, error) {
+	if client == nil {
+		return nil, errors.New("client is nil")
+	}
+	s := &Service{client: client}
+	s.Paws = NewPawsService(s)
+	return s, nil
+}
+
+type Service struct {
+	client *http.Client
+
+	Paws *PawsService
+}
+
+func NewPawsService(s *Service) *PawsService {
+	rs := &PawsService{s: s}
+	return rs
+}
+
+type PawsService struct {
+	s *Service
+}
+
+type AntennaCharacteristics struct {
+	// Height: The antenna height in meters. Whether the antenna height is
+	// required depends on the device type and the regulatory domain. Note
+	// that the height may be negative.
+	Height float64 `json:"height,omitempty"`
+
+	// HeightType: If the height is required, then the height type (AGL for
+	// above ground level or AMSL for above mean sea level) is also
+	// required. The default is AGL.
+	HeightType string `json:"heightType,omitempty"`
+
+	// HeightUncertainty: The height uncertainty in meters. Whether this is
+	// required depends on the regulatory domain.
+	HeightUncertainty float64 `json:"heightUncertainty,omitempty"`
+}
+
+type DatabaseSpec struct {
+	// Name: The display name for a database.
+	Name string `json:"name,omitempty"`
+
+	// Uri: The corresponding URI of the database.
+	Uri string `json:"uri,omitempty"`
+}
+
+type DbUpdateSpec struct {
+	// Databases: A required list of one or more databases. A device should
+	// update its preconfigured list of databases to replace (only) the
+	// database that provided the response with the specified entries.
+	Databases []*DatabaseSpec `json:"databases,omitempty"`
+}
+
+type DeviceCapabilities struct {
+	// FrequencyRanges: An optional list of frequency ranges supported by
+	// the device. Each element must contain start and stop frequencies in
+	// which the device can operate. Channel identifiers are optional. When
+	// specified, the database should not return available spectrum that
+	// falls outside these ranges or channel IDs.
+	FrequencyRanges []*FrequencyRange `json:"frequencyRanges,omitempty"`
+}
+
+type DeviceDescriptor struct {
+	// EtsiEnDeviceCategory: Specifies the ETSI white space device category.
+	// Valid values are the strings master and slave. This field is
+	// case-insensitive. Consult the ETSI documentation for details about
+	// the device types.
+	EtsiEnDeviceCategory string `json:"etsiEnDeviceCategory,omitempty"`
+
+	// EtsiEnDeviceEmissionsClass: Specifies the ETSI white space device
+	// emissions class. The values are represented by numeric strings, such
+	// as 1, 2, etc. Consult the ETSI documentation for details about the
+	// device types.
+	EtsiEnDeviceEmissionsClass string `json:"etsiEnDeviceEmissionsClass,omitempty"`
+
+	// EtsiEnDeviceType: Specifies the ETSI white space device type. Valid
+	// values are single-letter strings, such as A, B, etc. Consult the ETSI
+	// documentation for details about the device types.
+	EtsiEnDeviceType string `json:"etsiEnDeviceType,omitempty"`
+
+	// EtsiEnTechnologyId: Specifies the ETSI white space device technology
+	// identifier. The string value must not exceed 64 characters in length.
+	// Consult the ETSI documentation for details about the device types.
+	EtsiEnTechnologyId string `json:"etsiEnTechnologyId,omitempty"`
+
+	// FccId: Specifies the device's FCC certification identifier. The value
+	// is an identifier string whose length should not exceed 32 characters.
+	// Note that, in practice, a valid FCC ID may be limited to 19
+	// characters.
+	FccId string `json:"fccId,omitempty"`
+
+	// FccTvbdDeviceType: Specifies the TV Band White Space device type, as
+	// defined by the FCC. Valid values are FIXED, MODE_1, MODE_2.
+	FccTvbdDeviceType string `json:"fccTvbdDeviceType,omitempty"`
+
+	// ManufacturerId: The manufacturer's ID may be required by the
+	// regulatory domain. This should represent the name of the device
+	// manufacturer, should be consistent across all devices from the same
+	// manufacturer, and should be distinct from that of other
+	// manufacturers. The string value must not exceed 64 characters in
+	// length.
+	ManufacturerId string `json:"manufacturerId,omitempty"`
+
+	// ModelId: The device's model ID may be required by the regulatory
+	// domain. The string value must not exceed 64 characters in length.
+	ModelId string `json:"modelId,omitempty"`
+
+	// RulesetIds: The list of identifiers for rulesets supported by the
+	// device. A database may require that the device provide this list
+	// before servicing the device requests. If the database does not
+	// support any of the rulesets specified in the list, the database may
+	// refuse to service the device requests. If present, the list must
+	// contain at least one entry.
+	//
+	// For information about the valid
+	// requests, see section 9.2 of the PAWS specification. Currently,
+	// FccTvBandWhiteSpace-2010 is the only supported ruleset.
+	RulesetIds []string `json:"rulesetIds,omitempty"`
+
+	// SerialNumber: The manufacturer's device serial number; required by
+	// the applicable regulatory domain. The length of the value must not
+	// exceed 64 characters.
+	SerialNumber string `json:"serialNumber,omitempty"`
+}
+
+type DeviceOwner struct {
+	// Operator: The vCard contact information for the device operator is
+	// optional, but may be required by specific regulatory domains.
+	Operator *Vcard `json:"operator,omitempty"`
+
+	// Owner: The vCard contact information for the individual or business
+	// that owns the device is required.
+	Owner *Vcard `json:"owner,omitempty"`
+}
+
+type DeviceValidity struct {
+	// DeviceDesc: The descriptor of the device for which the validity check
+	// was requested. It will always be present.
+	DeviceDesc *DeviceDescriptor `json:"deviceDesc,omitempty"`
+
+	// IsValid: The validity status: true if the device is valid for
+	// operation, false otherwise. It will always be present.
+	IsValid bool `json:"isValid,omitempty"`
+
+	// Reason: If the device identifier is not valid, the database may
+	// include a reason. The reason may be in any language. The length of
+	// the value should not exceed 128 characters.
+	Reason string `json:"reason,omitempty"`
+}
+
+type EventTime struct {
+	// StartTime: The inclusive start of the event. It will be present.
+	StartTime string `json:"startTime,omitempty"`
+
+	// StopTime: The exclusive end of the event. It will be present.
+	StopTime string `json:"stopTime,omitempty"`
+}
+
+type FrequencyRange struct {
+	// ChannelId: The database may include a channel identifier, when
+	// applicable. When it is included, the device should treat it as
+	// informative. The length of the identifier should not exceed 16
+	// characters.
+	ChannelId string `json:"channelId,omitempty"`
+
+	// MaxPowerDBm: The maximum total power level (EIRP)—computed over the
+	// corresponding operating bandwidth—that is permitted within the
+	// frequency range. Depending on the context in which the
+	// frequency-range element appears, this value may be required. For
+	// example, it is required in the available-spectrum response,
+	// available-spectrum-batch response, and spectrum-use notification
+	// message, but it should not be present (it is not applicable) when the
+	// frequency range appears inside a device-capabilities message.
+	MaxPowerDBm float64 `json:"maxPowerDBm,omitempty"`
+
+	// StartHz: The required inclusive start of the frequency range (in
+	// Hertz).
+	StartHz float64 `json:"startHz,omitempty"`
+
+	// StopHz: The required exclusive end of the frequency range (in Hertz).
+	StopHz float64 `json:"stopHz,omitempty"`
+}
+
+type GeoLocation struct {
+	// Confidence: The location confidence level, as an integer percentage,
+	// may be required, depending on the regulatory domain. When the
+	// parameter is optional and not provided, its value is assumed to be
+	// 95. Valid values range from 0 to 99, since, in practice, 100-percent
+	// confidence is not achievable. The confidence value is meaningful only
+	// when geolocation refers to a point with uncertainty.
+	Confidence int64 `json:"confidence,omitempty"`
+
+	// Point: If present, indicates that the geolocation represents a point.
+	// Paradoxically, a point is parameterized using an ellipse, where the
+	// center represents the location of the point and the distances along
+	// the major and minor axes represent the uncertainty. The uncertainty
+	// values may be required, depending on the regulatory domain.
+	Point *GeoLocationEllipse `json:"point,omitempty"`
+
+	// Region: If present, indicates that the geolocation represents a
+	// region. Database support for regions is optional.
+	Region *GeoLocationPolygon `json:"region,omitempty"`
+}
+
+type GeoLocationEllipse struct {
+	// Center: A required geo-spatial point representing the center of the
+	// ellipse.
+	Center *GeoLocationPoint `json:"center,omitempty"`
+
+	// Orientation: A floating-point number that expresses the orientation
+	// of the ellipse, representing the rotation, in degrees, of the
+	// semi-major axis from North towards the East. For example, when the
+	// uncertainty is greatest along the North-South direction, orientation
+	// is 0 degrees; conversely, if the uncertainty is greatest along the
+	// East-West direction, orientation is 90 degrees. When orientation is
+	// not present, the orientation is assumed to be 0.
+	Orientation float64 `json:"orientation,omitempty"`
+
+	// SemiMajorAxis: A floating-point number that expresses the location
+	// uncertainty along the major axis of the ellipse. May be required by
+	// the regulatory domain. When the uncertainty is optional, the default
+	// value is 0.
+	SemiMajorAxis float64 `json:"semiMajorAxis,omitempty"`
+
+	// SemiMinorAxis: A floating-point number that expresses the location
+	// uncertainty along the minor axis of the ellipse. May be required by
+	// the regulatory domain. When the uncertainty is optional, the default
+	// value is 0.
+	SemiMinorAxis float64 `json:"semiMinorAxis,omitempty"`
+}
+
+type GeoLocationPoint struct {
+	// Latitude: A required floating-point number that expresses the
+	// latitude in degrees using the WGS84 datum. For details on this
+	// encoding, see the National Imagery and Mapping Agency's Technical
+	// Report TR8350.2.
+	Latitude float64 `json:"latitude,omitempty"`
+
+	// Longitude: A required floating-point number that expresses the
+	// longitude in degrees using the WGS84 datum. For details on this
+	// encoding, see the National Imagery and Mapping Agency's Technical
+	// Report TR8350.2.
+	Longitude float64 `json:"longitude,omitempty"`
+}
+
+type GeoLocationPolygon struct {
+	// Exterior: When the geolocation describes a region, the exterior field
+	// refers to a list of latitude/longitude points that represent the
+	// vertices of a polygon. The first and last points must be the same.
+	// Thus, a minimum of four points is required. The following polygon
+	// restrictions from RFC5491 apply:
+	// - A connecting line shall not
+	// cross another connecting line of the same polygon.
+	// - The vertices
+	// must be defined in a counterclockwise order.
+	// - The edges of a
+	// polygon are defined by the shortest path between two points in space
+	// (not a geodesic curve). Consequently, the length between two adjacent
+	// vertices should be restricted to a maximum of 130 km.
+	// - All vertices
+	// are assumed to be at the same altitude.
+	// - Polygon shapes should be
+	// restricted to a maximum of 15 vertices (16 points that include the
+	// repeated vertex).
+	Exterior []*GeoLocationPoint `json:"exterior,omitempty"`
+}
+
+type GeoSpectrumSchedule struct {
+	// Location: The geolocation identifies the location at which the
+	// spectrum schedule applies. It will always be present.
+	Location *GeoLocation `json:"location,omitempty"`
+
+	// SpectrumSchedules: A list of available spectrum profiles and
+	// associated times. It will always be present, and at least one
+	// schedule must be included (though it may be empty if there is no
+	// available spectrum). More than one schedule may be included to
+	// represent future changes to the available spectrum.
+	SpectrumSchedules []*SpectrumSchedule `json:"spectrumSchedules,omitempty"`
+}
+
+type PawsGetSpectrumBatchRequest struct {
+	// Antenna: Depending on device type and regulatory domain, antenna
+	// characteristics may be required.
+	Antenna *AntennaCharacteristics `json:"antenna,omitempty"`
+
+	// Capabilities: The master device may include its device capabilities
+	// to limit the available-spectrum batch response to the spectrum that
+	// is compatible with its capabilities. The database should not return
+	// spectrum that is incompatible with the specified capabilities.
+	Capabilities *DeviceCapabilities `json:"capabilities,omitempty"`
+
+	// DeviceDesc: When the available spectrum request is made on behalf of
+	// a specific device (a master or slave device), device descriptor
+	// information for the device on whose behalf the request is made is
+	// required (in such cases, the requestType parameter must be empty).
+	// When a requestType value is specified, device descriptor information
+	// may be optional or required according to the rules of the applicable
+	// regulatory domain.
+	DeviceDesc *DeviceDescriptor `json:"deviceDesc,omitempty"`
+
+	// Locations: A geolocation list is required. This allows a device to
+	// specify its current location plus additional anticipated locations
+	// when allowed by the regulatory domain. At least one location must be
+	// included. Geolocation must be given as the location of the radiation
+	// center of the device's antenna. If a location specifies a region,
+	// rather than a point, the database may return an UNIMPLEMENTED error
+	// if it does not support query by region.
+	//
+	// There is no upper limit on
+	// the number of locations included in a available spectrum batch
+	// request, but the database may restrict the number of locations it
+	// supports by returning a response with fewer locations than specified
+	// in the batch request. Note that geolocations must be those of the
+	// master device (a device with geolocation capability that makes an
+	// available spectrum batch request), whether the master device is
+	// making the request on its own behalf or on behalf of a slave device
+	// (one without geolocation capability).
+	Locations []*GeoLocation `json:"locations,omitempty"`
+
+	// MasterDeviceDesc: When an available spectrum batch request is made by
+	// the master device (a device with geolocation capability) on behalf of
+	// a slave device (a device without geolocation capability), the rules
+	// of the applicable regulatory domain may require the master device to
+	// provide its own device descriptor information (in addition to device
+	// descriptor information for the slave device in a separate parameter).
+	MasterDeviceDesc *DeviceDescriptor `json:"masterDeviceDesc,omitempty"`
+
+	// Owner: Depending on device type and regulatory domain, device owner
+	// information may be included in an available spectrum batch request.
+	// This allows the device to register and get spectrum-availability
+	// information in a single request.
+	Owner *DeviceOwner `json:"owner,omitempty"`
+
+	// RequestType: The request type parameter is an optional parameter that
+	// can be used to modify an available spectrum batch request, but its
+	// use depends on applicable regulatory rules. For example, It may be
+	// used to request generic slave device parameters without having to
+	// specify the device descriptor for a specific device. When the
+	// requestType parameter is missing, the request is for a specific
+	// device (master or slave), and the device descriptor parameter for the
+	// device on whose behalf the batch request is made is required.
+	RequestType string `json:"requestType,omitempty"`
+
+	// Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ,
+	// ...).
+	//
+	// Required field.
+	Type string `json:"type,omitempty"`
+
+	// Version: The PAWS version. Must be exactly 1.0.
+	//
+	// Required field.
+	Version string `json:"version,omitempty"`
+}
+
+type PawsGetSpectrumBatchResponse struct {
+	// DatabaseChange: A database may include the databaseChange parameter
+	// to notify a device of a change to its database URI, providing one or
+	// more alternate database URIs. The device should use this information
+	// to update its list of pre-configured databases by (only) replacing
+	// its entry for the responding database with the list of alternate
+	// URIs.
+	DatabaseChange *DbUpdateSpec `json:"databaseChange,omitempty"`
+
+	// DeviceDesc: The database must return in its available spectrum
+	// response the device descriptor information it received in the master
+	// device's available spectrum batch request.
+	DeviceDesc *DeviceDescriptor `json:"deviceDesc,omitempty"`
+
+	// GeoSpectrumSchedules: The available spectrum batch response must
+	// contain a geo-spectrum schedule list, The list may be empty if
+	// spectrum is not available. The database may return more than one
+	// geo-spectrum schedule to represent future changes to the available
+	// spectrum. How far in advance a schedule may be provided depends upon
+	// the applicable regulatory domain. The database may return available
+	// spectrum for fewer geolocations than requested. The device must not
+	// make assumptions about the order of the entries in the list, and must
+	// use the geolocation value in each geo-spectrum schedule entry to
+	// match available spectrum to a location.
+	GeoSpectrumSchedules []*GeoSpectrumSchedule `json:"geoSpectrumSchedules,omitempty"`
+
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "spectrum#pawsGetSpectrumBatchResponse".
+	Kind string `json:"kind,omitempty"`
+
+	// MaxContiguousBwHz: The database may return a constraint on the
+	// allowed maximum contiguous bandwidth (in Hertz). A regulatory domain
+	// may require the database to return this parameter. When this
+	// parameter is present in the response, the device must apply this
+	// constraint to its spectrum-selection logic to ensure that no single
+	// block of spectrum has bandwidth that exceeds this value.
+	MaxContiguousBwHz float64 `json:"maxContiguousBwHz,omitempty"`
+
+	// MaxTotalBwHz: The database may return a constraint on the allowed
+	// maximum total bandwidth (in Hertz), which does not need to be
+	// contiguous. A regulatory domain may require the database to return
+	// this parameter. When this parameter is present in the available
+	// spectrum batch response, the device must apply this constraint to its
+	// spectrum-selection logic to ensure that total bandwidth does not
+	// exceed this value.
+	MaxTotalBwHz float64 `json:"maxTotalBwHz,omitempty"`
+
+	// NeedsSpectrumReport: For regulatory domains that require a
+	// spectrum-usage report from devices, the database must return true for
+	// this parameter if the geo-spectrum schedules list is not empty;
+	// otherwise, the database should either return false or omit this
+	// parameter. If this parameter is present and its value is true, the
+	// device must send a spectrum use notify message to the database;
+	// otherwise, the device should not send the notification.
+	NeedsSpectrumReport bool `json:"needsSpectrumReport,omitempty"`
+
+	// RulesetInfo: The database should return ruleset information, which
+	// identifies the applicable regulatory authority and ruleset for the
+	// available spectrum batch response. If included, the device must use
+	// the corresponding ruleset to interpret the response. Values provided
+	// in the returned ruleset information, such as maxLocationChange, take
+	// precedence over any conflicting values provided in the ruleset
+	// information returned in a prior initialization response sent by the
+	// database to the device.
+	RulesetInfo *RulesetInfo `json:"rulesetInfo,omitempty"`
+
+	// Timestamp: The database includes a timestamp of the form,
+	// YYYY-MM-DDThh:mm:ssZ (Internet timestamp format per RFC3339), in its
+	// available spectrum batch response. The timestamp should be used by
+	// the device as a reference for the start and stop times specified in
+	// the response spectrum schedules.
+	Timestamp string `json:"timestamp,omitempty"`
+
+	// Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ,
+	// ...).
+	//
+	// Required field.
+	Type string `json:"type,omitempty"`
+
+	// Version: The PAWS version. Must be exactly 1.0.
+	//
+	// Required field.
+	Version string `json:"version,omitempty"`
+}
+
+type PawsGetSpectrumRequest struct {
+	// Antenna: Depending on device type and regulatory domain, the
+	// characteristics of the antenna may be required.
+	Antenna *AntennaCharacteristics `json:"antenna,omitempty"`
+
+	// Capabilities: The master device may include its device capabilities
+	// to limit the available-spectrum response to the spectrum that is
+	// compatible with its capabilities. The database should not return
+	// spectrum that is incompatible with the specified capabilities.
+	Capabilities *DeviceCapabilities `json:"capabilities,omitempty"`
+
+	// DeviceDesc: When the available spectrum request is made on behalf of
+	// a specific device (a master or slave device), device descriptor
+	// information for that device is required (in such cases, the
+	// requestType parameter must be empty). When a requestType value is
+	// specified, device descriptor information may be optional or required
+	// according to the rules of the applicable regulatory domain.
+	DeviceDesc *DeviceDescriptor `json:"deviceDesc,omitempty"`
+
+	// Location: The geolocation of the master device (a device with
+	// geolocation capability that makes an available spectrum request) is
+	// required whether the master device is making the request on its own
+	// behalf or on behalf of a slave device (one without geolocation
+	// capability). The location must be the location of the radiation
+	// center of the master device's antenna. To support mobile devices, a
+	// regulatory domain may allow the anticipated position of the master
+	// device to be given instead. If the location specifies a region,
+	// rather than a point, the database may return an UNIMPLEMENTED error
+	// code if it does not support query by region.
+	Location *GeoLocation `json:"location,omitempty"`
+
+	// MasterDeviceDesc: When an available spectrum request is made by the
+	// master device (a device with geolocation capability) on behalf of a
+	// slave device (a device without geolocation capability), the rules of
+	// the applicable regulatory domain may require the master device to
+	// provide its own device descriptor information (in addition to device
+	// descriptor information for the slave device, which is provided in a
+	// separate parameter).
+	MasterDeviceDesc *DeviceDescriptor `json:"masterDeviceDesc,omitempty"`
+
+	// Owner: Depending on device type and regulatory domain, device owner
+	// information may be included in an available spectrum request. This
+	// allows the device to register and get spectrum-availability
+	// information in a single request.
+	Owner *DeviceOwner `json:"owner,omitempty"`
+
+	// RequestType: The request type parameter is an optional parameter that
+	// can be used to modify an available spectrum request, but its use
+	// depends on applicable regulatory rules. It may be used, for example,
+	// to request generic slave device parameters without having to specify
+	// the device descriptor for a specific device. When the requestType
+	// parameter is missing, the request is for a specific device (master or
+	// slave), and the deviceDesc parameter for the device on whose behalf
+	// the request is made is required.
+	RequestType string `json:"requestType,omitempty"`
+
+	// Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ,
+	// ...).
+	//
+	// Required field.
+	Type string `json:"type,omitempty"`
+
+	// Version: The PAWS version. Must be exactly 1.0.
+	//
+	// Required field.
+	Version string `json:"version,omitempty"`
+}
+
+type PawsGetSpectrumResponse struct {
+	// DatabaseChange: A database may include the databaseChange parameter
+	// to notify a device of a change to its database URI, providing one or
+	// more alternate database URIs. The device should use this information
+	// to update its list of pre-configured databases by (only) replacing
+	// its entry for the responding database with the list of alternate
+	// URIs.
+	DatabaseChange *DbUpdateSpec `json:"databaseChange,omitempty"`
+
+	// DeviceDesc: The database must return, in its available spectrum
+	// response, the device descriptor information it received in the master
+	// device's available spectrum request.
+	DeviceDesc *DeviceDescriptor `json:"deviceDesc,omitempty"`
+
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "spectrum#pawsGetSpectrumResponse".
+	Kind string `json:"kind,omitempty"`
+
+	// MaxContiguousBwHz: The database may return a constraint on the
+	// allowed maximum contiguous bandwidth (in Hertz). A regulatory domain
+	// may require the database to return this parameter. When this
+	// parameter is present in the response, the device must apply this
+	// constraint to its spectrum-selection logic to ensure that no single
+	// block of spectrum has bandwidth that exceeds this value.
+	MaxContiguousBwHz float64 `json:"maxContiguousBwHz,omitempty"`
+
+	// MaxTotalBwHz: The database may return a constraint on the allowed
+	// maximum total bandwidth (in Hertz), which need not be contiguous. A
+	// regulatory domain may require the database to return this parameter.
+	// When this parameter is present in the available spectrum response,
+	// the device must apply this constraint to its spectrum-selection logic
+	// to ensure that total bandwidth does not exceed this value.
+	MaxTotalBwHz float64 `json:"maxTotalBwHz,omitempty"`
+
+	// NeedsSpectrumReport: For regulatory domains that require a
+	// spectrum-usage report from devices, the database must return true for
+	// this parameter if the spectrum schedule list is not empty; otherwise,
+	// the database will either return false or omit this parameter. If this
+	// parameter is present and its value is true, the device must send a
+	// spectrum use notify message to the database; otherwise, the device
+	// must not send the notification.
+	NeedsSpectrumReport bool `json:"needsSpectrumReport,omitempty"`
+
+	// RulesetInfo: The database should return ruleset information, which
+	// identifies the applicable regulatory authority and ruleset for the
+	// available spectrum response. If included, the device must use the
+	// corresponding ruleset to interpret the response. Values provided in
+	// the returned ruleset information, such as maxLocationChange, take
+	// precedence over any conflicting values provided in the ruleset
+	// information returned in a prior initialization response sent by the
+	// database to the device.
+	RulesetInfo *RulesetInfo `json:"rulesetInfo,omitempty"`
+
+	// SpectrumSchedules: The available spectrum response must contain a
+	// spectrum schedule list. The list may be empty if spectrum is not
+	// available. The database may return more than one spectrum schedule to
+	// represent future changes to the available spectrum. How far in
+	// advance a schedule may be provided depends on the applicable
+	// regulatory domain.
+	SpectrumSchedules []*SpectrumSchedule `json:"spectrumSchedules,omitempty"`
+
+	// Timestamp: The database includes a timestamp of the form
+	// YYYY-MM-DDThh:mm:ssZ (Internet timestamp format per RFC3339) in its
+	// available spectrum response. The timestamp should be used by the
+	// device as a reference for the start and stop times specified in the
+	// response spectrum schedules.
+	Timestamp string `json:"timestamp,omitempty"`
+
+	// Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ,
+	// ...).
+	//
+	// Required field.
+	Type string `json:"type,omitempty"`
+
+	// Version: The PAWS version. Must be exactly 1.0.
+	//
+	// Required field.
+	Version string `json:"version,omitempty"`
+}
+
+type PawsInitRequest struct {
+	// DeviceDesc: The DeviceDescriptor parameter is required. If the
+	// database does not support the device or any of the rulesets specified
+	// in the device descriptor, it must return an UNSUPPORTED error code in
+	// the error response.
+	DeviceDesc *DeviceDescriptor `json:"deviceDesc,omitempty"`
+
+	// Location: A device's geolocation is required.
+	Location *GeoLocation `json:"location,omitempty"`
+
+	// Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ,
+	// ...).
+	//
+	// Required field.
+	Type string `json:"type,omitempty"`
+
+	// Version: The PAWS version. Must be exactly 1.0.
+	//
+	// Required field.
+	Version string `json:"version,omitempty"`
+}
+
+type PawsInitResponse struct {
+	// DatabaseChange: A database may include the databaseChange parameter
+	// to notify a device of a change to its database URI, providing one or
+	// more alternate database URIs. The device should use this information
+	// to update its list of pre-configured databases by (only) replacing
+	// its entry for the responding database with the list of alternate
+	// URIs.
+	DatabaseChange *DbUpdateSpec `json:"databaseChange,omitempty"`
+
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "spectrum#pawsInitResponse".
+	Kind string `json:"kind,omitempty"`
+
+	// RulesetInfo: The rulesetInfo parameter must be included in the
+	// response. This parameter specifies the regulatory domain and
+	// parameters applicable to that domain. The database must include the
+	// authority field, which defines the regulatory domain for the location
+	// specified in the INIT_REQ message.
+	RulesetInfo *RulesetInfo `json:"rulesetInfo,omitempty"`
+
+	// Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ,
+	// ...).
+	//
+	// Required field.
+	Type string `json:"type,omitempty"`
+
+	// Version: The PAWS version. Must be exactly 1.0.
+	//
+	// Required field.
+	Version string `json:"version,omitempty"`
+}
+
+type PawsNotifySpectrumUseRequest struct {
+	// DeviceDesc: Device descriptor information is required in the
+	// spectrum-use notification message.
+	DeviceDesc *DeviceDescriptor `json:"deviceDesc,omitempty"`
+
+	// Location: The geolocation of the master device (the device that is
+	// sending the spectrum-use notification) to the database is required in
+	// the spectrum-use notification message.
+	Location *GeoLocation `json:"location,omitempty"`
+
+	// Spectra: A spectrum list is required in the spectrum-use
+	// notification. The list specifies the spectrum that the device expects
+	// to use, which includes frequency ranges and maximum power levels. The
+	// list may be empty if the device decides not to use any of spectrum.
+	// For consistency, the psdBandwidthHz value should match that from one
+	// of the spectrum elements in the corresponding available spectrum
+	// response previously sent to the device by the database. Note that
+	// maximum power levels in the spectrum element must be expressed as
+	// power spectral density over the specified psdBandwidthHz value. The
+	// actual bandwidth to be used (as computed from the start and stop
+	// frequencies) may be different from the psdBandwidthHz value. As an
+	// example, when regulatory rules express maximum power spectral density
+	// in terms of maximum power over any 100 kHz band, then the
+	// psdBandwidthHz value should be set to 100 kHz, even though the actual
+	// bandwidth used can be 20 kHz.
+	Spectra []*SpectrumMessage `json:"spectra,omitempty"`
+
+	// Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ,
+	// ...).
+	//
+	// Required field.
+	Type string `json:"type,omitempty"`
+
+	// Version: The PAWS version. Must be exactly 1.0.
+	//
+	// Required field.
+	Version string `json:"version,omitempty"`
+}
+
+type PawsNotifySpectrumUseResponse struct {
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "spectrum#pawsNotifySpectrumUseResponse".
+	Kind string `json:"kind,omitempty"`
+
+	// Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ,
+	// ...).
+	//
+	// Required field.
+	Type string `json:"type,omitempty"`
+
+	// Version: The PAWS version. Must be exactly 1.0.
+	//
+	// Required field.
+	Version string `json:"version,omitempty"`
+}
+
+type PawsRegisterRequest struct {
+	// Antenna: Antenna characteristics, including its height and height
+	// type.
+	Antenna *AntennaCharacteristics `json:"antenna,omitempty"`
+
+	// DeviceDesc: A DeviceDescriptor is required.
+	DeviceDesc *DeviceDescriptor `json:"deviceDesc,omitempty"`
+
+	// DeviceOwner: Device owner information is required.
+	DeviceOwner *DeviceOwner `json:"deviceOwner,omitempty"`
+
+	// Location: A device's geolocation is required.
+	Location *GeoLocation `json:"location,omitempty"`
+
+	// Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ,
+	// ...).
+	//
+	// Required field.
+	Type string `json:"type,omitempty"`
+
+	// Version: The PAWS version. Must be exactly 1.0.
+	//
+	// Required field.
+	Version string `json:"version,omitempty"`
+}
+
+type PawsRegisterResponse struct {
+	// DatabaseChange: A database may include the databaseChange parameter
+	// to notify a device of a change to its database URI, providing one or
+	// more alternate database URIs. The device should use this information
+	// to update its list of pre-configured databases by (only) replacing
+	// its entry for the responding database with the list of alternate
+	// URIs.
+	DatabaseChange *DbUpdateSpec `json:"databaseChange,omitempty"`
+
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "spectrum#pawsRegisterResponse".
+	Kind string `json:"kind,omitempty"`
+
+	// Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ,
+	// ...).
+	//
+	// Required field.
+	Type string `json:"type,omitempty"`
+
+	// Version: The PAWS version. Must be exactly 1.0.
+	//
+	// Required field.
+	Version string `json:"version,omitempty"`
+}
+
+type PawsVerifyDeviceRequest struct {
+	// DeviceDescs: A list of device descriptors, which specifies the slave
+	// devices to be validated, is required.
+	DeviceDescs []*DeviceDescriptor `json:"deviceDescs,omitempty"`
+
+	// Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ,
+	// ...).
+	//
+	// Required field.
+	Type string `json:"type,omitempty"`
+
+	// Version: The PAWS version. Must be exactly 1.0.
+	//
+	// Required field.
+	Version string `json:"version,omitempty"`
+}
+
+type PawsVerifyDeviceResponse struct {
+	// DatabaseChange: A database may include the databaseChange parameter
+	// to notify a device of a change to its database URI, providing one or
+	// more alternate database URIs. The device should use this information
+	// to update its list of pre-configured databases by (only) replacing
+	// its entry for the responding database with the list of alternate
+	// URIs.
+	DatabaseChange *DbUpdateSpec `json:"databaseChange,omitempty"`
+
+	// DeviceValidities: A device validities list is required in the device
+	// validation response to report whether each slave device listed in a
+	// previous device validation request is valid. The number of entries
+	// must match the number of device descriptors listed in the previous
+	// device validation request.
+	DeviceValidities []*DeviceValidity `json:"deviceValidities,omitempty"`
+
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "spectrum#pawsVerifyDeviceResponse".
+	Kind string `json:"kind,omitempty"`
+
+	// Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ,
+	// ...).
+	//
+	// Required field.
+	Type string `json:"type,omitempty"`
+
+	// Version: The PAWS version. Must be exactly 1.0.
+	//
+	// Required field.
+	Version string `json:"version,omitempty"`
+}
+
+type RulesetInfo struct {
+	// Authority: The regulatory domain to which the ruleset belongs is
+	// required. It must be a 2-letter country code. The device should use
+	// this to determine additional device behavior required by the
+	// associated regulatory domain.
+	Authority string `json:"authority,omitempty"`
+
+	// MaxLocationChange: The maximum location change in meters is required
+	// in the initialization response, but optional otherwise. When the
+	// device changes location by more than this specified distance, it must
+	// contact the database to get the available spectrum for the new
+	// location. If the device is using spectrum that is no longer
+	// available, it must immediately cease use of the spectrum under rules
+	// for database-managed spectrum. If this value is provided within the
+	// context of an available-spectrum response, it takes precedence over
+	// the value within the initialization response.
+	MaxLocationChange float64 `json:"maxLocationChange,omitempty"`
+
+	// MaxPollingSecs: The maximum duration, in seconds, between requests
+	// for available spectrum. It is required in the initialization
+	// response, but optional otherwise. The device must contact the
+	// database to get available spectrum no less frequently than this
+	// duration. If the new spectrum information indicates that the device
+	// is using spectrum that is no longer available, it must immediately
+	// cease use of those frequencies under rules for database-managed
+	// spectrum. If this value is provided within the context of an
+	// available-spectrum response, it takes precedence over the value
+	// within the initialization response.
+	MaxPollingSecs int64 `json:"maxPollingSecs,omitempty"`
+
+	// RulesetIds: The identifiers of the rulesets supported for the
+	// device's location. The database should include at least one
+	// applicable ruleset in the initialization response. The device may use
+	// the ruleset identifiers to determine parameters to include in
+	// subsequent requests. Within the context of the available-spectrum
+	// responses, the database should include the identifier of the ruleset
+	// that it used to determine the available-spectrum response. If
+	// included, the device must use the specified ruleset to interpret the
+	// response. If the device does not support the indicated ruleset, it
+	// must not operate in the spectrum governed by the ruleset.
+	RulesetIds []string `json:"rulesetIds,omitempty"`
+}
+
+type SpectrumMessage struct {
+	// Bandwidth: The bandwidth (in Hertz) for which permissible power
+	// levels are specified. For example, FCC regulation would require only
+	// one spectrum specification at 6MHz bandwidth, but Ofcom regulation
+	// would require two specifications, at 0.1MHz and 8MHz. This parameter
+	// may be empty if there is no available spectrum. It will be present
+	// otherwise.
+	Bandwidth float64 `json:"bandwidth,omitempty"`
+
+	// FrequencyRanges: The list of frequency ranges and permissible power
+	// levels. The list may be empty if there is no available spectrum,
+	// otherwise it will be present.
+	FrequencyRanges []*FrequencyRange `json:"frequencyRanges,omitempty"`
+}
+
+type SpectrumSchedule struct {
+	// EventTime: The event time expresses when the spectrum profile is
+	// valid. It will always be present.
+	EventTime *EventTime `json:"eventTime,omitempty"`
+
+	// Spectra: A list of spectrum messages representing the usable profile.
+	// It will always be present, but may be empty when there is no
+	// available spectrum.
+	Spectra []*SpectrumMessage `json:"spectra,omitempty"`
+}
+
+type Vcard struct {
+	// Adr: The street address of the entity.
+	Adr *VcardAddress `json:"adr,omitempty"`
+
+	// Email: An email address that can be used to reach the contact.
+	Email *VcardTypedText `json:"email,omitempty"`
+
+	// Fn: The full name of the contact person. For example: John A. Smith.
+	Fn string `json:"fn,omitempty"`
+
+	// Org: The organization associated with the registering entity.
+	Org *VcardTypedText `json:"org,omitempty"`
+
+	// Tel: A telephone number that can be used to call the contact.
+	Tel *VcardTelephone `json:"tel,omitempty"`
+}
+
+type VcardAddress struct {
+	// Code: The postal code associated with the address. For example:
+	// 94423.
+	Code string `json:"code,omitempty"`
+
+	// Country: The country name. For example: US.
+	Country string `json:"country,omitempty"`
+
+	// Locality: The city or local equivalent portion of the address. For
+	// example: San Jose.
+	Locality string `json:"locality,omitempty"`
+
+	// Pobox: An optional post office box number.
+	Pobox string `json:"pobox,omitempty"`
+
+	// Region: The state or local equivalent portion of the address. For
+	// example: CA.
+	Region string `json:"region,omitempty"`
+
+	// Street: The street number and name. For example: 123 Any St.
+	Street string `json:"street,omitempty"`
+}
+
+type VcardTelephone struct {
+	// Uri: A nested telephone URI of the form: tel:+1-123-456-7890.
+	Uri string `json:"uri,omitempty"`
+}
+
+type VcardTypedText struct {
+	// Text: The text string associated with this item. For example, for an
+	// org field: ACME, inc. For an email field: smith@example.com.
+	Text string `json:"text,omitempty"`
+}
+
+// method id "spectrum.paws.getSpectrum":
+
+type PawsGetSpectrumCall struct {
+	s                      *Service
+	pawsgetspectrumrequest *PawsGetSpectrumRequest
+	opt_                   map[string]interface{}
+}
+
+// GetSpectrum: Requests information about the available spectrum for a
+// device at a location. Requests from a fixed-mode device must include
+// owner information so the device can be registered with the database.
+func (r *PawsService) GetSpectrum(pawsgetspectrumrequest *PawsGetSpectrumRequest) *PawsGetSpectrumCall {
+	c := &PawsGetSpectrumCall{s: r.s, opt_: make(map[string]interface{})}
+	c.pawsgetspectrumrequest = pawsgetspectrumrequest
+	return c
+}
+
+func (c *PawsGetSpectrumCall) Do() (*PawsGetSpectrumResponse, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.pawsgetspectrumrequest)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/spectrum/v1explorer/paws/", "getSpectrum")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(PawsGetSpectrumResponse)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Requests information about the available spectrum for a device at a location. Requests from a fixed-mode device must include owner information so the device can be registered with the database.",
+	//   "httpMethod": "POST",
+	//   "id": "spectrum.paws.getSpectrum",
+	//   "path": "getSpectrum",
+	//   "request": {
+	//     "$ref": "PawsGetSpectrumRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "PawsGetSpectrumResponse"
+	//   }
+	// }
+
+}
+
+// method id "spectrum.paws.getSpectrumBatch":
+
+type PawsGetSpectrumBatchCall struct {
+	s                           *Service
+	pawsgetspectrumbatchrequest *PawsGetSpectrumBatchRequest
+	opt_                        map[string]interface{}
+}
+
+// GetSpectrumBatch: The Google Spectrum Database does not support batch
+// requests, so this method always yields an UNIMPLEMENTED error.
+func (r *PawsService) GetSpectrumBatch(pawsgetspectrumbatchrequest *PawsGetSpectrumBatchRequest) *PawsGetSpectrumBatchCall {
+	c := &PawsGetSpectrumBatchCall{s: r.s, opt_: make(map[string]interface{})}
+	c.pawsgetspectrumbatchrequest = pawsgetspectrumbatchrequest
+	return c
+}
+
+func (c *PawsGetSpectrumBatchCall) Do() (*PawsGetSpectrumBatchResponse, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.pawsgetspectrumbatchrequest)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/spectrum/v1explorer/paws/", "getSpectrumBatch")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(PawsGetSpectrumBatchResponse)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "The Google Spectrum Database does not support batch requests, so this method always yields an UNIMPLEMENTED error.",
+	//   "httpMethod": "POST",
+	//   "id": "spectrum.paws.getSpectrumBatch",
+	//   "path": "getSpectrumBatch",
+	//   "request": {
+	//     "$ref": "PawsGetSpectrumBatchRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "PawsGetSpectrumBatchResponse"
+	//   }
+	// }
+
+}
+
+// method id "spectrum.paws.init":
+
+type PawsInitCall struct {
+	s               *Service
+	pawsinitrequest *PawsInitRequest
+	opt_            map[string]interface{}
+}
+
+// Init: Initializes the connection between a white space device and the
+// database.
+func (r *PawsService) Init(pawsinitrequest *PawsInitRequest) *PawsInitCall {
+	c := &PawsInitCall{s: r.s, opt_: make(map[string]interface{})}
+	c.pawsinitrequest = pawsinitrequest
+	return c
+}
+
+func (c *PawsInitCall) Do() (*PawsInitResponse, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.pawsinitrequest)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/spectrum/v1explorer/paws/", "init")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(PawsInitResponse)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Initializes the connection between a white space device and the database.",
+	//   "httpMethod": "POST",
+	//   "id": "spectrum.paws.init",
+	//   "path": "init",
+	//   "request": {
+	//     "$ref": "PawsInitRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "PawsInitResponse"
+	//   }
+	// }
+
+}
+
+// method id "spectrum.paws.notifySpectrumUse":
+
+type PawsNotifySpectrumUseCall struct {
+	s                            *Service
+	pawsnotifyspectrumuserequest *PawsNotifySpectrumUseRequest
+	opt_                         map[string]interface{}
+}
+
+// NotifySpectrumUse: Notifies the database that the device has selected
+// certain frequency ranges for transmission. Only to be invoked when
+// required by the regulator. The Google Spectrum Database does not
+// operate in domains that require notification, so this always yields
+// an UNIMPLEMENTED error.
+func (r *PawsService) NotifySpectrumUse(pawsnotifyspectrumuserequest *PawsNotifySpectrumUseRequest) *PawsNotifySpectrumUseCall {
+	c := &PawsNotifySpectrumUseCall{s: r.s, opt_: make(map[string]interface{})}
+	c.pawsnotifyspectrumuserequest = pawsnotifyspectrumuserequest
+	return c
+}
+
+func (c *PawsNotifySpectrumUseCall) Do() (*PawsNotifySpectrumUseResponse, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.pawsnotifyspectrumuserequest)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/spectrum/v1explorer/paws/", "notifySpectrumUse")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(PawsNotifySpectrumUseResponse)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Notifies the database that the device has selected certain frequency ranges for transmission. Only to be invoked when required by the regulator. The Google Spectrum Database does not operate in domains that require notification, so this always yields an UNIMPLEMENTED error.",
+	//   "httpMethod": "POST",
+	//   "id": "spectrum.paws.notifySpectrumUse",
+	//   "path": "notifySpectrumUse",
+	//   "request": {
+	//     "$ref": "PawsNotifySpectrumUseRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "PawsNotifySpectrumUseResponse"
+	//   }
+	// }
+
+}
+
+// method id "spectrum.paws.register":
+
+type PawsRegisterCall struct {
+	s                   *Service
+	pawsregisterrequest *PawsRegisterRequest
+	opt_                map[string]interface{}
+}
+
+// Register: The Google Spectrum Database implements registration in the
+// getSpectrum method. As such this always returns an UNIMPLEMENTED
+// error.
+func (r *PawsService) Register(pawsregisterrequest *PawsRegisterRequest) *PawsRegisterCall {
+	c := &PawsRegisterCall{s: r.s, opt_: make(map[string]interface{})}
+	c.pawsregisterrequest = pawsregisterrequest
+	return c
+}
+
+func (c *PawsRegisterCall) Do() (*PawsRegisterResponse, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.pawsregisterrequest)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/spectrum/v1explorer/paws/", "register")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(PawsRegisterResponse)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "The Google Spectrum Database implements registration in the getSpectrum method. As such this always returns an UNIMPLEMENTED error.",
+	//   "httpMethod": "POST",
+	//   "id": "spectrum.paws.register",
+	//   "path": "register",
+	//   "request": {
+	//     "$ref": "PawsRegisterRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "PawsRegisterResponse"
+	//   }
+	// }
+
+}
+
+// method id "spectrum.paws.verifyDevice":
+
+type PawsVerifyDeviceCall struct {
+	s                       *Service
+	pawsverifydevicerequest *PawsVerifyDeviceRequest
+	opt_                    map[string]interface{}
+}
+
+// VerifyDevice: Validates a device for white space use in accordance
+// with regulatory rules. The Google Spectrum Database does not support
+// master/slave configurations, so this always yields an UNIMPLEMENTED
+// error.
+func (r *PawsService) VerifyDevice(pawsverifydevicerequest *PawsVerifyDeviceRequest) *PawsVerifyDeviceCall {
+	c := &PawsVerifyDeviceCall{s: r.s, opt_: make(map[string]interface{})}
+	c.pawsverifydevicerequest = pawsverifydevicerequest
+	return c
+}
+
+func (c *PawsVerifyDeviceCall) Do() (*PawsVerifyDeviceResponse, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.pawsverifydevicerequest)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/spectrum/v1explorer/paws/", "verifyDevice")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(PawsVerifyDeviceResponse)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Validates a device for white space use in accordance with regulatory rules. The Google Spectrum Database does not support master/slave configurations, so this always yields an UNIMPLEMENTED error.",
+	//   "httpMethod": "POST",
+	//   "id": "spectrum.paws.verifyDevice",
+	//   "path": "verifyDevice",
+	//   "request": {
+	//     "$ref": "PawsVerifyDeviceRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "PawsVerifyDeviceResponse"
+	//   }
+	// }
+
+}
diff --git a/sqladmin/v1beta1/sqladmin-api.json b/sqladmin/v1beta1/sqladmin-api.json
index 0795038..3cf886c 100644
--- a/sqladmin/v1beta1/sqladmin-api.json
+++ b/sqladmin/v1beta1/sqladmin-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/l_KrHzpmNoVI1p-SJTCs7tKdyWM\"",
+ "etag": "\"qMhxoRFWKZK4K3KdZJuqms1o3fc/rzbC1mbXRnaKYIRTl-o1XFsAXnM\"",
  "discoveryVersion": "v1",
  "id": "sqladmin:v1beta1",
  "name": "sqladmin",
@@ -229,7 +229,7 @@
     },
     "region": {
      "type": "string",
-     "description": "The geographical region. Can be us-east1 or europe-west1. Defaults to us-east1. The region can not be changed after instance creation."
+     "description": "The geographical region. Can be us-east1, us-central or europe-west1. Defaults to us-central. The region can not be changed after instance creation."
     },
     "settings": {
      "$ref": "Settings",
diff --git a/sqladmin/v1beta1/sqladmin-gen.go b/sqladmin/v1beta1/sqladmin-gen.go
index de747bf..cc4acf5 100644
--- a/sqladmin/v1beta1/sqladmin-gen.go
+++ b/sqladmin/v1beta1/sqladmin-gen.go
@@ -200,9 +200,9 @@
 	// instance. The Google apps domain is prefixed if applicable.
 	Project string `json:"project,omitempty"`
 
-	// Region: The geographical region. Can be us-east1 or europe-west1.
-	// Defaults to us-east1. The region can not be changed after instance
-	// creation.
+	// Region: The geographical region. Can be us-east1, us-central or
+	// europe-west1. Defaults to us-central. The region can not be changed
+	// after instance creation.
 	Region string `json:"region,omitempty"`
 
 	// Settings: The user settings.
diff --git a/sqladmin/v1beta3/sqladmin-api.json b/sqladmin/v1beta3/sqladmin-api.json
new file mode 100644
index 0000000..41cbd24
--- /dev/null
+++ b/sqladmin/v1beta3/sqladmin-api.json
@@ -0,0 +1,1665 @@
+{
+ "kind": "discovery#restDescription",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/URh81wKNn5zQmrIhHLk7urTvYt8\"",
+ "discoveryVersion": "v1",
+ "id": "sqladmin:v1beta3",
+ "name": "sqladmin",
+ "canonicalName": "SQL Admin",
+ "version": "v1beta3",
+ "title": "Cloud SQL Administration API",
+ "description": "API for Cloud SQL database instance management.",
+ "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/cloud-sql/docs/admin-api/",
+ "protocol": "rest",
+ "baseUrl": "https://www.googleapis.com/sql/v1beta3/projects/",
+ "basePath": "/sql/v1beta3/projects/",
+ "rootUrl": "https://www.googleapis.com/",
+ "servicePath": "sql/v1beta3/projects/",
+ "batchPath": "batch",
+ "parameters": {
+  "alt": {
+   "type": "string",
+   "description": "Data format for the response.",
+   "default": "json",
+   "enum": [
+    "json"
+   ],
+   "enumDescriptions": [
+    "Responses with Content-Type of application/json"
+   ],
+   "location": "query"
+  },
+  "fields": {
+   "type": "string",
+   "description": "Selector specifying which fields to include in a partial response.",
+   "location": "query"
+  },
+  "key": {
+   "type": "string",
+   "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+   "location": "query"
+  },
+  "oauth_token": {
+   "type": "string",
+   "description": "OAuth 2.0 token for the current user.",
+   "location": "query"
+  },
+  "prettyPrint": {
+   "type": "boolean",
+   "description": "Returns response with indentations and line breaks.",
+   "default": "true",
+   "location": "query"
+  },
+  "quotaUser": {
+   "type": "string",
+   "description": "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. Overrides userIp if both are provided.",
+   "location": "query"
+  },
+  "userIp": {
+   "type": "string",
+   "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.",
+   "location": "query"
+  }
+ },
+ "auth": {
+  "oauth2": {
+   "scopes": {
+    "https://www.googleapis.com/auth/cloud-platform": {
+     "description": "View and manage your data across Google Cloud Platform services"
+    },
+    "https://www.googleapis.com/auth/sqlservice.admin": {
+     "description": "Manage your Google SQL Service instances"
+    }
+   }
+  }
+ },
+ "schemas": {
+  "BackupConfiguration": {
+   "id": "BackupConfiguration",
+   "type": "object",
+   "description": "Database instance backup configuration.",
+   "properties": {
+    "binaryLogEnabled": {
+     "type": "boolean",
+     "description": "Whether binary log is enabled. If backup configuration is disabled, binary log must be disabled as well."
+    },
+    "enabled": {
+     "type": "boolean",
+     "description": "Whether this configuration is enabled."
+    },
+    "id": {
+     "type": "string",
+     "description": "Identifier for this configuration. This gets generated automatically when a backup configuration is created."
+    },
+    "kind": {
+     "type": "string",
+     "description": "This is always sql#backupConfiguration.",
+     "default": "sql#backupConfiguration"
+    },
+    "startTime": {
+     "type": "string",
+     "description": "Start time for the daily backup configuration in UTC timezone in the 24 hour format - HH:MM."
+    }
+   }
+  },
+  "BackupRun": {
+   "id": "BackupRun",
+   "type": "object",
+   "description": "A database instance backup run resource.",
+   "properties": {
+    "backupConfiguration": {
+     "type": "string",
+     "description": "Backup Configuration identifier."
+    },
+    "dueTime": {
+     "type": "string",
+     "description": "The due time of this run in UTC timezone in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.",
+     "format": "date-time"
+    },
+    "endTime": {
+     "type": "string",
+     "description": "The time the backup operation completed in UTC timezone in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.",
+     "format": "date-time"
+    },
+    "enqueuedTime": {
+     "type": "string",
+     "description": "The time the run was enqueued in UTC timezone in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.",
+     "format": "date-time"
+    },
+    "error": {
+     "$ref": "OperationError",
+     "description": "Information about why the backup operation failed. This is only present if the run has the FAILED status."
+    },
+    "instance": {
+     "type": "string",
+     "description": "Name of the database instance."
+    },
+    "kind": {
+     "type": "string",
+     "description": "This is always sql#backupRun.",
+     "default": "sql#backupRun"
+    },
+    "startTime": {
+     "type": "string",
+     "description": "The time the backup operation actually started in UTC timezone in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.",
+     "format": "date-time"
+    },
+    "status": {
+     "type": "string",
+     "description": "The status of this run."
+    }
+   }
+  },
+  "BackupRunsListResponse": {
+   "id": "BackupRunsListResponse",
+   "type": "object",
+   "description": "Backup run list results.",
+   "properties": {
+    "items": {
+     "type": "array",
+     "description": "A list of backup runs in reverse chronological order of the enqueued time.",
+     "items": {
+      "$ref": "BackupRun"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "This is always sql#backupRunsList.",
+     "default": "sql#backupRunsList"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "The continuation token, used to page through large result sets. Provide this value in a subsequent request to return the next page of results."
+    }
+   }
+  },
+  "DatabaseInstance": {
+   "id": "DatabaseInstance",
+   "type": "object",
+   "description": "A Cloud SQL instance resource.",
+   "properties": {
+    "currentDiskSize": {
+     "type": "string",
+     "description": "The current disk usage of the instance in bytes.",
+     "format": "int64"
+    },
+    "databaseVersion": {
+     "type": "string",
+     "description": "The database engine type and version, for example MYSQL_5_5 for MySQL 5.5."
+    },
+    "etag": {
+     "type": "string",
+     "description": "HTTP 1.1 Entity tag for the resource."
+    },
+    "instance": {
+     "type": "string",
+     "description": "Name of the Cloud SQL instance. This does not include the project ID.",
+     "annotations": {
+      "required": [
+       "sql.instances.insert",
+       "sql.instances.update"
+      ]
+     }
+    },
+    "ipAddresses": {
+     "type": "array",
+     "description": "The assigned IP addresses for the instance.",
+     "items": {
+      "$ref": "IpMapping"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "This is always sql#instance.",
+     "default": "sql#instance"
+    },
+    "maxDiskSize": {
+     "type": "string",
+     "description": "The maximum disk size of the instance in bytes.",
+     "format": "int64"
+    },
+    "project": {
+     "type": "string",
+     "description": "The project ID of the project containing the Cloud SQL instance. The Google apps domain is prefixed if applicable.",
+     "annotations": {
+      "required": [
+       "sql.instances.insert",
+       "sql.instances.update"
+      ]
+     }
+    },
+    "region": {
+     "type": "string",
+     "description": "The geographical region. Can be us-east1, us-central or europe-west1. Defaults to us-central. The region can not be changed after instance creation."
+    },
+    "serverCaCert": {
+     "$ref": "SslCert",
+     "description": "SSL configuration."
+    },
+    "settings": {
+     "$ref": "Settings",
+     "description": "The user settings."
+    },
+    "state": {
+     "type": "string",
+     "description": "The current serving state of the Cloud SQL instance. This can be one of the following.\nRUNNABLE: The instance is running, or is ready to run when accessed.\nSUSPENDED: The instance is not available, for example due to problems with billing.\nPENDING_CREATE: The instance is being created.\nMAINTENANCE: The instance is down for maintenance.\nUNKNOWN_STATE: The state of the instance is unknown."
+    }
+   }
+  },
+  "ExportContext": {
+   "id": "ExportContext",
+   "type": "object",
+   "description": "Database instance export context.",
+   "properties": {
+    "database": {
+     "type": "array",
+     "description": "Databases (for example, guestbook) from which the export is made. If unspecified, all databases are exported.",
+     "items": {
+      "type": "string"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "This is always sql#exportContext.",
+     "default": "sql#exportContext"
+    },
+    "table": {
+     "type": "array",
+     "description": "Tables to export, or that were exported, from the specified database. If you specify tables, specify one and only one database.",
+     "items": {
+      "type": "string"
+     }
+    },
+    "uri": {
+     "type": "string",
+     "description": "The path to the file in Google Cloud Storage where the export will be stored, or where it was already stored. The URI is in the form gs://bucketName/fileName. If the file already exists, the operation fails. If the filename ends with .gz, the contents are compressed."
+    }
+   }
+  },
+  "ImportContext": {
+   "id": "ImportContext",
+   "type": "object",
+   "description": "Database instance import context.",
+   "properties": {
+    "database": {
+     "type": "string",
+     "description": "The database (for example, guestbook) to which the import is made. If not set, it is assumed that the database is specified in the file to be imported."
+    },
+    "kind": {
+     "type": "string",
+     "description": "This is always sql#importContext.",
+     "default": "sql#importContext"
+    },
+    "uri": {
+     "type": "array",
+     "description": "A path to the MySQL dump file in Google Cloud Storage from which the import is made. The URI is in the form gs://bucketName/fileName. Compressed gzip files (.gz) are also supported.",
+     "items": {
+      "type": "string"
+     }
+    }
+   }
+  },
+  "InstanceOperation": {
+   "id": "InstanceOperation",
+   "type": "object",
+   "description": "An Operations resource contains information about database instance operations such as create, delete, and restart. Operations resources are created in response to operations that were initiated; you never create them directly.",
+   "properties": {
+    "endTime": {
+     "type": "string",
+     "description": "The time this operation finished in UTC timezone in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.",
+     "format": "date-time"
+    },
+    "enqueuedTime": {
+     "type": "string",
+     "description": "The time this operation was enqueued in UTC timezone in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.",
+     "format": "date-time"
+    },
+    "error": {
+     "type": "array",
+     "description": "The error(s) encountered by this operation. Only set if the operation results in an error.",
+     "items": {
+      "$ref": "OperationError"
+     }
+    },
+    "exportContext": {
+     "$ref": "ExportContext",
+     "description": "The context for export operation, if applicable."
+    },
+    "importContext": {
+     "$ref": "ImportContext",
+     "description": "The context for import operation, if applicable."
+    },
+    "instance": {
+     "type": "string",
+     "description": "Name of the database instance."
+    },
+    "kind": {
+     "type": "string",
+     "description": "This is always sql#instanceOperation.",
+     "default": "sql#instanceOperation"
+    },
+    "operation": {
+     "type": "string",
+     "description": "An identifier that uniquely identifies the operation. You can use this identifier to retrieve the Operations resource that has information about the operation."
+    },
+    "operationType": {
+     "type": "string",
+     "description": "The type of the operation. Valid values are CREATE, DELETE, UPDATE, RESTART, IMPORT, EXPORT, BACKUP_VOLUME, RESTORE_VOLUME."
+    },
+    "startTime": {
+     "type": "string",
+     "description": "The time this operation actually started in UTC timezone in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.",
+     "format": "date-time"
+    },
+    "state": {
+     "type": "string",
+     "description": "The state of an operation. Valid values are PENDING, RUNNING, DONE, UNKNOWN."
+    },
+    "userEmailAddress": {
+     "type": "string",
+     "description": "The email address of the user who initiated this operation."
+    }
+   }
+  },
+  "InstanceSetRootPasswordRequest": {
+   "id": "InstanceSetRootPasswordRequest",
+   "type": "object",
+   "description": "Database instance set root password request.",
+   "properties": {
+    "setRootPasswordContext": {
+     "$ref": "SetRootPasswordContext",
+     "description": "Set Root Password Context."
+    }
+   }
+  },
+  "InstancesDeleteResponse": {
+   "id": "InstancesDeleteResponse",
+   "type": "object",
+   "description": "Database instance delete response.",
+   "properties": {
+    "kind": {
+     "type": "string",
+     "description": "This is always sql#instancesDelete.",
+     "default": "sql#instancesDelete"
+    },
+    "operation": {
+     "type": "string",
+     "description": "An identifier that uniquely identifies the operation. You can use this identifier to retrieve the Operations resource that has information about the operation."
+    }
+   }
+  },
+  "InstancesExportRequest": {
+   "id": "InstancesExportRequest",
+   "type": "object",
+   "description": "Database instance export request.",
+   "properties": {
+    "exportContext": {
+     "$ref": "ExportContext",
+     "description": "Contains details about the export operation."
+    }
+   }
+  },
+  "InstancesExportResponse": {
+   "id": "InstancesExportResponse",
+   "type": "object",
+   "description": "Database instance export response.",
+   "properties": {
+    "kind": {
+     "type": "string",
+     "description": "This is always sql#instancesExport.",
+     "default": "sql#instancesExport"
+    },
+    "operation": {
+     "type": "string",
+     "description": "An identifier that uniquely identifies the operation. You can use this identifier to retrieve the Operations resource that has information about the operation."
+    }
+   }
+  },
+  "InstancesImportRequest": {
+   "id": "InstancesImportRequest",
+   "type": "object",
+   "description": "Database instance import request.",
+   "properties": {
+    "importContext": {
+     "$ref": "ImportContext",
+     "description": "Contains details about the import operation."
+    }
+   }
+  },
+  "InstancesImportResponse": {
+   "id": "InstancesImportResponse",
+   "type": "object",
+   "description": "Database instance import response.",
+   "properties": {
+    "kind": {
+     "type": "string",
+     "description": "This is always sql#instancesImport.",
+     "default": "sql#instancesImport"
+    },
+    "operation": {
+     "type": "string",
+     "description": "An identifier that uniquely identifies the operation. You can use this identifier to retrieve the Operations resource that has information about the operation."
+    }
+   }
+  },
+  "InstancesInsertResponse": {
+   "id": "InstancesInsertResponse",
+   "type": "object",
+   "description": "Database instance insert response.",
+   "properties": {
+    "kind": {
+     "type": "string",
+     "description": "This is always sql#instancesInsert.",
+     "default": "sql#instancesInsert"
+    },
+    "operation": {
+     "type": "string",
+     "description": "An identifier that uniquely identifies the operation. You can use this identifier to retrieve the Operations resource that has information about the operation."
+    }
+   }
+  },
+  "InstancesListResponse": {
+   "id": "InstancesListResponse",
+   "type": "object",
+   "description": "Database instances list response.",
+   "properties": {
+    "items": {
+     "type": "array",
+     "description": "List of database instance resources.",
+     "items": {
+      "$ref": "DatabaseInstance"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "This is always sql#instancesList.",
+     "default": "sql#instancesList"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "The continuation token, used to page through large result sets. Provide this value in a subsequent request to return the next page of results."
+    }
+   }
+  },
+  "InstancesResetSslConfigResponse": {
+   "id": "InstancesResetSslConfigResponse",
+   "type": "object",
+   "description": "Database instance resetSslConfig response.",
+   "properties": {
+    "kind": {
+     "type": "string",
+     "description": "This is always sql#instancesResetSslConfig.",
+     "default": "sql#instancesResetSslConfig"
+    },
+    "operation": {
+     "type": "string",
+     "description": "An identifier that uniquely identifies the operation. You can use this identifier to retrieve the Operations resource that has information about the operation. All ssl client certificates will be deleted and a new server certificate will be created. Does not take effect until the next instance restart."
+    }
+   }
+  },
+  "InstancesRestartResponse": {
+   "id": "InstancesRestartResponse",
+   "type": "object",
+   "description": "Database instance restart response.",
+   "properties": {
+    "kind": {
+     "type": "string",
+     "description": "This is always sql#instancesRestart.",
+     "default": "sql#instancesRestart"
+    },
+    "operation": {
+     "type": "string",
+     "description": "An identifier that uniquely identifies the operation. You can use this identifier to retrieve the Operations resource that has information about the operation."
+    }
+   }
+  },
+  "InstancesRestoreBackupResponse": {
+   "id": "InstancesRestoreBackupResponse",
+   "type": "object",
+   "description": "Database instance restore backup response.",
+   "properties": {
+    "kind": {
+     "type": "string",
+     "description": "This is always sql#instancesRestoreBackup.",
+     "default": "sql#instancesRestoreBackup"
+    },
+    "operation": {
+     "type": "string",
+     "description": "An identifier that uniquely identifies the operation. You can use this identifier to retrieve the Operations resource that has information about the operation."
+    }
+   }
+  },
+  "InstancesSetRootPasswordResponse": {
+   "id": "InstancesSetRootPasswordResponse",
+   "type": "object",
+   "description": "Database instance set root password response.",
+   "properties": {
+    "kind": {
+     "type": "string",
+     "description": "This is always sql#instancesSetRootPasswird.",
+     "default": "sql#instancesSetRootPassword"
+    },
+    "operation": {
+     "type": "string",
+     "description": "An identifier that uniquely identifies the operation. You can use this identifier to retrieve the Operations resource that has information about the operation."
+    }
+   }
+  },
+  "InstancesUpdateResponse": {
+   "id": "InstancesUpdateResponse",
+   "type": "object",
+   "description": "Database instance update response.",
+   "properties": {
+    "kind": {
+     "type": "string",
+     "description": "This is always sql#instancesUpdate.",
+     "default": "sql#instancesUpdate"
+    },
+    "operation": {
+     "type": "string",
+     "description": "An identifier that uniquely identifies the operation. You can use this identifier to retrieve information about the operation."
+    }
+   }
+  },
+  "IpConfiguration": {
+   "id": "IpConfiguration",
+   "type": "object",
+   "description": "IP Management configuration.",
+   "properties": {
+    "authorizedNetworks": {
+     "type": "array",
+     "description": "The list of external networks that are allowed to connect to the instance using the IP. In CIDR notation, also known as 'slash' notation (e.g. 192.168.100.0/24).",
+     "items": {
+      "type": "string"
+     }
+    },
+    "enabled": {
+     "type": "boolean",
+     "description": "Whether the instance should be assigned an IP address or not."
+    },
+    "requireSsl": {
+     "type": "boolean",
+     "description": "Whether the mysqld should default to 'REQUIRE X509' for users connecting over IP."
+    }
+   }
+  },
+  "IpMapping": {
+   "id": "IpMapping",
+   "type": "object",
+   "description": "Database instance IP Mapping.",
+   "properties": {
+    "ipAddress": {
+     "type": "string",
+     "description": "The IP address assigned."
+    },
+    "timeToRetire": {
+     "type": "string",
+     "description": "The due time for this IP to be retired in RFC 3339 format, for example 2012-11-15T16:19:00.094Z. This field is only available when the IP is scheduled to be retired.",
+     "format": "date-time"
+    }
+   }
+  },
+  "LocationPreference": {
+   "id": "LocationPreference",
+   "type": "object",
+   "description": "Preferred location. This specifies where a Cloud SQL instance should preferably be located, either in a specific Compute Engine zone, or co-located with an App Engine application. Note that if the preferred location is not available, the instance will be located as close as possible within the region. Only one location may be specified.",
+   "properties": {
+    "followGaeApplication": {
+     "type": "string",
+     "description": "The AppEngine application to follow, it must be in the same region as the Cloud SQL instance."
+    },
+    "kind": {
+     "type": "string",
+     "description": "This is always sql#locationPreference.",
+     "default": "sql#locationPreference"
+    },
+    "zone": {
+     "type": "string",
+     "description": "The preferred Compute Engine zone (e.g. us-centra1-a, us-central1-b, etc.)."
+    }
+   }
+  },
+  "OperationError": {
+   "id": "OperationError",
+   "type": "object",
+   "description": "Database instance operation error.",
+   "properties": {
+    "code": {
+     "type": "string",
+     "description": "Identifies the specific error that occurred."
+    },
+    "kind": {
+     "type": "string",
+     "description": "This is always sql#operationError.",
+     "default": "sql#operationError"
+    }
+   }
+  },
+  "OperationsListResponse": {
+   "id": "OperationsListResponse",
+   "type": "object",
+   "description": "Database instance list operations response.",
+   "properties": {
+    "items": {
+     "type": "array",
+     "description": "List of operation resources.",
+     "items": {
+      "$ref": "InstanceOperation"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "This is always sql#operationsList.",
+     "default": "sql#operationsList"
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "The continuation token, used to page through large result sets. Provide this value in a subsequent request to return the next page of results."
+    }
+   }
+  },
+  "SetRootPasswordContext": {
+   "id": "SetRootPasswordContext",
+   "type": "object",
+   "description": "Database instance set root password context.",
+   "properties": {
+    "kind": {
+     "type": "string",
+     "description": "This is always sql#setRootUserContext.",
+     "default": "sql#setRootUserContext"
+    },
+    "password": {
+     "type": "string",
+     "description": "The password for the root user."
+    }
+   }
+  },
+  "Settings": {
+   "id": "Settings",
+   "type": "object",
+   "description": "Database instance settings.",
+   "properties": {
+    "activationPolicy": {
+     "type": "string",
+     "description": "The activation policy for this instance. This specifies when the instance should be activated and is applicable only when the instance state is RUNNABLE. This can be one of the following.\nALWAYS: The instance should always be active.\nNEVER: The instance should never be activated.\nON_DEMAND: The instance is activated upon receiving requests."
+    },
+    "authorizedGaeApplications": {
+     "type": "array",
+     "description": "The AppEngine app ids that can access this instance.",
+     "items": {
+      "type": "string"
+     }
+    },
+    "backupConfiguration": {
+     "type": "array",
+     "description": "The daily backup configuration for the instance.",
+     "items": {
+      "$ref": "BackupConfiguration"
+     }
+    },
+    "ipConfiguration": {
+     "$ref": "IpConfiguration",
+     "description": "The settings for IP Management. This allows to enable or disable the instance IP and manage which external networks can connect to the instance."
+    },
+    "kind": {
+     "type": "string",
+     "description": "This is always sql#settings.",
+     "default": "sql#settings"
+    },
+    "locationPreference": {
+     "$ref": "LocationPreference",
+     "description": "The location preference settings. This allows the instance to be located as near as possible to either an AppEngine app or GCE zone for better perfomance."
+    },
+    "pricingPlan": {
+     "type": "string",
+     "description": "The pricing plan for this instance. This can be either PER_USE or PACKAGE."
+    },
+    "replicationType": {
+     "type": "string",
+     "description": "The type of replication this instance uses. This can be either ASYNCHRONOUS or SYNCHRONOUS."
+    },
+    "settingsVersion": {
+     "type": "string",
+     "description": "The version of instance settings. This is a required field for update method to make sure concurrent updates are handled properly. During update, use the most recent settingsVersion value for this instance and do not try to update this value.",
+     "format": "int64",
+     "annotations": {
+      "required": [
+       "sql.instances.update"
+      ]
+     }
+    },
+    "tier": {
+     "type": "string",
+     "description": "The tier of service for this instance, for example D1, D2. For more information, see pricing.",
+     "annotations": {
+      "required": [
+       "sql.instances.insert",
+       "sql.instances.update"
+      ]
+     }
+    }
+   }
+  },
+  "SslCert": {
+   "id": "SslCert",
+   "type": "object",
+   "description": "SslCerts Resource",
+   "properties": {
+    "cert": {
+     "type": "string",
+     "description": "PEM representation."
+    },
+    "certSerialNumber": {
+     "type": "string",
+     "description": "Serial number, as extracted from the certificate."
+    },
+    "commonName": {
+     "type": "string",
+     "description": "User supplied name. Constrained to [a-zA-Z.-_ ]+."
+    },
+    "createTime": {
+     "type": "string",
+     "description": "Time when the certificate was created.",
+     "format": "date-time"
+    },
+    "expirationTime": {
+     "type": "string",
+     "format": "date-time"
+    },
+    "instance": {
+     "type": "string",
+     "description": "Name of the database instance."
+    },
+    "kind": {
+     "type": "string",
+     "description": "This is always sql#sslCert.",
+     "default": "sql#sslCert"
+    },
+    "sha1Fingerprint": {
+     "type": "string",
+     "description": "Sha1 Fingerprint."
+    }
+   }
+  },
+  "SslCertDetail": {
+   "id": "SslCertDetail",
+   "type": "object",
+   "description": "SslCertDetail.",
+   "properties": {
+    "certInfo": {
+     "$ref": "SslCert",
+     "description": "The public information about the cert."
+    },
+    "certPrivateKey": {
+     "type": "string",
+     "description": "The private key for the client cert, in pem format. Keep private in order to protect your security."
+    }
+   }
+  },
+  "SslCertsDeleteResponse": {
+   "id": "SslCertsDeleteResponse",
+   "type": "object",
+   "description": "SslCert delete response.",
+   "properties": {
+    "kind": {
+     "type": "string",
+     "description": "This is always sql#sslCertsDelete.",
+     "default": "sql#sslCertsDelete"
+    },
+    "operation": {
+     "type": "string",
+     "description": "An identifier that uniquely identifies the operation. You can use this identifier to retrieve the Operations resource that has information about the operation."
+    }
+   }
+  },
+  "SslCertsInsertRequest": {
+   "id": "SslCertsInsertRequest",
+   "type": "object",
+   "description": "SslCerts insert request.",
+   "properties": {
+    "commonName": {
+     "type": "string",
+     "description": "User supplied name. Must be a distinct name from the other certificates for this instance. New certificates will not be usable until the instance is restarted."
+    }
+   }
+  },
+  "SslCertsInsertResponse": {
+   "id": "SslCertsInsertResponse",
+   "type": "object",
+   "description": "SslCert insert response.",
+   "properties": {
+    "clientCert": {
+     "$ref": "SslCertDetail",
+     "description": "The new client certificate and private key. The new certificate will not work until the instance is restarted."
+    },
+    "kind": {
+     "type": "string",
+     "description": "This is always sql#sslCertsInsert.",
+     "default": "sql#sslCertsInsert"
+    },
+    "serverCaCert": {
+     "$ref": "SslCert",
+     "description": "The server Certificate Authority's certificate. If this is missing you can force a new one to be generated by calling resetSslConfig method on instances resource.."
+    }
+   }
+  },
+  "SslCertsListResponse": {
+   "id": "SslCertsListResponse",
+   "type": "object",
+   "description": "SslCerts list response.",
+   "properties": {
+    "items": {
+     "type": "array",
+     "description": "List of client certificates for the instance.",
+     "items": {
+      "$ref": "SslCert"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "This is always sql#sslCertsList.",
+     "default": "sql#sslCertsList"
+    }
+   }
+  },
+  "Tier": {
+   "id": "Tier",
+   "type": "object",
+   "description": "A Google Cloud SQL service tier resource.",
+   "properties": {
+    "DiskQuota": {
+     "type": "string",
+     "description": "The maximum disk size of this tier in bytes.",
+     "format": "int64"
+    },
+    "RAM": {
+     "type": "string",
+     "description": "The maximum RAM usage of this tier in bytes.",
+     "format": "int64"
+    },
+    "kind": {
+     "type": "string",
+     "description": "This is always sql#tier.",
+     "default": "sql#tier"
+    },
+    "region": {
+     "type": "array",
+     "description": "The applicable regions for this tier. Can be us-east1 and europe-west1.",
+     "items": {
+      "type": "string"
+     }
+    },
+    "tier": {
+     "type": "string",
+     "description": "An identifier for the service tier, for example D1, D2 etc. For related information, see Pricing."
+    }
+   }
+  },
+  "TiersListResponse": {
+   "id": "TiersListResponse",
+   "type": "object",
+   "description": "Tiers list response.",
+   "properties": {
+    "items": {
+     "type": "array",
+     "description": "List of tiers.",
+     "items": {
+      "$ref": "Tier"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "This is always sql#tiersList.",
+     "default": "sql#tiersList"
+    }
+   }
+  }
+ },
+ "resources": {
+  "backupRuns": {
+   "methods": {
+    "get": {
+     "id": "sql.backupRuns.get",
+     "path": "{project}/instances/{instance}/backupRuns/{backupConfiguration}",
+     "httpMethod": "GET",
+     "description": "Retrieves a resource containing information about a backup run.",
+     "parameters": {
+      "backupConfiguration": {
+       "type": "string",
+       "description": "Identifier for the backup configuration. This gets generated automatically when a backup configuration is created.",
+       "required": true,
+       "location": "path"
+      },
+      "dueTime": {
+       "type": "string",
+       "description": "The time when this run is due to start in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.",
+       "required": true,
+       "location": "query"
+      },
+      "instance": {
+       "type": "string",
+       "description": "Cloud SQL instance ID. This does not include the project ID.",
+       "required": true,
+       "location": "path"
+      },
+      "project": {
+       "type": "string",
+       "description": "Project ID of the project that contains the instance.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "instance",
+      "backupConfiguration",
+      "dueTime"
+     ],
+     "response": {
+      "$ref": "BackupRun"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/sqlservice.admin"
+     ]
+    },
+    "list": {
+     "id": "sql.backupRuns.list",
+     "path": "{project}/instances/{instance}/backupRuns",
+     "httpMethod": "GET",
+     "description": "Lists all backup runs associated with a given instance and configuration in the reverse chronological order of the enqueued time.",
+     "parameters": {
+      "backupConfiguration": {
+       "type": "string",
+       "description": "Identifier for the backup configuration. This gets generated automatically when a backup configuration is created.",
+       "required": true,
+       "location": "query"
+      },
+      "instance": {
+       "type": "string",
+       "description": "Cloud SQL instance ID. This does not include the project ID.",
+       "required": true,
+       "location": "path"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "Maximum number of backup runs per response.",
+       "format": "int32",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "A previously-returned page token representing part of the larger set of results to view.",
+       "location": "query"
+      },
+      "project": {
+       "type": "string",
+       "description": "Project ID of the project that contains the instance.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "instance",
+      "backupConfiguration"
+     ],
+     "response": {
+      "$ref": "BackupRunsListResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/sqlservice.admin"
+     ]
+    }
+   }
+  },
+  "instances": {
+   "methods": {
+    "delete": {
+     "id": "sql.instances.delete",
+     "path": "{project}/instances/{instance}",
+     "httpMethod": "DELETE",
+     "description": "Deletes a Cloud SQL 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": "Project ID of the project that contains the instance to be deleted.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "instance"
+     ],
+     "response": {
+      "$ref": "InstancesDeleteResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/sqlservice.admin"
+     ]
+    },
+    "export": {
+     "id": "sql.instances.export",
+     "path": "{project}/instances/{instance}/export",
+     "httpMethod": "POST",
+     "description": "Exports data from a Cloud SQL instance to a Google Cloud Storage bucket as a MySQL dump file.",
+     "parameters": {
+      "instance": {
+       "type": "string",
+       "description": "Cloud SQL instance ID. This does not include the project ID.",
+       "required": true,
+       "location": "path"
+      },
+      "project": {
+       "type": "string",
+       "description": "Project ID of the project that contains the instance to be exported.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "instance"
+     ],
+     "request": {
+      "$ref": "InstancesExportRequest"
+     },
+     "response": {
+      "$ref": "InstancesExportResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/cloud-platform"
+     ]
+    },
+    "get": {
+     "id": "sql.instances.get",
+     "path": "{project}/instances/{instance}",
+     "httpMethod": "GET",
+     "description": "Retrieves a resource containing information about a Cloud SQL instance.",
+     "parameters": {
+      "instance": {
+       "type": "string",
+       "description": "Database instance ID. This does not include the project ID.",
+       "required": true,
+       "location": "path"
+      },
+      "project": {
+       "type": "string",
+       "description": "Project ID of the project that contains the instance.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "instance"
+     ],
+     "response": {
+      "$ref": "DatabaseInstance"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/sqlservice.admin"
+     ]
+    },
+    "import": {
+     "id": "sql.instances.import",
+     "path": "{project}/instances/{instance}/import",
+     "httpMethod": "POST",
+     "description": "Imports data into a Cloud SQL instance from a MySQL dump file in Google Cloud Storage.",
+     "parameters": {
+      "instance": {
+       "type": "string",
+       "description": "Cloud SQL instance ID. This does not include the project ID.",
+       "required": true,
+       "location": "path"
+      },
+      "project": {
+       "type": "string",
+       "description": "Project ID of the project that contains the instance.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "instance"
+     ],
+     "request": {
+      "$ref": "InstancesImportRequest"
+     },
+     "response": {
+      "$ref": "InstancesImportResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/cloud-platform"
+     ]
+    },
+    "insert": {
+     "id": "sql.instances.insert",
+     "path": "{project}/instances",
+     "httpMethod": "POST",
+     "description": "Creates a new Cloud SQL instance.",
+     "parameters": {
+      "project": {
+       "type": "string",
+       "description": "Project ID of the project to which the newly created Cloud SQL instances should belong.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project"
+     ],
+     "request": {
+      "$ref": "DatabaseInstance"
+     },
+     "response": {
+      "$ref": "InstancesInsertResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/sqlservice.admin"
+     ]
+    },
+    "list": {
+     "id": "sql.instances.list",
+     "path": "{project}/instances",
+     "httpMethod": "GET",
+     "description": "Lists instances under a given project in the alphabetical order of the instance name.",
+     "parameters": {
+      "maxResults": {
+       "type": "integer",
+       "description": "The maximum number of results to return per response.",
+       "format": "uint32",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "A previously-returned page token representing part of the larger set of results to view.",
+       "location": "query"
+      },
+      "project": {
+       "type": "string",
+       "description": "Project ID of the project for which to list Cloud SQL instances.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project"
+     ],
+     "response": {
+      "$ref": "InstancesListResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/sqlservice.admin"
+     ]
+    },
+    "patch": {
+     "id": "sql.instances.patch",
+     "path": "{project}/instances/{instance}",
+     "httpMethod": "PATCH",
+     "description": "Updates settings of a Cloud SQL instance. Caution: This is not a partial update, so you must include values for all the settings that you want to retain. For partial updates, use patch.. This method supports patch semantics.",
+     "parameters": {
+      "instance": {
+       "type": "string",
+       "description": "Cloud SQL instance ID. This does not include the project ID.",
+       "required": true,
+       "location": "path"
+      },
+      "project": {
+       "type": "string",
+       "description": "Project ID of the project that contains the instance.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "instance"
+     ],
+     "request": {
+      "$ref": "DatabaseInstance"
+     },
+     "response": {
+      "$ref": "InstancesUpdateResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/sqlservice.admin"
+     ]
+    },
+    "resetSslConfig": {
+     "id": "sql.instances.resetSslConfig",
+     "path": "{project}/instances/{instance}/resetSslConfig",
+     "httpMethod": "POST",
+     "description": "Deletes all client certificates and generates a new server SSL certificate for the instance. The changes will not take effect until the instance is restarted. Existing instances without a server certificate will need to call this once to set a server certificate.",
+     "parameters": {
+      "instance": {
+       "type": "string",
+       "description": "Cloud SQL instance ID. This does not include the project ID.",
+       "required": true,
+       "location": "path"
+      },
+      "project": {
+       "type": "string",
+       "description": "Project ID of the project that contains the instance.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "instance"
+     ],
+     "response": {
+      "$ref": "InstancesResetSslConfigResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/sqlservice.admin"
+     ]
+    },
+    "restart": {
+     "id": "sql.instances.restart",
+     "path": "{project}/instances/{instance}/restart",
+     "httpMethod": "POST",
+     "description": "Restarts a Cloud SQL 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": "Project ID of the project that contains the instance to be restarted.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "instance"
+     ],
+     "response": {
+      "$ref": "InstancesRestartResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/sqlservice.admin"
+     ]
+    },
+    "restoreBackup": {
+     "id": "sql.instances.restoreBackup",
+     "path": "{project}/instances/{instance}/restoreBackup",
+     "httpMethod": "POST",
+     "description": "Restores a backup of a Cloud SQL instance.",
+     "parameters": {
+      "backupConfiguration": {
+       "type": "string",
+       "description": "The identifier of the backup configuration. This gets generated automatically when a backup configuration is created.",
+       "required": true,
+       "location": "query"
+      },
+      "dueTime": {
+       "type": "string",
+       "description": "The time when this run is due to start in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.",
+       "required": true,
+       "location": "query"
+      },
+      "instance": {
+       "type": "string",
+       "description": "Cloud SQL instance ID. This does not include the project ID.",
+       "required": true,
+       "location": "path"
+      },
+      "project": {
+       "type": "string",
+       "description": "Project ID of the project that contains the instance.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "instance",
+      "backupConfiguration",
+      "dueTime"
+     ],
+     "response": {
+      "$ref": "InstancesRestoreBackupResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/sqlservice.admin"
+     ]
+    },
+    "setRootPassword": {
+     "id": "sql.instances.setRootPassword",
+     "path": "{project}/instances/{instance}/setRootPassword",
+     "httpMethod": "POST",
+     "description": "Sets the password for the root user.",
+     "parameters": {
+      "instance": {
+       "type": "string",
+       "description": "Cloud SQL instance ID. This does not include the project ID.",
+       "required": true,
+       "location": "path"
+      },
+      "project": {
+       "type": "string",
+       "description": "Project ID of the project that contains the instance.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "instance"
+     ],
+     "request": {
+      "$ref": "InstanceSetRootPasswordRequest"
+     },
+     "response": {
+      "$ref": "InstancesSetRootPasswordResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/sqlservice.admin"
+     ]
+    },
+    "update": {
+     "id": "sql.instances.update",
+     "path": "{project}/instances/{instance}",
+     "httpMethod": "PUT",
+     "description": "Updates settings of a Cloud SQL instance. Caution: This is not a partial update, so you must include values for all the settings that you want to retain. For partial updates, use patch.",
+     "parameters": {
+      "instance": {
+       "type": "string",
+       "description": "Cloud SQL instance ID. This does not include the project ID.",
+       "required": true,
+       "location": "path"
+      },
+      "project": {
+       "type": "string",
+       "description": "Project ID of the project that contains the instance.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "instance"
+     ],
+     "etagRequired": true,
+     "request": {
+      "$ref": "DatabaseInstance"
+     },
+     "response": {
+      "$ref": "InstancesUpdateResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/sqlservice.admin"
+     ]
+    }
+   }
+  },
+  "operations": {
+   "methods": {
+    "get": {
+     "id": "sql.operations.get",
+     "path": "{project}/instances/{instance}/operations/{operation}",
+     "httpMethod": "GET",
+     "description": "Retrieves an instance operation that has been performed on an instance.",
+     "parameters": {
+      "instance": {
+       "type": "string",
+       "description": "Cloud SQL instance ID. This does not include the project ID.",
+       "required": true,
+       "location": "path"
+      },
+      "operation": {
+       "type": "string",
+       "description": "Instance operation ID.",
+       "required": true,
+       "location": "path"
+      },
+      "project": {
+       "type": "string",
+       "description": "Project ID of the project that contains the instance.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "instance",
+      "operation"
+     ],
+     "response": {
+      "$ref": "InstanceOperation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/sqlservice.admin"
+     ]
+    },
+    "list": {
+     "id": "sql.operations.list",
+     "path": "{project}/instances/{instance}/operations",
+     "httpMethod": "GET",
+     "description": "Lists all instance operations that have been performed on the given Cloud SQL instance in the reverse chronological order of the start time.",
+     "parameters": {
+      "instance": {
+       "type": "string",
+       "description": "Cloud SQL instance ID. This does not include the project ID.",
+       "required": true,
+       "location": "path"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "Maximum number of operations per response.",
+       "format": "uint32",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "A previously-returned page token representing part of the larger set of results to view.",
+       "location": "query"
+      },
+      "project": {
+       "type": "string",
+       "description": "Project ID of the project that contains the instance.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "instance"
+     ],
+     "response": {
+      "$ref": "OperationsListResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/sqlservice.admin"
+     ]
+    }
+   }
+  },
+  "sslCerts": {
+   "methods": {
+    "delete": {
+     "id": "sql.sslCerts.delete",
+     "path": "{project}/instances/{instance}/sslCerts/{sha1Fingerprint}",
+     "httpMethod": "DELETE",
+     "description": "Deletes the SSL certificate. The change will not take effect until the instance is restarted.",
+     "parameters": {
+      "instance": {
+       "type": "string",
+       "description": "Cloud SQL instance ID. This does not include the project ID.",
+       "required": true,
+       "location": "path"
+      },
+      "project": {
+       "type": "string",
+       "description": "Project ID of the project that contains the instance to be deleted.",
+       "required": true,
+       "location": "path"
+      },
+      "sha1Fingerprint": {
+       "type": "string",
+       "description": "Sha1 FingerPrint.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "instance",
+      "sha1Fingerprint"
+     ],
+     "response": {
+      "$ref": "SslCertsDeleteResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/sqlservice.admin"
+     ]
+    },
+    "get": {
+     "id": "sql.sslCerts.get",
+     "path": "{project}/instances/{instance}/sslCerts/{sha1Fingerprint}",
+     "httpMethod": "GET",
+     "description": "Retrieves a particular SSL certificate. Does not include the private key (required for usage). The private key must be saved from the response to initial creation.",
+     "parameters": {
+      "instance": {
+       "type": "string",
+       "description": "Cloud SQL instance ID. This does not include the project ID.",
+       "required": true,
+       "location": "path"
+      },
+      "project": {
+       "type": "string",
+       "description": "Project ID of the project that contains the instance.",
+       "required": true,
+       "location": "path"
+      },
+      "sha1Fingerprint": {
+       "type": "string",
+       "description": "Sha1 FingerPrint.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "instance",
+      "sha1Fingerprint"
+     ],
+     "response": {
+      "$ref": "SslCert"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/sqlservice.admin"
+     ]
+    },
+    "insert": {
+     "id": "sql.sslCerts.insert",
+     "path": "{project}/instances/{instance}/sslCerts",
+     "httpMethod": "POST",
+     "description": "Creates an SSL certificate and returns it along with the private key and server certificate authority. The new certificate will not be usable until the instance is restarted.",
+     "parameters": {
+      "instance": {
+       "type": "string",
+       "description": "Cloud SQL instance ID. This does not include the project ID.",
+       "required": true,
+       "location": "path"
+      },
+      "project": {
+       "type": "string",
+       "description": "Project ID of the project to which the newly created Cloud SQL instances should belong.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "instance"
+     ],
+     "request": {
+      "$ref": "SslCertsInsertRequest"
+     },
+     "response": {
+      "$ref": "SslCertsInsertResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/sqlservice.admin"
+     ]
+    },
+    "list": {
+     "id": "sql.sslCerts.list",
+     "path": "{project}/instances/{instance}/sslCerts",
+     "httpMethod": "GET",
+     "description": "Lists all of the current SSL certificates for the 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": "Project ID of the project for which to list Cloud SQL instances.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "instance"
+     ],
+     "response": {
+      "$ref": "SslCertsListResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/sqlservice.admin"
+     ]
+    }
+   }
+  },
+  "tiers": {
+   "methods": {
+    "list": {
+     "id": "sql.tiers.list",
+     "path": "{project}/tiers",
+     "httpMethod": "GET",
+     "description": "Lists all available service tiers for Google Cloud SQL, for example D1, D2. For related information, see Pricing.",
+     "parameters": {
+      "project": {
+       "type": "string",
+       "description": "Project ID of the project for which to list tiers.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project"
+     ],
+     "response": {
+      "$ref": "TiersListResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/sqlservice.admin"
+     ]
+    }
+   }
+  }
+ }
+}
diff --git a/sqladmin/v1beta3/sqladmin-gen.go b/sqladmin/v1beta3/sqladmin-gen.go
new file mode 100644
index 0000000..e8016cc
--- /dev/null
+++ b/sqladmin/v1beta3/sqladmin-gen.go
@@ -0,0 +1,2464 @@
+// Package sqladmin provides access to the Cloud SQL Administration API.
+//
+// See https://developers.google.com/cloud-sql/docs/admin-api/
+//
+// Usage example:
+//
+//   import "code.google.com/p/google-api-go-client/sqladmin/v1beta3"
+//   ...
+//   sqladminService, err := sqladmin.New(oauthHttpClient)
+package sqladmin
+
+import (
+	"bytes"
+	"code.google.com/p/google-api-go-client/googleapi"
+	"encoding/json"
+	"errors"
+	"fmt"
+	"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
+
+const apiId = "sqladmin:v1beta3"
+const apiName = "sqladmin"
+const apiVersion = "v1beta3"
+const basePath = "https://www.googleapis.com/sql/v1beta3/projects/"
+
+// 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"
+
+	// Manage your Google SQL Service instances
+	SqlserviceAdminScope = "https://www.googleapis.com/auth/sqlservice.admin"
+)
+
+func New(client *http.Client) (*Service, error) {
+	if client == nil {
+		return nil, errors.New("client is nil")
+	}
+	s := &Service{client: client}
+	s.BackupRuns = NewBackupRunsService(s)
+	s.Instances = NewInstancesService(s)
+	s.Operations = NewOperationsService(s)
+	s.SslCerts = NewSslCertsService(s)
+	s.Tiers = NewTiersService(s)
+	return s, nil
+}
+
+type Service struct {
+	client *http.Client
+
+	BackupRuns *BackupRunsService
+
+	Instances *InstancesService
+
+	Operations *OperationsService
+
+	SslCerts *SslCertsService
+
+	Tiers *TiersService
+}
+
+func NewBackupRunsService(s *Service) *BackupRunsService {
+	rs := &BackupRunsService{s: s}
+	return rs
+}
+
+type BackupRunsService struct {
+	s *Service
+}
+
+func NewInstancesService(s *Service) *InstancesService {
+	rs := &InstancesService{s: s}
+	return rs
+}
+
+type InstancesService struct {
+	s *Service
+}
+
+func NewOperationsService(s *Service) *OperationsService {
+	rs := &OperationsService{s: s}
+	return rs
+}
+
+type OperationsService struct {
+	s *Service
+}
+
+func NewSslCertsService(s *Service) *SslCertsService {
+	rs := &SslCertsService{s: s}
+	return rs
+}
+
+type SslCertsService struct {
+	s *Service
+}
+
+func NewTiersService(s *Service) *TiersService {
+	rs := &TiersService{s: s}
+	return rs
+}
+
+type TiersService struct {
+	s *Service
+}
+
+type BackupConfiguration struct {
+	// BinaryLogEnabled: Whether binary log is enabled. If backup
+	// configuration is disabled, binary log must be disabled as well.
+	BinaryLogEnabled bool `json:"binaryLogEnabled,omitempty"`
+
+	// Enabled: Whether this configuration is enabled.
+	Enabled bool `json:"enabled,omitempty"`
+
+	// Id: Identifier for this configuration. This gets generated
+	// automatically when a backup configuration is created.
+	Id string `json:"id,omitempty"`
+
+	// Kind: This is always sql#backupConfiguration.
+	Kind string `json:"kind,omitempty"`
+
+	// StartTime: Start time for the daily backup configuration in UTC
+	// timezone in the 24 hour format - HH:MM.
+	StartTime string `json:"startTime,omitempty"`
+}
+
+type BackupRun struct {
+	// BackupConfiguration: Backup Configuration identifier.
+	BackupConfiguration string `json:"backupConfiguration,omitempty"`
+
+	// DueTime: The due time of this run in UTC timezone in RFC 3339 format,
+	// for example 2012-11-15T16:19:00.094Z.
+	DueTime string `json:"dueTime,omitempty"`
+
+	// EndTime: The time the backup operation completed in UTC timezone in
+	// RFC 3339 format, for example 2012-11-15T16:19:00.094Z.
+	EndTime string `json:"endTime,omitempty"`
+
+	// EnqueuedTime: The time the run was enqueued in UTC timezone in RFC
+	// 3339 format, for example 2012-11-15T16:19:00.094Z.
+	EnqueuedTime string `json:"enqueuedTime,omitempty"`
+
+	// Error: Information about why the backup operation failed. This is
+	// only present if the run has the FAILED status.
+	Error *OperationError `json:"error,omitempty"`
+
+	// Instance: Name of the database instance.
+	Instance string `json:"instance,omitempty"`
+
+	// Kind: This is always sql#backupRun.
+	Kind string `json:"kind,omitempty"`
+
+	// StartTime: The time the backup operation actually started in UTC
+	// timezone in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.
+	StartTime string `json:"startTime,omitempty"`
+
+	// Status: The status of this run.
+	Status string `json:"status,omitempty"`
+}
+
+type BackupRunsListResponse struct {
+	// Items: A list of backup runs in reverse chronological order of the
+	// enqueued time.
+	Items []*BackupRun `json:"items,omitempty"`
+
+	// Kind: This is always sql#backupRunsList.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: The continuation token, used to page through large
+	// result sets. Provide this value in a subsequent request to return the
+	// next page of results.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+}
+
+type DatabaseInstance struct {
+	// CurrentDiskSize: The current disk usage of the instance in bytes.
+	CurrentDiskSize int64 `json:"currentDiskSize,omitempty,string"`
+
+	// DatabaseVersion: The database engine type and version, for example
+	// MYSQL_5_5 for MySQL 5.5.
+	DatabaseVersion string `json:"databaseVersion,omitempty"`
+
+	// Etag: HTTP 1.1 Entity tag for the resource.
+	Etag string `json:"etag,omitempty"`
+
+	// Instance: Name of the Cloud SQL instance. This does not include the
+	// project ID.
+	Instance string `json:"instance,omitempty"`
+
+	// IpAddresses: The assigned IP addresses for the instance.
+	IpAddresses []*IpMapping `json:"ipAddresses,omitempty"`
+
+	// Kind: This is always sql#instance.
+	Kind string `json:"kind,omitempty"`
+
+	// MaxDiskSize: The maximum disk size of the instance in bytes.
+	MaxDiskSize int64 `json:"maxDiskSize,omitempty,string"`
+
+	// Project: The project ID of the project containing the Cloud SQL
+	// instance. The Google apps domain is prefixed if applicable.
+	Project string `json:"project,omitempty"`
+
+	// Region: The geographical region. Can be us-east1, us-central or
+	// europe-west1. Defaults to us-central. The region can not be changed
+	// after instance creation.
+	Region string `json:"region,omitempty"`
+
+	// ServerCaCert: SSL configuration.
+	ServerCaCert *SslCert `json:"serverCaCert,omitempty"`
+
+	// Settings: The user settings.
+	Settings *Settings `json:"settings,omitempty"`
+
+	// State: The current serving state of the Cloud SQL instance. This can
+	// be one of the following.
+	// RUNNABLE: The instance is running, or is
+	// ready to run when accessed.
+	// SUSPENDED: The instance is not available,
+	// for example due to problems with billing.
+	// PENDING_CREATE: The
+	// instance is being created.
+	// MAINTENANCE: The instance is down for
+	// maintenance.
+	// UNKNOWN_STATE: The state of the instance is unknown.
+	State string `json:"state,omitempty"`
+}
+
+type ExportContext struct {
+	// Database: Databases (for example, guestbook) from which the export is
+	// made. If unspecified, all databases are exported.
+	Database []string `json:"database,omitempty"`
+
+	// Kind: This is always sql#exportContext.
+	Kind string `json:"kind,omitempty"`
+
+	// Table: Tables to export, or that were exported, from the specified
+	// database. If you specify tables, specify one and only one database.
+	Table []string `json:"table,omitempty"`
+
+	// Uri: The path to the file in Google Cloud Storage where the export
+	// will be stored, or where it was already stored. The URI is in the
+	// form gs://bucketName/fileName. If the file already exists, the
+	// operation fails. If the filename ends with .gz, the contents are
+	// compressed.
+	Uri string `json:"uri,omitempty"`
+}
+
+type ImportContext struct {
+	// Database: The database (for example, guestbook) to which the import
+	// is made. If not set, it is assumed that the database is specified in
+	// the file to be imported.
+	Database string `json:"database,omitempty"`
+
+	// Kind: This is always sql#importContext.
+	Kind string `json:"kind,omitempty"`
+
+	// Uri: A path to the MySQL dump file in Google Cloud Storage from which
+	// the import is made. The URI is in the form gs://bucketName/fileName.
+	// Compressed gzip files (.gz) are also supported.
+	Uri []string `json:"uri,omitempty"`
+}
+
+type InstanceOperation struct {
+	// EndTime: The time this operation finished in UTC timezone in RFC 3339
+	// format, for example 2012-11-15T16:19:00.094Z.
+	EndTime string `json:"endTime,omitempty"`
+
+	// EnqueuedTime: The time this operation was enqueued in UTC timezone in
+	// RFC 3339 format, for example 2012-11-15T16:19:00.094Z.
+	EnqueuedTime string `json:"enqueuedTime,omitempty"`
+
+	// Error: The error(s) encountered by this operation. Only set if the
+	// operation results in an error.
+	Error []*OperationError `json:"error,omitempty"`
+
+	// ExportContext: The context for export operation, if applicable.
+	ExportContext *ExportContext `json:"exportContext,omitempty"`
+
+	// ImportContext: The context for import operation, if applicable.
+	ImportContext *ImportContext `json:"importContext,omitempty"`
+
+	// Instance: Name of the database instance.
+	Instance string `json:"instance,omitempty"`
+
+	// Kind: This is always sql#instanceOperation.
+	Kind string `json:"kind,omitempty"`
+
+	// Operation: An identifier that uniquely identifies the operation. You
+	// can use this identifier to retrieve the Operations resource that has
+	// information about the operation.
+	Operation string `json:"operation,omitempty"`
+
+	// OperationType: The type of the operation. Valid values are CREATE,
+	// DELETE, UPDATE, RESTART, IMPORT, EXPORT, BACKUP_VOLUME,
+	// RESTORE_VOLUME.
+	OperationType string `json:"operationType,omitempty"`
+
+	// StartTime: The time this operation actually started in UTC timezone
+	// in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.
+	StartTime string `json:"startTime,omitempty"`
+
+	// State: The state of an operation. Valid values are PENDING, RUNNING,
+	// DONE, UNKNOWN.
+	State string `json:"state,omitempty"`
+
+	// UserEmailAddress: The email address of the user who initiated this
+	// operation.
+	UserEmailAddress string `json:"userEmailAddress,omitempty"`
+}
+
+type InstanceSetRootPasswordRequest struct {
+	// SetRootPasswordContext: Set Root Password Context.
+	SetRootPasswordContext *SetRootPasswordContext `json:"setRootPasswordContext,omitempty"`
+}
+
+type InstancesDeleteResponse struct {
+	// Kind: This is always sql#instancesDelete.
+	Kind string `json:"kind,omitempty"`
+
+	// Operation: An identifier that uniquely identifies the operation. You
+	// can use this identifier to retrieve the Operations resource that has
+	// information about the operation.
+	Operation string `json:"operation,omitempty"`
+}
+
+type InstancesExportRequest struct {
+	// ExportContext: Contains details about the export operation.
+	ExportContext *ExportContext `json:"exportContext,omitempty"`
+}
+
+type InstancesExportResponse struct {
+	// Kind: This is always sql#instancesExport.
+	Kind string `json:"kind,omitempty"`
+
+	// Operation: An identifier that uniquely identifies the operation. You
+	// can use this identifier to retrieve the Operations resource that has
+	// information about the operation.
+	Operation string `json:"operation,omitempty"`
+}
+
+type InstancesImportRequest struct {
+	// ImportContext: Contains details about the import operation.
+	ImportContext *ImportContext `json:"importContext,omitempty"`
+}
+
+type InstancesImportResponse struct {
+	// Kind: This is always sql#instancesImport.
+	Kind string `json:"kind,omitempty"`
+
+	// Operation: An identifier that uniquely identifies the operation. You
+	// can use this identifier to retrieve the Operations resource that has
+	// information about the operation.
+	Operation string `json:"operation,omitempty"`
+}
+
+type InstancesInsertResponse struct {
+	// Kind: This is always sql#instancesInsert.
+	Kind string `json:"kind,omitempty"`
+
+	// Operation: An identifier that uniquely identifies the operation. You
+	// can use this identifier to retrieve the Operations resource that has
+	// information about the operation.
+	Operation string `json:"operation,omitempty"`
+}
+
+type InstancesListResponse struct {
+	// Items: List of database instance resources.
+	Items []*DatabaseInstance `json:"items,omitempty"`
+
+	// Kind: This is always sql#instancesList.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: The continuation token, used to page through large
+	// result sets. Provide this value in a subsequent request to return the
+	// next page of results.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+}
+
+type InstancesResetSslConfigResponse struct {
+	// Kind: This is always sql#instancesResetSslConfig.
+	Kind string `json:"kind,omitempty"`
+
+	// Operation: An identifier that uniquely identifies the operation. You
+	// can use this identifier to retrieve the Operations resource that has
+	// information about the operation. All ssl client certificates will be
+	// deleted and a new server certificate will be created. Does not take
+	// effect until the next instance restart.
+	Operation string `json:"operation,omitempty"`
+}
+
+type InstancesRestartResponse struct {
+	// Kind: This is always sql#instancesRestart.
+	Kind string `json:"kind,omitempty"`
+
+	// Operation: An identifier that uniquely identifies the operation. You
+	// can use this identifier to retrieve the Operations resource that has
+	// information about the operation.
+	Operation string `json:"operation,omitempty"`
+}
+
+type InstancesRestoreBackupResponse struct {
+	// Kind: This is always sql#instancesRestoreBackup.
+	Kind string `json:"kind,omitempty"`
+
+	// Operation: An identifier that uniquely identifies the operation. You
+	// can use this identifier to retrieve the Operations resource that has
+	// information about the operation.
+	Operation string `json:"operation,omitempty"`
+}
+
+type InstancesSetRootPasswordResponse struct {
+	// Kind: This is always sql#instancesSetRootPasswird.
+	Kind string `json:"kind,omitempty"`
+
+	// Operation: An identifier that uniquely identifies the operation. You
+	// can use this identifier to retrieve the Operations resource that has
+	// information about the operation.
+	Operation string `json:"operation,omitempty"`
+}
+
+type InstancesUpdateResponse struct {
+	// Kind: This is always sql#instancesUpdate.
+	Kind string `json:"kind,omitempty"`
+
+	// Operation: An identifier that uniquely identifies the operation. You
+	// can use this identifier to retrieve information about the operation.
+	Operation string `json:"operation,omitempty"`
+}
+
+type IpConfiguration struct {
+	// AuthorizedNetworks: The list of external networks that are allowed to
+	// connect to the instance using the IP. In CIDR notation, also known as
+	// 'slash' notation (e.g. 192.168.100.0/24).
+	AuthorizedNetworks []string `json:"authorizedNetworks,omitempty"`
+
+	// Enabled: Whether the instance should be assigned an IP address or
+	// not.
+	Enabled bool `json:"enabled,omitempty"`
+
+	// RequireSsl: Whether the mysqld should default to 'REQUIRE X509' for
+	// users connecting over IP.
+	RequireSsl bool `json:"requireSsl,omitempty"`
+}
+
+type IpMapping struct {
+	// IpAddress: The IP address assigned.
+	IpAddress string `json:"ipAddress,omitempty"`
+
+	// TimeToRetire: The due time for this IP to be retired in RFC 3339
+	// format, for example 2012-11-15T16:19:00.094Z. This field is only
+	// available when the IP is scheduled to be retired.
+	TimeToRetire string `json:"timeToRetire,omitempty"`
+}
+
+type LocationPreference struct {
+	// FollowGaeApplication: The AppEngine application to follow, it must be
+	// in the same region as the Cloud SQL instance.
+	FollowGaeApplication string `json:"followGaeApplication,omitempty"`
+
+	// Kind: This is always sql#locationPreference.
+	Kind string `json:"kind,omitempty"`
+
+	// Zone: The preferred Compute Engine zone (e.g. us-centra1-a,
+	// us-central1-b, etc.).
+	Zone string `json:"zone,omitempty"`
+}
+
+type OperationError struct {
+	// Code: Identifies the specific error that occurred.
+	Code string `json:"code,omitempty"`
+
+	// Kind: This is always sql#operationError.
+	Kind string `json:"kind,omitempty"`
+}
+
+type OperationsListResponse struct {
+	// Items: List of operation resources.
+	Items []*InstanceOperation `json:"items,omitempty"`
+
+	// Kind: This is always sql#operationsList.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: The continuation token, used to page through large
+	// result sets. Provide this value in a subsequent request to return the
+	// next page of results.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+}
+
+type SetRootPasswordContext struct {
+	// Kind: This is always sql#setRootUserContext.
+	Kind string `json:"kind,omitempty"`
+
+	// Password: The password for the root user.
+	Password string `json:"password,omitempty"`
+}
+
+type Settings struct {
+	// ActivationPolicy: The activation policy for this instance. This
+	// specifies when the instance should be activated and is applicable
+	// only when the instance state is RUNNABLE. This can be one of the
+	// following.
+	// ALWAYS: The instance should always be active.
+	// NEVER: The
+	// instance should never be activated.
+	// ON_DEMAND: The instance is
+	// activated upon receiving requests.
+	ActivationPolicy string `json:"activationPolicy,omitempty"`
+
+	// AuthorizedGaeApplications: The AppEngine app ids that can access this
+	// instance.
+	AuthorizedGaeApplications []string `json:"authorizedGaeApplications,omitempty"`
+
+	// BackupConfiguration: The daily backup configuration for the instance.
+	BackupConfiguration []*BackupConfiguration `json:"backupConfiguration,omitempty"`
+
+	// IpConfiguration: The settings for IP Management. This allows to
+	// enable or disable the instance IP and manage which external networks
+	// can connect to the instance.
+	IpConfiguration *IpConfiguration `json:"ipConfiguration,omitempty"`
+
+	// Kind: This is always sql#settings.
+	Kind string `json:"kind,omitempty"`
+
+	// LocationPreference: The location preference settings. This allows the
+	// instance to be located as near as possible to either an AppEngine app
+	// or GCE zone for better perfomance.
+	LocationPreference *LocationPreference `json:"locationPreference,omitempty"`
+
+	// PricingPlan: The pricing plan for this instance. This can be either
+	// PER_USE or PACKAGE.
+	PricingPlan string `json:"pricingPlan,omitempty"`
+
+	// ReplicationType: The type of replication this instance uses. This can
+	// be either ASYNCHRONOUS or SYNCHRONOUS.
+	ReplicationType string `json:"replicationType,omitempty"`
+
+	// SettingsVersion: The version of instance settings. This is a required
+	// field for update method to make sure concurrent updates are handled
+	// properly. During update, use the most recent settingsVersion value
+	// for this instance and do not try to update this value.
+	SettingsVersion int64 `json:"settingsVersion,omitempty,string"`
+
+	// Tier: The tier of service for this instance, for example D1, D2. For
+	// more information, see pricing.
+	Tier string `json:"tier,omitempty"`
+}
+
+type SslCert struct {
+	// Cert: PEM representation.
+	Cert string `json:"cert,omitempty"`
+
+	// CertSerialNumber: Serial number, as extracted from the certificate.
+	CertSerialNumber string `json:"certSerialNumber,omitempty"`
+
+	// CommonName: User supplied name. Constrained to [a-zA-Z.-_ ]+.
+	CommonName string `json:"commonName,omitempty"`
+
+	// CreateTime: Time when the certificate was created.
+	CreateTime string `json:"createTime,omitempty"`
+
+	ExpirationTime string `json:"expirationTime,omitempty"`
+
+	// Instance: Name of the database instance.
+	Instance string `json:"instance,omitempty"`
+
+	// Kind: This is always sql#sslCert.
+	Kind string `json:"kind,omitempty"`
+
+	// Sha1Fingerprint: Sha1 Fingerprint.
+	Sha1Fingerprint string `json:"sha1Fingerprint,omitempty"`
+}
+
+type SslCertDetail struct {
+	// CertInfo: The public information about the cert.
+	CertInfo *SslCert `json:"certInfo,omitempty"`
+
+	// CertPrivateKey: The private key for the client cert, in pem format.
+	// Keep private in order to protect your security.
+	CertPrivateKey string `json:"certPrivateKey,omitempty"`
+}
+
+type SslCertsDeleteResponse struct {
+	// Kind: This is always sql#sslCertsDelete.
+	Kind string `json:"kind,omitempty"`
+
+	// Operation: An identifier that uniquely identifies the operation. You
+	// can use this identifier to retrieve the Operations resource that has
+	// information about the operation.
+	Operation string `json:"operation,omitempty"`
+}
+
+type SslCertsInsertRequest struct {
+	// CommonName: User supplied name. Must be a distinct name from the
+	// other certificates for this instance. New certificates will not be
+	// usable until the instance is restarted.
+	CommonName string `json:"commonName,omitempty"`
+}
+
+type SslCertsInsertResponse struct {
+	// ClientCert: The new client certificate and private key. The new
+	// certificate will not work until the instance is restarted.
+	ClientCert *SslCertDetail `json:"clientCert,omitempty"`
+
+	// Kind: This is always sql#sslCertsInsert.
+	Kind string `json:"kind,omitempty"`
+
+	// ServerCaCert: The server Certificate Authority's certificate. If this
+	// is missing you can force a new one to be generated by calling
+	// resetSslConfig method on instances resource..
+	ServerCaCert *SslCert `json:"serverCaCert,omitempty"`
+}
+
+type SslCertsListResponse struct {
+	// Items: List of client certificates for the instance.
+	Items []*SslCert `json:"items,omitempty"`
+
+	// Kind: This is always sql#sslCertsList.
+	Kind string `json:"kind,omitempty"`
+}
+
+type Tier struct {
+	// DiskQuota: The maximum disk size of this tier in bytes.
+	DiskQuota int64 `json:"DiskQuota,omitempty,string"`
+
+	// RAM: The maximum RAM usage of this tier in bytes.
+	RAM int64 `json:"RAM,omitempty,string"`
+
+	// Kind: This is always sql#tier.
+	Kind string `json:"kind,omitempty"`
+
+	// Region: The applicable regions for this tier. Can be us-east1 and
+	// europe-west1.
+	Region []string `json:"region,omitempty"`
+
+	// Tier: An identifier for the service tier, for example D1, D2 etc. For
+	// related information, see Pricing.
+	Tier string `json:"tier,omitempty"`
+}
+
+type TiersListResponse struct {
+	// Items: List of tiers.
+	Items []*Tier `json:"items,omitempty"`
+
+	// Kind: This is always sql#tiersList.
+	Kind string `json:"kind,omitempty"`
+}
+
+// method id "sql.backupRuns.get":
+
+type BackupRunsGetCall struct {
+	s                   *Service
+	project             string
+	instance            string
+	backupConfiguration string
+	dueTime             string
+	opt_                map[string]interface{}
+}
+
+// Get: Retrieves a resource containing information about a backup run.
+func (r *BackupRunsService) Get(project string, instance string, backupConfiguration string, dueTime string) *BackupRunsGetCall {
+	c := &BackupRunsGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.instance = instance
+	c.backupConfiguration = backupConfiguration
+	c.dueTime = dueTime
+	return c
+}
+
+func (c *BackupRunsGetCall) Do() (*BackupRun, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	params.Set("dueTime", fmt.Sprintf("%v", c.dueTime))
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/sql/v1beta3/projects/", "{project}/instances/{instance}/backupRuns/{backupConfiguration}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{backupConfiguration}", url.QueryEscape(c.backupConfiguration), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(BackupRun)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves a resource containing information about a backup run.",
+	//   "httpMethod": "GET",
+	//   "id": "sql.backupRuns.get",
+	//   "parameterOrder": [
+	//     "project",
+	//     "instance",
+	//     "backupConfiguration",
+	//     "dueTime"
+	//   ],
+	//   "parameters": {
+	//     "backupConfiguration": {
+	//       "description": "Identifier for the backup configuration. This gets generated automatically when a backup configuration is created.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "dueTime": {
+	//       "description": "The time when this run is due to start in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.",
+	//       "location": "query",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "instance": {
+	//       "description": "Cloud SQL instance ID. This does not include the project ID.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "project": {
+	//       "description": "Project ID of the project that contains the instance.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/instances/{instance}/backupRuns/{backupConfiguration}",
+	//   "response": {
+	//     "$ref": "BackupRun"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/sqlservice.admin"
+	//   ]
+	// }
+
+}
+
+// method id "sql.backupRuns.list":
+
+type BackupRunsListCall struct {
+	s                   *Service
+	project             string
+	instance            string
+	backupConfiguration string
+	opt_                map[string]interface{}
+}
+
+// List: Lists all backup runs associated with a given instance and
+// configuration in the reverse chronological order of the enqueued
+// time.
+func (r *BackupRunsService) List(project string, instance string, backupConfiguration string) *BackupRunsListCall {
+	c := &BackupRunsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.instance = instance
+	c.backupConfiguration = backupConfiguration
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": Maximum number
+// of backup runs per response.
+func (c *BackupRunsListCall) MaxResults(maxResults int64) *BackupRunsListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": A
+// previously-returned page token representing part of the larger set of
+// results to view.
+func (c *BackupRunsListCall) PageToken(pageToken string) *BackupRunsListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *BackupRunsListCall) Do() (*BackupRunsListResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	params.Set("backupConfiguration", fmt.Sprintf("%v", c.backupConfiguration))
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/sql/v1beta3/projects/", "{project}/instances/{instance}/backupRuns")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(BackupRunsListResponse)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists all backup runs associated with a given instance and configuration in the reverse chronological order of the enqueued time.",
+	//   "httpMethod": "GET",
+	//   "id": "sql.backupRuns.list",
+	//   "parameterOrder": [
+	//     "project",
+	//     "instance",
+	//     "backupConfiguration"
+	//   ],
+	//   "parameters": {
+	//     "backupConfiguration": {
+	//       "description": "Identifier for the backup configuration. This gets generated automatically when a backup configuration is created.",
+	//       "location": "query",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "instance": {
+	//       "description": "Cloud SQL instance ID. This does not include the project ID.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "description": "Maximum number of backup runs per response.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "A previously-returned page token representing part of the larger set of results to view.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "project": {
+	//       "description": "Project ID of the project that contains the instance.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/instances/{instance}/backupRuns",
+	//   "response": {
+	//     "$ref": "BackupRunsListResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/sqlservice.admin"
+	//   ]
+	// }
+
+}
+
+// method id "sql.instances.delete":
+
+type InstancesDeleteCall struct {
+	s        *Service
+	project  string
+	instance string
+	opt_     map[string]interface{}
+}
+
+// Delete: Deletes a Cloud SQL instance.
+func (r *InstancesService) Delete(project string, instance string) *InstancesDeleteCall {
+	c := &InstancesDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.instance = instance
+	return c
+}
+
+func (c *InstancesDeleteCall) Do() (*InstancesDeleteResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/sql/v1beta3/projects/", "{project}/instances/{instance}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(InstancesDeleteResponse)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Deletes a Cloud SQL instance.",
+	//   "httpMethod": "DELETE",
+	//   "id": "sql.instances.delete",
+	//   "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": "Project ID of the project that contains the instance to be deleted.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/instances/{instance}",
+	//   "response": {
+	//     "$ref": "InstancesDeleteResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/sqlservice.admin"
+	//   ]
+	// }
+
+}
+
+// method id "sql.instances.export":
+
+type InstancesExportCall struct {
+	s                      *Service
+	project                string
+	instance               string
+	instancesexportrequest *InstancesExportRequest
+	opt_                   map[string]interface{}
+}
+
+// Export: Exports data from a Cloud SQL instance to a Google Cloud
+// Storage bucket as a MySQL dump file.
+func (r *InstancesService) Export(project string, instance string, instancesexportrequest *InstancesExportRequest) *InstancesExportCall {
+	c := &InstancesExportCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.instance = instance
+	c.instancesexportrequest = instancesexportrequest
+	return c
+}
+
+func (c *InstancesExportCall) Do() (*InstancesExportResponse, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancesexportrequest)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/sql/v1beta3/projects/", "{project}/instances/{instance}/export")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(InstancesExportResponse)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Exports data from a Cloud SQL instance to a Google Cloud Storage bucket as a MySQL dump file.",
+	//   "httpMethod": "POST",
+	//   "id": "sql.instances.export",
+	//   "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": "Project ID of the project that contains the instance to be exported.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/instances/{instance}/export",
+	//   "request": {
+	//     "$ref": "InstancesExportRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "InstancesExportResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "sql.instances.get":
+
+type InstancesGetCall struct {
+	s        *Service
+	project  string
+	instance string
+	opt_     map[string]interface{}
+}
+
+// Get: Retrieves a resource containing information about a Cloud SQL
+// instance.
+func (r *InstancesService) Get(project string, instance string) *InstancesGetCall {
+	c := &InstancesGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.instance = instance
+	return c
+}
+
+func (c *InstancesGetCall) Do() (*DatabaseInstance, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/sql/v1beta3/projects/", "{project}/instances/{instance}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(DatabaseInstance)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves a resource containing information about a Cloud SQL instance.",
+	//   "httpMethod": "GET",
+	//   "id": "sql.instances.get",
+	//   "parameterOrder": [
+	//     "project",
+	//     "instance"
+	//   ],
+	//   "parameters": {
+	//     "instance": {
+	//       "description": "Database instance ID. This does not include the project ID.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "project": {
+	//       "description": "Project ID of the project that contains the instance.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/instances/{instance}",
+	//   "response": {
+	//     "$ref": "DatabaseInstance"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/sqlservice.admin"
+	//   ]
+	// }
+
+}
+
+// method id "sql.instances.import":
+
+type InstancesImportCall struct {
+	s                      *Service
+	project                string
+	instance               string
+	instancesimportrequest *InstancesImportRequest
+	opt_                   map[string]interface{}
+}
+
+// Import: Imports data into a Cloud SQL instance from a MySQL dump file
+// in Google Cloud Storage.
+func (r *InstancesService) Import(project string, instance string, instancesimportrequest *InstancesImportRequest) *InstancesImportCall {
+	c := &InstancesImportCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.instance = instance
+	c.instancesimportrequest = instancesimportrequest
+	return c
+}
+
+func (c *InstancesImportCall) Do() (*InstancesImportResponse, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancesimportrequest)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/sql/v1beta3/projects/", "{project}/instances/{instance}/import")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(InstancesImportResponse)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Imports data into a Cloud SQL instance from a MySQL dump file in Google Cloud Storage.",
+	//   "httpMethod": "POST",
+	//   "id": "sql.instances.import",
+	//   "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": "Project ID of the project that contains the instance.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/instances/{instance}/import",
+	//   "request": {
+	//     "$ref": "InstancesImportRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "InstancesImportResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "sql.instances.insert":
+
+type InstancesInsertCall struct {
+	s                *Service
+	project          string
+	databaseinstance *DatabaseInstance
+	opt_             map[string]interface{}
+}
+
+// Insert: Creates a new Cloud SQL instance.
+func (r *InstancesService) Insert(project string, databaseinstance *DatabaseInstance) *InstancesInsertCall {
+	c := &InstancesInsertCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.databaseinstance = databaseinstance
+	return c
+}
+
+func (c *InstancesInsertCall) Do() (*InstancesInsertResponse, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.databaseinstance)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/sql/v1beta3/projects/", "{project}/instances")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(InstancesInsertResponse)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Creates a new Cloud SQL instance.",
+	//   "httpMethod": "POST",
+	//   "id": "sql.instances.insert",
+	//   "parameterOrder": [
+	//     "project"
+	//   ],
+	//   "parameters": {
+	//     "project": {
+	//       "description": "Project ID of the project to which the newly created Cloud SQL instances should belong.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/instances",
+	//   "request": {
+	//     "$ref": "DatabaseInstance"
+	//   },
+	//   "response": {
+	//     "$ref": "InstancesInsertResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/sqlservice.admin"
+	//   ]
+	// }
+
+}
+
+// method id "sql.instances.list":
+
+type InstancesListCall struct {
+	s       *Service
+	project string
+	opt_    map[string]interface{}
+}
+
+// List: Lists instances under a given project in the alphabetical order
+// of the instance name.
+func (r *InstancesService) List(project string) *InstancesListCall {
+	c := &InstancesListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of results to return per response.
+func (c *InstancesListCall) MaxResults(maxResults int64) *InstancesListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": A
+// previously-returned page token representing part of the larger set of
+// results to view.
+func (c *InstancesListCall) PageToken(pageToken string) *InstancesListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *InstancesListCall) Do() (*InstancesListResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/sql/v1beta3/projects/", "{project}/instances")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(InstancesListResponse)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists instances under a given project in the alphabetical order of the instance name.",
+	//   "httpMethod": "GET",
+	//   "id": "sql.instances.list",
+	//   "parameterOrder": [
+	//     "project"
+	//   ],
+	//   "parameters": {
+	//     "maxResults": {
+	//       "description": "The maximum number of results to return per response.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "A previously-returned page token representing part of the larger set of results to view.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "project": {
+	//       "description": "Project ID of the project for which to list Cloud SQL instances.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/instances",
+	//   "response": {
+	//     "$ref": "InstancesListResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/sqlservice.admin"
+	//   ]
+	// }
+
+}
+
+// method id "sql.instances.patch":
+
+type InstancesPatchCall struct {
+	s                *Service
+	project          string
+	instance         string
+	databaseinstance *DatabaseInstance
+	opt_             map[string]interface{}
+}
+
+// Patch: Updates settings of a Cloud SQL instance. Caution: This is not
+// a partial update, so you must include values for all the settings
+// that you want to retain. For partial updates, use patch.. This method
+// supports patch semantics.
+func (r *InstancesService) Patch(project string, instance string, databaseinstance *DatabaseInstance) *InstancesPatchCall {
+	c := &InstancesPatchCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.instance = instance
+	c.databaseinstance = databaseinstance
+	return c
+}
+
+func (c *InstancesPatchCall) Do() (*InstancesUpdateResponse, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.databaseinstance)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/sql/v1beta3/projects/", "{project}/instances/{instance}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("PATCH", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(InstancesUpdateResponse)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates settings of a Cloud SQL instance. Caution: This is not a partial update, so you must include values for all the settings that you want to retain. For partial updates, use patch.. This method supports patch semantics.",
+	//   "httpMethod": "PATCH",
+	//   "id": "sql.instances.patch",
+	//   "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": "Project ID of the project that contains the instance.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/instances/{instance}",
+	//   "request": {
+	//     "$ref": "DatabaseInstance"
+	//   },
+	//   "response": {
+	//     "$ref": "InstancesUpdateResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/sqlservice.admin"
+	//   ]
+	// }
+
+}
+
+// method id "sql.instances.resetSslConfig":
+
+type InstancesResetSslConfigCall struct {
+	s        *Service
+	project  string
+	instance string
+	opt_     map[string]interface{}
+}
+
+// ResetSslConfig: Deletes all client certificates and generates a new
+// server SSL certificate for the instance. The changes will not take
+// effect until the instance is restarted. Existing instances without a
+// server certificate will need to call this once to set a server
+// certificate.
+func (r *InstancesService) ResetSslConfig(project string, instance string) *InstancesResetSslConfigCall {
+	c := &InstancesResetSslConfigCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.instance = instance
+	return c
+}
+
+func (c *InstancesResetSslConfigCall) Do() (*InstancesResetSslConfigResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/sql/v1beta3/projects/", "{project}/instances/{instance}/resetSslConfig")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(InstancesResetSslConfigResponse)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Deletes all client certificates and generates a new server SSL certificate for the instance. The changes will not take effect until the instance is restarted. Existing instances without a server certificate will need to call this once to set a server certificate.",
+	//   "httpMethod": "POST",
+	//   "id": "sql.instances.resetSslConfig",
+	//   "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": "Project ID of the project that contains the instance.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/instances/{instance}/resetSslConfig",
+	//   "response": {
+	//     "$ref": "InstancesResetSslConfigResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/sqlservice.admin"
+	//   ]
+	// }
+
+}
+
+// method id "sql.instances.restart":
+
+type InstancesRestartCall struct {
+	s        *Service
+	project  string
+	instance string
+	opt_     map[string]interface{}
+}
+
+// Restart: Restarts a Cloud SQL instance.
+func (r *InstancesService) Restart(project string, instance string) *InstancesRestartCall {
+	c := &InstancesRestartCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.instance = instance
+	return c
+}
+
+func (c *InstancesRestartCall) Do() (*InstancesRestartResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/sql/v1beta3/projects/", "{project}/instances/{instance}/restart")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(InstancesRestartResponse)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Restarts a Cloud SQL instance.",
+	//   "httpMethod": "POST",
+	//   "id": "sql.instances.restart",
+	//   "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": "Project ID of the project that contains the instance to be restarted.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/instances/{instance}/restart",
+	//   "response": {
+	//     "$ref": "InstancesRestartResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/sqlservice.admin"
+	//   ]
+	// }
+
+}
+
+// method id "sql.instances.restoreBackup":
+
+type InstancesRestoreBackupCall struct {
+	s                     *Service
+	project               string
+	instance              string
+	backupConfigurationid string
+	dueTime               string
+	opt_                  map[string]interface{}
+}
+
+// RestoreBackup: Restores a backup of a Cloud SQL instance.
+func (r *InstancesService) RestoreBackup(project string, instance string, backupConfigurationid string, dueTime string) *InstancesRestoreBackupCall {
+	c := &InstancesRestoreBackupCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.instance = instance
+	c.backupConfigurationid = backupConfigurationid
+	c.dueTime = dueTime
+	return c
+}
+
+func (c *InstancesRestoreBackupCall) Do() (*InstancesRestoreBackupResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	params.Set("backupConfiguration", fmt.Sprintf("%v", c.backupConfigurationid))
+	params.Set("dueTime", fmt.Sprintf("%v", c.dueTime))
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/sql/v1beta3/projects/", "{project}/instances/{instance}/restoreBackup")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(InstancesRestoreBackupResponse)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Restores a backup of a Cloud SQL instance.",
+	//   "httpMethod": "POST",
+	//   "id": "sql.instances.restoreBackup",
+	//   "parameterOrder": [
+	//     "project",
+	//     "instance",
+	//     "backupConfiguration",
+	//     "dueTime"
+	//   ],
+	//   "parameters": {
+	//     "backupConfiguration": {
+	//       "description": "The identifier of the backup configuration. This gets generated automatically when a backup configuration is created.",
+	//       "location": "query",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "dueTime": {
+	//       "description": "The time when this run is due to start in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.",
+	//       "location": "query",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "instance": {
+	//       "description": "Cloud SQL instance ID. This does not include the project ID.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "project": {
+	//       "description": "Project ID of the project that contains the instance.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/instances/{instance}/restoreBackup",
+	//   "response": {
+	//     "$ref": "InstancesRestoreBackupResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/sqlservice.admin"
+	//   ]
+	// }
+
+}
+
+// method id "sql.instances.setRootPassword":
+
+type InstancesSetRootPasswordCall struct {
+	s                              *Service
+	project                        string
+	instance                       string
+	instancesetrootpasswordrequest *InstanceSetRootPasswordRequest
+	opt_                           map[string]interface{}
+}
+
+// SetRootPassword: Sets the password for the root user.
+func (r *InstancesService) SetRootPassword(project string, instance string, instancesetrootpasswordrequest *InstanceSetRootPasswordRequest) *InstancesSetRootPasswordCall {
+	c := &InstancesSetRootPasswordCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.instance = instance
+	c.instancesetrootpasswordrequest = instancesetrootpasswordrequest
+	return c
+}
+
+func (c *InstancesSetRootPasswordCall) Do() (*InstancesSetRootPasswordResponse, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancesetrootpasswordrequest)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/sql/v1beta3/projects/", "{project}/instances/{instance}/setRootPassword")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(InstancesSetRootPasswordResponse)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Sets the password for the root user.",
+	//   "httpMethod": "POST",
+	//   "id": "sql.instances.setRootPassword",
+	//   "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": "Project ID of the project that contains the instance.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/instances/{instance}/setRootPassword",
+	//   "request": {
+	//     "$ref": "InstanceSetRootPasswordRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "InstancesSetRootPasswordResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/sqlservice.admin"
+	//   ]
+	// }
+
+}
+
+// method id "sql.instances.update":
+
+type InstancesUpdateCall struct {
+	s                *Service
+	project          string
+	instance         string
+	databaseinstance *DatabaseInstance
+	opt_             map[string]interface{}
+}
+
+// Update: Updates settings of a Cloud SQL instance. Caution: This is
+// not a partial update, so you must include values for all the settings
+// that you want to retain. For partial updates, use patch.
+func (r *InstancesService) Update(project string, instance string, databaseinstance *DatabaseInstance) *InstancesUpdateCall {
+	c := &InstancesUpdateCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.instance = instance
+	c.databaseinstance = databaseinstance
+	return c
+}
+
+func (c *InstancesUpdateCall) Do() (*InstancesUpdateResponse, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.databaseinstance)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/sql/v1beta3/projects/", "{project}/instances/{instance}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("PUT", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(InstancesUpdateResponse)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates settings of a Cloud SQL instance. Caution: This is not a partial update, so you must include values for all the settings that you want to retain. For partial updates, use patch.",
+	//   "etagRequired": true,
+	//   "httpMethod": "PUT",
+	//   "id": "sql.instances.update",
+	//   "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": "Project ID of the project that contains the instance.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/instances/{instance}",
+	//   "request": {
+	//     "$ref": "DatabaseInstance"
+	//   },
+	//   "response": {
+	//     "$ref": "InstancesUpdateResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/sqlservice.admin"
+	//   ]
+	// }
+
+}
+
+// method id "sql.operations.get":
+
+type OperationsGetCall struct {
+	s         *Service
+	project   string
+	instance  string
+	operation string
+	opt_      map[string]interface{}
+}
+
+// Get: Retrieves an instance operation that has been performed on an
+// instance.
+func (r *OperationsService) Get(project string, instance string, operation string) *OperationsGetCall {
+	c := &OperationsGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.instance = instance
+	c.operation = operation
+	return c
+}
+
+func (c *OperationsGetCall) Do() (*InstanceOperation, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/sql/v1beta3/projects/", "{project}/instances/{instance}/operations/{operation}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{operation}", url.QueryEscape(c.operation), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(InstanceOperation)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves an instance operation that has been performed on an instance.",
+	//   "httpMethod": "GET",
+	//   "id": "sql.operations.get",
+	//   "parameterOrder": [
+	//     "project",
+	//     "instance",
+	//     "operation"
+	//   ],
+	//   "parameters": {
+	//     "instance": {
+	//       "description": "Cloud SQL instance ID. This does not include the project ID.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "operation": {
+	//       "description": "Instance operation ID.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "project": {
+	//       "description": "Project ID of the project that contains the instance.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/instances/{instance}/operations/{operation}",
+	//   "response": {
+	//     "$ref": "InstanceOperation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/sqlservice.admin"
+	//   ]
+	// }
+
+}
+
+// method id "sql.operations.list":
+
+type OperationsListCall struct {
+	s        *Service
+	project  string
+	instance string
+	opt_     map[string]interface{}
+}
+
+// List: Lists all instance operations that have been performed on the
+// given Cloud SQL instance in the reverse chronological order of the
+// start time.
+func (r *OperationsService) List(project string, instance string) *OperationsListCall {
+	c := &OperationsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.instance = instance
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": Maximum number
+// of operations per response.
+func (c *OperationsListCall) MaxResults(maxResults int64) *OperationsListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": A
+// previously-returned page token representing part of the larger set of
+// results to view.
+func (c *OperationsListCall) PageToken(pageToken string) *OperationsListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *OperationsListCall) Do() (*OperationsListResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	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))
+	}
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/sql/v1beta3/projects/", "{project}/instances/{instance}/operations")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(OperationsListResponse)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists all instance operations that have been performed on the given Cloud SQL instance in the reverse chronological order of the start time.",
+	//   "httpMethod": "GET",
+	//   "id": "sql.operations.list",
+	//   "parameterOrder": [
+	//     "project",
+	//     "instance"
+	//   ],
+	//   "parameters": {
+	//     "instance": {
+	//       "description": "Cloud SQL instance ID. This does not include the project ID.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "description": "Maximum number of operations per response.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "A previously-returned page token representing part of the larger set of results to view.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "project": {
+	//       "description": "Project ID of the project that contains the instance.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/instances/{instance}/operations",
+	//   "response": {
+	//     "$ref": "OperationsListResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/sqlservice.admin"
+	//   ]
+	// }
+
+}
+
+// method id "sql.sslCerts.delete":
+
+type SslCertsDeleteCall struct {
+	s               *Service
+	project         string
+	instance        string
+	sha1Fingerprint string
+	opt_            map[string]interface{}
+}
+
+// Delete: Deletes the SSL certificate. The change will not take effect
+// until the instance is restarted.
+func (r *SslCertsService) Delete(project string, instance string, sha1Fingerprint string) *SslCertsDeleteCall {
+	c := &SslCertsDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.instance = instance
+	c.sha1Fingerprint = sha1Fingerprint
+	return c
+}
+
+func (c *SslCertsDeleteCall) Do() (*SslCertsDeleteResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/sql/v1beta3/projects/", "{project}/instances/{instance}/sslCerts/{sha1Fingerprint}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{sha1Fingerprint}", url.QueryEscape(c.sha1Fingerprint), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(SslCertsDeleteResponse)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Deletes the SSL certificate. The change will not take effect until the instance is restarted.",
+	//   "httpMethod": "DELETE",
+	//   "id": "sql.sslCerts.delete",
+	//   "parameterOrder": [
+	//     "project",
+	//     "instance",
+	//     "sha1Fingerprint"
+	//   ],
+	//   "parameters": {
+	//     "instance": {
+	//       "description": "Cloud SQL instance ID. This does not include the project ID.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "project": {
+	//       "description": "Project ID of the project that contains the instance to be deleted.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "sha1Fingerprint": {
+	//       "description": "Sha1 FingerPrint.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/instances/{instance}/sslCerts/{sha1Fingerprint}",
+	//   "response": {
+	//     "$ref": "SslCertsDeleteResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/sqlservice.admin"
+	//   ]
+	// }
+
+}
+
+// method id "sql.sslCerts.get":
+
+type SslCertsGetCall struct {
+	s               *Service
+	project         string
+	instance        string
+	sha1Fingerprint string
+	opt_            map[string]interface{}
+}
+
+// Get: Retrieves a particular SSL certificate. Does not include the
+// private key (required for usage). The private key must be saved from
+// the response to initial creation.
+func (r *SslCertsService) Get(project string, instance string, sha1Fingerprint string) *SslCertsGetCall {
+	c := &SslCertsGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.instance = instance
+	c.sha1Fingerprint = sha1Fingerprint
+	return c
+}
+
+func (c *SslCertsGetCall) Do() (*SslCert, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/sql/v1beta3/projects/", "{project}/instances/{instance}/sslCerts/{sha1Fingerprint}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{sha1Fingerprint}", url.QueryEscape(c.sha1Fingerprint), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(SslCert)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves a particular SSL certificate. Does not include the private key (required for usage). The private key must be saved from the response to initial creation.",
+	//   "httpMethod": "GET",
+	//   "id": "sql.sslCerts.get",
+	//   "parameterOrder": [
+	//     "project",
+	//     "instance",
+	//     "sha1Fingerprint"
+	//   ],
+	//   "parameters": {
+	//     "instance": {
+	//       "description": "Cloud SQL instance ID. This does not include the project ID.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "project": {
+	//       "description": "Project ID of the project that contains the instance.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "sha1Fingerprint": {
+	//       "description": "Sha1 FingerPrint.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/instances/{instance}/sslCerts/{sha1Fingerprint}",
+	//   "response": {
+	//     "$ref": "SslCert"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/sqlservice.admin"
+	//   ]
+	// }
+
+}
+
+// method id "sql.sslCerts.insert":
+
+type SslCertsInsertCall struct {
+	s                     *Service
+	project               string
+	instance              string
+	sslcertsinsertrequest *SslCertsInsertRequest
+	opt_                  map[string]interface{}
+}
+
+// Insert: Creates an SSL certificate and returns it along with the
+// private key and server certificate authority. The new certificate
+// will not be usable until the instance is restarted.
+func (r *SslCertsService) Insert(project string, instance string, sslcertsinsertrequest *SslCertsInsertRequest) *SslCertsInsertCall {
+	c := &SslCertsInsertCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.instance = instance
+	c.sslcertsinsertrequest = sslcertsinsertrequest
+	return c
+}
+
+func (c *SslCertsInsertCall) Do() (*SslCertsInsertResponse, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.sslcertsinsertrequest)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/sql/v1beta3/projects/", "{project}/instances/{instance}/sslCerts")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("Content-Type", ctype)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(SslCertsInsertResponse)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Creates an SSL certificate and returns it along with the private key and server certificate authority. The new certificate will not be usable until the instance is restarted.",
+	//   "httpMethod": "POST",
+	//   "id": "sql.sslCerts.insert",
+	//   "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": "Project ID of the project to which the newly created Cloud SQL instances should belong.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/instances/{instance}/sslCerts",
+	//   "request": {
+	//     "$ref": "SslCertsInsertRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "SslCertsInsertResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/sqlservice.admin"
+	//   ]
+	// }
+
+}
+
+// method id "sql.sslCerts.list":
+
+type SslCertsListCall struct {
+	s        *Service
+	project  string
+	instance string
+	opt_     map[string]interface{}
+}
+
+// List: Lists all of the current SSL certificates for the instance.
+func (r *SslCertsService) List(project string, instance string) *SslCertsListCall {
+	c := &SslCertsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	c.instance = instance
+	return c
+}
+
+func (c *SslCertsListCall) Do() (*SslCertsListResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/sql/v1beta3/projects/", "{project}/instances/{instance}/sslCerts")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(SslCertsListResponse)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists all of the current SSL certificates for the instance.",
+	//   "httpMethod": "GET",
+	//   "id": "sql.sslCerts.list",
+	//   "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": "Project ID of the project for which to list Cloud SQL instances.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/instances/{instance}/sslCerts",
+	//   "response": {
+	//     "$ref": "SslCertsListResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/sqlservice.admin"
+	//   ]
+	// }
+
+}
+
+// method id "sql.tiers.list":
+
+type TiersListCall struct {
+	s       *Service
+	project string
+	opt_    map[string]interface{}
+}
+
+// List: Lists all available service tiers for Google Cloud SQL, for
+// example D1, D2. For related information, see Pricing.
+func (r *TiersService) List(project string) *TiersListCall {
+	c := &TiersListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.project = project
+	return c
+}
+
+func (c *TiersListCall) Do() (*TiersListResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative("https://www.googleapis.com/sql/v1beta3/projects/", "{project}/tiers")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1)
+	googleapi.SetOpaque(req.URL)
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer res.Body.Close()
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := new(TiersListResponse)
+	if err := json.NewDecoder(res.Body).Decode(ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists all available service tiers for Google Cloud SQL, for example D1, D2. For related information, see Pricing.",
+	//   "httpMethod": "GET",
+	//   "id": "sql.tiers.list",
+	//   "parameterOrder": [
+	//     "project"
+	//   ],
+	//   "parameters": {
+	//     "project": {
+	//       "description": "Project ID of the project for which to list tiers.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/tiers",
+	//   "response": {
+	//     "$ref": "TiersListResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/sqlservice.admin"
+	//   ]
+	// }
+
+}
diff --git a/storage/v1beta1/storage-api.json b/storage/v1beta1/storage-api.json
index a6a720f..3810a1f 100644
--- a/storage/v1beta1/storage-api.json
+++ b/storage/v1beta1/storage-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/kKXdL3Avm27TtiLuZmE30FPL3LY\"",
+ "etag": "\"qMhxoRFWKZK4K3KdZJuqms1o3fc/kKXdL3Avm27TtiLuZmE30FPL3LY\"",
  "discoveryVersion": "v1",
  "id": "storage:v1beta1",
  "name": "storage",
diff --git a/storage/v1beta2/storage-api.json b/storage/v1beta2/storage-api.json
index 2f1a699..38aa0f7 100644
--- a/storage/v1beta2/storage-api.json
+++ b/storage/v1beta2/storage-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/Y6_4vhFiXkgoLZDkwHAXc3CkOK0\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/Y6_4vhFiXkgoLZDkwHAXc3CkOK0\"",
  "discoveryVersion": "v1",
  "id": "storage:v1beta2",
  "name": "storage",
diff --git a/taskqueue/v1beta1/taskqueue-api.json b/taskqueue/v1beta1/taskqueue-api.json
index 499fb4e..1ba725d 100644
--- a/taskqueue/v1beta1/taskqueue-api.json
+++ b/taskqueue/v1beta1/taskqueue-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/fu8k3FukjBIEHIV-twy8lOq39to\"",
+ "etag": "\"qMhxoRFWKZK4K3KdZJuqms1o3fc/fu8k3FukjBIEHIV-twy8lOq39to\"",
  "discoveryVersion": "v1",
  "id": "taskqueue:v1beta1",
  "name": "taskqueue",
diff --git a/taskqueue/v1beta2/taskqueue-api.json b/taskqueue/v1beta2/taskqueue-api.json
index 37a5056..76516fe 100644
--- a/taskqueue/v1beta2/taskqueue-api.json
+++ b/taskqueue/v1beta2/taskqueue-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/5Hs2SYZ6tc8V9isLu4EuE8s9_qg\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/5Hs2SYZ6tc8V9isLu4EuE8s9_qg\"",
  "discoveryVersion": "v1",
  "id": "taskqueue:v1beta2",
  "name": "taskqueue",
diff --git a/tasks/v1/tasks-api.json b/tasks/v1/tasks-api.json
index bcdf42f..8bd5321 100644
--- a/tasks/v1/tasks-api.json
+++ b/tasks/v1/tasks-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/5PpVnub_x8uBzIigVf3YlGXAlmA\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/5PpVnub_x8uBzIigVf3YlGXAlmA\"",
  "discoveryVersion": "v1",
  "id": "tasks:v1",
  "name": "tasks",
diff --git a/translate/v2/translate-api.json b/translate/v2/translate-api.json
index fc0e53b..3fd154b 100644
--- a/translate/v2/translate-api.json
+++ b/translate/v2/translate-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/4Ip-FKZqF7Vovq8mU1yMUQ2gvUM\"",
+ "etag": "\"qMhxoRFWKZK4K3KdZJuqms1o3fc/4Ip-FKZqF7Vovq8mU1yMUQ2gvUM\"",
  "discoveryVersion": "v1",
  "id": "translate:v2",
  "name": "translate",
diff --git a/urlshortener/v1/urlshortener-api.json b/urlshortener/v1/urlshortener-api.json
index 5bc7390..b83092e 100644
--- a/urlshortener/v1/urlshortener-api.json
+++ b/urlshortener/v1/urlshortener-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/T4bB77XUfbpGWn7xKXxC7yFKgeE\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/T4bB77XUfbpGWn7xKXxC7yFKgeE\"",
  "discoveryVersion": "v1",
  "id": "urlshortener:v1",
  "name": "urlshortener",
diff --git a/webfonts/v1/webfonts-api.json b/webfonts/v1/webfonts-api.json
index ceb1e17..4328f0c 100644
--- a/webfonts/v1/webfonts-api.json
+++ b/webfonts/v1/webfonts-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/Yx9k0sPKwAEHIXkjsQIZVeMr9po\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/Yx9k0sPKwAEHIXkjsQIZVeMr9po\"",
  "discoveryVersion": "v1",
  "id": "webfonts:v1",
  "name": "webfonts",
diff --git a/youtube/v3/youtube-api.json b/youtube/v3/youtube-api.json
index 4b11728..a77b797 100644
--- a/youtube/v3/youtube-api.json
+++ b/youtube/v3/youtube-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/5vMq1yAGX7IG4_ezxaSlqyQFgNI\"",
+ "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/yBAS7E9j0Hk6xooGiHdbXGVAPUc\"",
  "discoveryVersion": "v1",
  "id": "youtube:v3",
  "name": "youtube",
@@ -125,7 +125,7 @@
     },
     "kind": {
      "type": "string",
-     "description": "The kind, fixed to \"youtube#activity\".",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#activity\".",
      "default": "youtube#activity"
     },
     "snippet": {
@@ -300,14 +300,14 @@
      "type": "string",
      "description": "The URL the client should direct the user to, if the user chooses to visit the advertiser's website."
     },
-    "forecastingUrls": {
+    "forecastingUrl": {
      "type": "array",
      "description": "The list of forecasting URLs. The client should ping all of these URLs when a promoted item is not available, to indicate that a promoted item could have been shown.",
      "items": {
       "type": "string"
      }
     },
-    "impressionUrls": {
+    "impressionUrl": {
      "type": "array",
      "description": "The list of impression URLs. The client should ping all of these URLs to indicate that the user was shown this promoted item.",
      "items": {
@@ -433,7 +433,7 @@
     },
     "kind": {
      "type": "string",
-     "description": "The kind, fixed to \"youtube#activityListResponse\".",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#activityListResponse\".",
      "default": "youtube#activityListResponse"
     },
     "nextPageToken": {
@@ -599,7 +599,7 @@
     },
     "kind": {
      "type": "string",
-     "description": "The kind, fixed to \"youtube#channel\".",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#channel\".",
      "default": "youtube#channel"
     },
     "snippet": {
@@ -654,7 +654,7 @@
     },
     "kind": {
      "type": "string",
-     "description": "The kind, fixed to \"youtube#channelBannerResource\".",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#channelBannerResource\".",
      "default": "youtube#channelBannerResource"
     },
     "url": {
@@ -785,7 +785,7 @@
     },
     "kind": {
      "type": "string",
-     "description": "The kind, fixed to \"youtube#channelListResponse\".",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#channelListResponse\".",
      "default": "youtube#channelListResponse"
     },
     "nextPageToken": {
@@ -969,10 +969,12 @@
      "type": "string",
      "description": "Rating system in Australia - Australian Classification Board",
      "enum": [
+      "acbC",
       "acbE",
       "acbG",
       "acbM",
       "acbMa15plus",
+      "acbP",
       "acbPg",
       "acbR18plus",
       "acbUnrated"
@@ -984,6 +986,8 @@
       "",
       "",
       "",
+      "",
+      "",
       ""
      ]
     },
@@ -1011,6 +1015,48 @@
       ""
      ]
     },
+    "catvRating": {
+     "type": "string",
+     "description": "Rating system for Canadian TV - Canadian TV Classification System",
+     "enum": [
+      "catv14plus",
+      "catv18plus",
+      "catvC",
+      "catvC8",
+      "catvG",
+      "catvPg",
+      "catvUnrated"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      "",
+      "",
+      "",
+      "",
+      ""
+     ]
+    },
+    "catvfrRating": {
+     "type": "string",
+     "description": "Rating system for French Canadian TV - Regie du cinema",
+     "enum": [
+      "catvfr13plus",
+      "catvfr16plus",
+      "catvfr18plus",
+      "catvfr8plus",
+      "catvfrG",
+      "catvfrUnrated"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      "",
+      "",
+      "",
+      ""
+     ]
+    },
     "cbfcRating": {
      "type": "string",
      "description": "Rating system in India - Central Board of Film Certification",
@@ -1356,7 +1402,7 @@
     },
     "kind": {
      "type": "string",
-     "description": "The kind, fixed to \"youtube#guideCategory\".",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#guideCategory\".",
      "default": "youtube#guideCategory"
     },
     "snippet": {
@@ -1386,7 +1432,7 @@
     },
     "kind": {
      "type": "string",
-     "description": "The kind, fixed to \"youtube#guideCategoryListResponse\".",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#guideCategoryListResponse\".",
      "default": "youtube#guideCategoryListResponse"
     },
     "nextPageToken": {
@@ -1668,7 +1714,7 @@
     },
     "kind": {
      "type": "string",
-     "description": "The kind, fixed to \"youtube#liveBroadcast\".",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#liveBroadcast\".",
      "default": "youtube#liveBroadcast"
     },
     "snippet": {
@@ -1766,7 +1812,7 @@
     },
     "kind": {
      "type": "string",
-     "description": "The kind, fixed to \"youtube#liveBroadcastListResponse\".",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#liveBroadcastListResponse\".",
      "default": "youtube#liveBroadcastListResponse"
     },
     "nextPageToken": {
@@ -1952,7 +1998,7 @@
     },
     "kind": {
      "type": "string",
-     "description": "The kind, fixed to \"youtube#liveStream\".",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#liveStream\".",
      "default": "youtube#liveStream"
     },
     "snippet": {
@@ -1997,7 +2043,7 @@
     },
     "kind": {
      "type": "string",
-     "description": "The kind, fixed to \"youtube#liveStreamListResponse\".",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#liveStreamListResponse\".",
      "default": "youtube#liveStreamListResponse"
     },
     "nextPageToken": {
@@ -2172,7 +2218,7 @@
     },
     "kind": {
      "type": "string",
-     "description": "The kind, fixed to \"youtube#playlist\".",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#playlist\".",
      "default": "youtube#playlist"
     },
     "player": {
@@ -2219,7 +2265,7 @@
     },
     "kind": {
      "type": "string",
-     "description": "The kind, fixed to \"youtube#playlistItem\".",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#playlistItem\".",
      "default": "youtube#playlistItem"
     },
     "snippet": {
@@ -2275,7 +2321,7 @@
     },
     "kind": {
      "type": "string",
-     "description": "The kind, fixed to \"youtube#playlistItemListResponse\".",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#playlistItemListResponse\".",
      "default": "youtube#playlistItemListResponse"
     },
     "nextPageToken": {
@@ -2397,7 +2443,7 @@
     },
     "kind": {
      "type": "string",
-     "description": "The kind, fixed to \"youtube#playlistListResponse\".",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#playlistListResponse\".",
      "default": "youtube#playlistListResponse"
     },
     "nextPageToken": {
@@ -2610,7 +2656,7 @@
     },
     "kind": {
      "type": "string",
-     "description": "The kind, fixed to \"youtube#searchListResponse\".",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#searchListResponse\".",
      "default": "youtube#searchListResponse"
     },
     "nextPageToken": {
@@ -2648,7 +2694,7 @@
     },
     "kind": {
      "type": "string",
-     "description": "The kind, fixed to \"youtube#searchResult\".",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#searchResult\".",
      "default": "youtube#searchResult"
     },
     "snippet": {
@@ -2722,7 +2768,7 @@
     },
     "kind": {
      "type": "string",
-     "description": "The kind, fixed to \"youtube#subscription\".",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#subscription\".",
      "default": "youtube#subscription"
     },
     "snippet": {
@@ -2785,7 +2831,7 @@
     },
     "kind": {
      "type": "string",
-     "description": "The kind, fixed to \"youtube#subscriptionListResponse\".",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#subscriptionListResponse\".",
      "default": "youtube#subscriptionListResponse"
     },
     "nextPageToken": {
@@ -2941,7 +2987,7 @@
     },
     "kind": {
      "type": "string",
-     "description": "The kind, fixed to \"youtube#thumbnailSetResponse\".",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#thumbnailSetResponse\".",
      "default": "youtube#thumbnailSetResponse"
     },
     "visitorId": {
@@ -2982,16 +3028,21 @@
     },
     "id": {
      "type": "string",
-     "description": "The ID that YouTube uses to uniquely identify the video."
+     "description": "The ID that YouTube uses to uniquely identify the video.",
+     "annotations": {
+      "required": [
+       "youtube.videos.update"
+      ]
+     }
     },
     "kind": {
      "type": "string",
-     "description": "The kind, fixed to \"youtube#video\".",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#video\".",
      "default": "youtube#video"
     },
     "liveStreamingDetails": {
      "$ref": "VideoLiveStreamingDetails",
-     "description": "The liveStreamingDetails object contains information regarding the livestream"
+     "description": "The liveStreamingDetails object contains metadata about a live video broadcast. The object will only be present in a video resource if the video is an upcoming, live, or completed live broadcast."
     },
     "monetizationDetails": {
      "$ref": "VideoMonetizationDetails",
@@ -3080,7 +3131,7 @@
     },
     "kind": {
      "type": "string",
-     "description": "The kind, fixed to \"youtube#videoCategory\".",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#videoCategory\".",
      "default": "youtube#videoCategory"
     },
     "snippet": {
@@ -3110,7 +3161,7 @@
     },
     "kind": {
      "type": "string",
-     "description": "The kind, fixed to \"youtube#videoCategoryListResponse\".",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#videoCategoryListResponse\".",
      "default": "youtube#videoCategoryListResponse"
     },
     "nextPageToken": {
@@ -3441,7 +3492,7 @@
     },
     "kind": {
      "type": "string",
-     "description": "The kind, fixed to \"youtube#videoGetRatingResponse\".",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#videoGetRatingResponse\".",
      "default": "youtube#videoGetRatingResponse"
     }
    }
@@ -3467,7 +3518,7 @@
     },
     "kind": {
      "type": "string",
-     "description": "The kind, fixed to \"youtube#videoListResponse\".",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#videoListResponse\".",
      "default": "youtube#videoListResponse"
     },
     "nextPageToken": {
@@ -3495,30 +3546,30 @@
    "type": "object",
    "description": "Details about the live streaming metadata.",
    "properties": {
-    "actualEndTimeMs": {
+    "actualEndTime": {
      "type": "string",
-     "description": "The time in milliseconds since the epoch when the livestream actually ended.",
-     "format": "uint64"
+     "description": "The time that the broadcast actually ended. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format. This value will not be available until the broadcast is over.",
+     "format": "date-time"
     },
-    "actualStartTimeMs": {
+    "actualStartTime": {
      "type": "string",
-     "description": "The time in milliseconds since the epoch when the livestream actually started.",
-     "format": "uint64"
+     "description": "The time that the broadcast actually started. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format. This value will not be available until the broadcast begins.",
+     "format": "date-time"
     },
     "concurrentViewers": {
      "type": "string",
-     "description": "Number of viewers currently watch the livestream.",
+     "description": "The number of viewers currently watching the broadcast. The property and its value will be present if the broadcast has current viewers and the broadcast owner has not hidden the viewcount for the video. Note that YouTube stops tracking the number of concurrent viewers for a broadcast when the broadcast ends. So, this property would not identify the number of viewers watching an archived video of a live broadcast that already ended.",
      "format": "uint64"
     },
-    "scheduledEndTimeMs": {
+    "scheduledEndTime": {
      "type": "string",
-     "description": "The time in milliseconds since the epoch when the livestream is scheduled to end.",
-     "format": "uint64"
+     "description": "The time that the broadcast is scheduled to end. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format. If the value is empty or the property is not present, then the broadcast is scheduled to continue indefinitely.",
+     "format": "date-time"
     },
-    "scheduledStartTimeMs": {
+    "scheduledStartTime": {
      "type": "string",
-     "description": "The time in milliseconds since the epoch when the livestream is scheduled to start.",
-     "format": "uint64"
+     "description": "The time that the broadcast is scheduled to begin. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.",
+     "format": "date-time"
     }
    }
   },
@@ -4414,6 +4465,12 @@
        "description": "The part parameter specifies a comma-separated list of one or more liveBroadcast resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, contentDetails, and status.",
        "required": true,
        "location": "query"
+      },
+      "walltime": {
+       "type": "string",
+       "description": "The walltime parameter specifies the wall clock time at which the specified slate change will occur.",
+       "format": "date-time",
+       "location": "query"
       }
      },
      "parameterOrder": [
@@ -4786,6 +4843,11 @@
      "httpMethod": "POST",
      "description": "Adds a resource to a playlist.",
      "parameters": {
+      "onBehalfOfContentOwner": {
+       "type": "string",
+       "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.",
+       "location": "query"
+      },
       "part": {
        "type": "string",
        "description": "The part parameter serves two purposes in this operation. It identifies the properties that the write operation will set as well as the properties that the API response will include.\n\nThe part names that you can include in the parameter value are snippet, contentDetails, and status.",
@@ -4827,6 +4889,11 @@
        "maximum": "50",
        "location": "query"
       },
+      "onBehalfOfContentOwner": {
+       "type": "string",
+       "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.",
+       "location": "query"
+      },
       "pageToken": {
        "type": "string",
        "description": "The pageToken parameter identifies a specific page in the result set that should be returned. In an API response, the nextPageToken and prevPageToken properties identify other pages that could be retrieved.",
@@ -4907,7 +4974,7 @@
       },
       "onBehalfOfContentOwner": {
        "type": "string",
-       "description": "USE_DESCRIPTION --- videos:insert:onBehalfOfContentOwner",
+       "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.",
        "location": "query"
       }
      },
@@ -4927,12 +4994,12 @@
      "parameters": {
       "onBehalfOfContentOwner": {
        "type": "string",
-       "description": "USE_DESCRIPTION --- videos:insert:onBehalfOfContentOwner",
+       "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.",
        "location": "query"
       },
       "onBehalfOfContentOwnerChannel": {
        "type": "string",
-       "description": "USE_DESCRIPTION --- videos:insert:onBehalfOfContentOwnerChannel",
+       "description": "This parameter can only be used in a properly authorized request. Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwnerChannel parameter specifies the YouTube channel ID of the channel to which a video is being added. This parameter is required when a request specifies a value for the onBehalfOfContentOwner parameter, and it can only be used in conjunction with that parameter. In addition, the request must be authorized using a CMS account that is linked to the content owner that the onBehalfOfContentOwner parameter specifies. Finally, the channel that the onBehalfOfContentOwnerChannel parameter value specifies must be linked to the content owner that the onBehalfOfContentOwner parameter specifies.\n\nThis parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and perform actions on behalf of the channel specified in the parameter value, without having to provide authentication credentials for each separate channel.",
        "location": "query"
       },
       "part": {
@@ -4988,12 +5055,12 @@
       },
       "onBehalfOfContentOwner": {
        "type": "string",
-       "description": "USE_DESCRIPTION --- videos:insert:onBehalfOfContentOwner",
+       "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.",
        "location": "query"
       },
       "onBehalfOfContentOwnerChannel": {
        "type": "string",
-       "description": "USE_DESCRIPTION --- videos:insert:onBehalfOfContentOwnerChannel",
+       "description": "This parameter can only be used in a properly authorized request. Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwnerChannel parameter specifies the YouTube channel ID of the channel to which a video is being added. This parameter is required when a request specifies a value for the onBehalfOfContentOwner parameter, and it can only be used in conjunction with that parameter. In addition, the request must be authorized using a CMS account that is linked to the content owner that the onBehalfOfContentOwner parameter specifies. Finally, the channel that the onBehalfOfContentOwnerChannel parameter value specifies must be linked to the content owner that the onBehalfOfContentOwner parameter specifies.\n\nThis parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and perform actions on behalf of the channel specified in the parameter value, without having to provide authentication credentials for each separate channel.",
        "location": "query"
       },
       "pageToken": {
@@ -5028,7 +5095,7 @@
      "parameters": {
       "onBehalfOfContentOwner": {
        "type": "string",
-       "description": "USE_DESCRIPTION --- videos:insert:onBehalfOfContentOwner",
+       "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.",
        "location": "query"
       },
       "part": {
@@ -5440,7 +5507,7 @@
       },
       "onBehalfOfContentOwnerChannel": {
        "type": "string",
-       "description": "USE_DESCRIPTION --- videos:insert:onBehalfOfContentOwnerChannel",
+       "description": "This parameter can only be used in a properly authorized request. Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwnerChannel parameter specifies the YouTube channel ID of the channel to which a video is being added. This parameter is required when a request specifies a value for the onBehalfOfContentOwner parameter, and it can only be used in conjunction with that parameter. In addition, the request must be authorized using a CMS account that is linked to the content owner that the onBehalfOfContentOwner parameter specifies. Finally, the channel that the onBehalfOfContentOwnerChannel parameter value specifies must be linked to the content owner that the onBehalfOfContentOwner parameter specifies.\n\nThis parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and perform actions on behalf of the channel specified in the parameter value, without having to provide authentication credentials for each separate channel.",
        "location": "query"
       },
       "order": {
@@ -5495,7 +5562,7 @@
      "parameters": {
       "onBehalfOfContentOwner": {
        "type": "string",
-       "description": "USE_DESCRIPTION --- channels:list:onBehalfOfContentOwner",
+       "description": "The onBehalfOfContentOwner parameter indicates that the authenticated user is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The actual CMS account that the user authenticates with needs to be linked to the specified YouTube content owner.",
        "location": "query"
       },
       "videoId": {
@@ -5669,7 +5736,7 @@
       },
       "part": {
        "type": "string",
-       "description": "The part parameter serves two purposes in this operation. It identifies the properties that the write operation will set as well as the properties that the API response will include.\n\nThe part names that you can include in the parameter value are snippet, contentDetails, fileDetails, player, processingDetails, recordingDetails, statistics, status, suggestions, and topicDetails. However, not all of those parts contain properties that can be set when setting or updating a video's metadata. For example, the statistics object encapsulates statistics that YouTube calculates for a video and does not contain values that you can set or modify. If the parameter value specifies a part that does not contain mutable values, that part will still be included in the API response.",
+       "description": "The part parameter serves two purposes in this operation. It identifies the properties that the write operation will set as well as the properties that the API response will include.\n\nThe part names that you can include in the parameter value are snippet, contentDetails, fileDetails, liveStreamingDetails, player, processingDetails, recordingDetails, statistics, status, suggestions, and topicDetails. However, not all of those parts contain properties that can be set when setting or updating a video's metadata. For example, the statistics object encapsulates statistics that YouTube calculates for a video and does not contain values that you can set or modify. If the parameter value specifies a part that does not contain mutable values, that part will still be included in the API response.",
        "required": true,
        "location": "query"
       },
@@ -5773,13 +5840,13 @@
       },
       "part": {
        "type": "string",
-       "description": "The part parameter specifies a comma-separated list of one or more video resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, contentDetails, fileDetails, player, processingDetails, recordingDetails, statistics, status, suggestions, and topicDetails.\n\nIf the parameter identifies a property that contains child properties, the child properties will be included in the response. For example, in a video resource, the snippet property contains the channelId, title, description, tags, and categoryId properties. As such, if you set part=snippet, the API response will contain all of those properties.",
+       "description": "The part parameter specifies a comma-separated list of one or more video resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, contentDetails, fileDetails, liveStreamingDetails, player, processingDetails, recordingDetails, statistics, status, suggestions, and topicDetails.\n\nIf the parameter identifies a property that contains child properties, the child properties will be included in the response. For example, in a video resource, the snippet property contains the channelId, title, description, tags, and categoryId properties. As such, if you set part=snippet, the API response will contain all of those properties.",
        "required": true,
        "location": "query"
       },
       "regionCode": {
        "type": "string",
-       "description": "The regionCode parameter instructs the API to select a video chart available in the specified region. If using this parameter, chart must also be set. The parameter value is an ISO 3166-1 alpha-2 country code.",
+       "description": "The regionCode parameter instructs the API to select a video chart available in the specified region. This parameter can only be used in conjunction with the chart parameter. The parameter value is an ISO 3166-1 alpha-2 country code.",
        "location": "query"
       },
       "videoCategoryId": {
@@ -5857,7 +5924,7 @@
       },
       "part": {
        "type": "string",
-       "description": "The part parameter serves two purposes in this operation. It identifies the properties that the write operation will set as well as the properties that the API response will include.\n\nThe part names that you can include in the parameter value are snippet, contentDetails, fileDetails, player, processingDetails, recordingDetails, statistics, status, suggestions, and topicDetails.\n\nNote that this method will override the existing values for all of the mutable properties that are contained in any parts that the parameter value specifies. For example, a video's privacy setting is contained in the status part. As such, if your request is updating a private video, and the request's part parameter value includes the status part, the video's privacy setting will be updated to whatever value the request body specifies. If the request body does not specify a value, the existing privacy setting will be removed and the video will revert to the default privacy setting.\n\nIn addition, not all of those parts contain properties that can be set when setting or updating a video's metadata. For example, the statistics object encapsulates statistics that YouTube calculates for a video and does not contain values that you can set or modify. If the parameter value specifies a part that does not contain mutable values, that part will still be included in the API response.",
+       "description": "The part parameter serves two purposes in this operation. It identifies the properties that the write operation will set as well as the properties that the API response will include.\n\nThe part names that you can include in the parameter value are snippet, contentDetails, fileDetails, liveStreamingDetails, player, processingDetails, recordingDetails, statistics, status, suggestions, and topicDetails.\n\nNote that this method will override the existing values for all of the mutable properties that are contained in any parts that the parameter value specifies. For example, a video's privacy setting is contained in the status part. As such, if your request is updating a private video, and the request's part parameter value includes the status part, the video's privacy setting will be updated to whatever value the request body specifies. If the request body does not specify a value, the existing privacy setting will be removed and the video will revert to the default privacy setting.\n\nIn addition, not all of those parts contain properties that can be set when setting or updating a video's metadata. For example, the statistics object encapsulates statistics that YouTube calculates for a video and does not contain values that you can set or modify. If the parameter value specifies a part that does not contain mutable values, that part will still be included in the API response.",
        "required": true,
        "location": "query"
       }
@@ -5894,7 +5961,7 @@
       },
       "onBehalfOfContentOwner": {
        "type": "string",
-       "description": "USE_DESCRIPTION --- channels:list:onBehalfOfContentOwner",
+       "description": "The onBehalfOfContentOwner parameter indicates that the authenticated user is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The actual CMS account that the user authenticates with needs to be linked to the specified YouTube content owner.",
        "location": "query"
       }
      },
@@ -5943,7 +6010,7 @@
       },
       "onBehalfOfContentOwner": {
        "type": "string",
-       "description": "USE_DESCRIPTION --- channels:list:onBehalfOfContentOwner",
+       "description": "The onBehalfOfContentOwner parameter indicates that the authenticated user is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The actual CMS account that the user authenticates with needs to be linked to the specified YouTube content owner.",
        "location": "query"
       }
      },
diff --git a/youtube/v3/youtube-gen.go b/youtube/v3/youtube-gen.go
index 6ddb3e8..0b69688 100644
--- a/youtube/v3/youtube-gen.go
+++ b/youtube/v3/youtube-gen.go
@@ -261,7 +261,8 @@
 	// Id: The ID that YouTube uses to uniquely identify the activity.
 	Id string `json:"id,omitempty"`
 
-	// Kind: The kind, fixed to "youtube#activity".
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "youtube#activity".
 	Kind string `json:"kind,omitempty"`
 
 	// Snippet: The snippet object contains basic details about the
@@ -394,15 +395,15 @@
 	// user chooses to visit the advertiser's website.
 	DestinationUrl string `json:"destinationUrl,omitempty"`
 
-	// ForecastingUrls: The list of forecasting URLs. The client should ping
+	// ForecastingUrl: The list of forecasting URLs. The client should ping
 	// all of these URLs when a promoted item is not available, to indicate
 	// that a promoted item could have been shown.
-	ForecastingUrls []string `json:"forecastingUrls,omitempty"`
+	ForecastingUrl []string `json:"forecastingUrl,omitempty"`
 
-	// ImpressionUrls: The list of impression URLs. The client should ping
+	// ImpressionUrl: The list of impression URLs. The client should ping
 	// all of these URLs to indicate that the user was shown this promoted
 	// item.
-	ImpressionUrls []string `json:"impressionUrls,omitempty"`
+	ImpressionUrl []string `json:"impressionUrl,omitempty"`
 
 	// VideoId: The ID that YouTube uses to uniquely identify the promoted
 	// video.
@@ -464,7 +465,8 @@
 	// criteria.
 	Items []*Activity `json:"items,omitempty"`
 
-	// Kind: The kind, fixed to "youtube#activityListResponse".
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "youtube#activityListResponse".
 	Kind string `json:"kind,omitempty"`
 
 	// NextPageToken: The token that can be used as the value of the
@@ -564,7 +566,8 @@
 	// information about promotion campaign associated with the channel.
 	InvideoPromotion *InvideoPromotion `json:"invideoPromotion,omitempty"`
 
-	// Kind: The kind, fixed to "youtube#channel".
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "youtube#channel".
 	Kind string `json:"kind,omitempty"`
 
 	// Snippet: The snippet object contains basic details about the channel,
@@ -610,7 +613,8 @@
 	// Etag: Etag of this resource.
 	Etag string `json:"etag,omitempty"`
 
-	// Kind: The kind, fixed to "youtube#channelBannerResource".
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "youtube#channelBannerResource".
 	Kind string `json:"kind,omitempty"`
 
 	// Url: The URL of this banner image.
@@ -699,7 +703,8 @@
 	// Items: A list of channels that match the request criteria.
 	Items []*Channel `json:"items,omitempty"`
 
-	// Kind: The kind, fixed to "youtube#channelListResponse".
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "youtube#channelListResponse".
 	Kind string `json:"kind,omitempty"`
 
 	// NextPageToken: The token that can be used as the value of the
@@ -824,6 +829,13 @@
 	// BbfcRating: British Board of Film Classification
 	BbfcRating string `json:"bbfcRating,omitempty"`
 
+	// CatvRating: Rating system for Canadian TV - Canadian TV
+	// Classification System
+	CatvRating string `json:"catvRating,omitempty"`
+
+	// CatvfrRating: Rating system for French Canadian TV - Regie du cinema
+	CatvfrRating string `json:"catvfrRating,omitempty"`
+
 	// CbfcRating: Rating system in India - Central Board of Film
 	// Certification
 	CbfcRating string `json:"cbfcRating,omitempty"`
@@ -896,7 +908,8 @@
 	// Id: The ID that YouTube uses to uniquely identify the guide category.
 	Id string `json:"id,omitempty"`
 
-	// Kind: The kind, fixed to "youtube#guideCategory".
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "youtube#guideCategory".
 	Kind string `json:"kind,omitempty"`
 
 	// Snippet: The snippet object contains basic details about the
@@ -917,7 +930,8 @@
 	// is the corresponding guideCategory resource.
 	Items []*GuideCategory `json:"items,omitempty"`
 
-	// Kind: The kind, fixed to "youtube#guideCategoryListResponse".
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "youtube#guideCategoryListResponse".
 	Kind string `json:"kind,omitempty"`
 
 	// NextPageToken: The token that can be used as the value of the
@@ -1124,7 +1138,8 @@
 	// Id: The ID that YouTube assigns to uniquely identify the broadcast.
 	Id string `json:"id,omitempty"`
 
-	// Kind: The kind, fixed to "youtube#liveBroadcast".
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "youtube#liveBroadcast".
 	Kind string `json:"kind,omitempty"`
 
 	// Snippet: The snippet object contains basic details about the event,
@@ -1207,7 +1222,8 @@
 	// Items: A list of broadcasts that match the request criteria.
 	Items []*LiveBroadcast `json:"items,omitempty"`
 
-	// Kind: The kind, fixed to "youtube#liveBroadcastListResponse".
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "youtube#liveBroadcastListResponse".
 	Kind string `json:"kind,omitempty"`
 
 	// NextPageToken: The token that can be used as the value of the
@@ -1308,7 +1324,8 @@
 	// Id: The ID that YouTube assigns to uniquely identify the stream.
 	Id string `json:"id,omitempty"`
 
-	// Kind: The kind, fixed to "youtube#liveStream".
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "youtube#liveStream".
 	Kind string `json:"kind,omitempty"`
 
 	// Snippet: The snippet object contains basic details about the stream,
@@ -1337,7 +1354,8 @@
 	// Items: A list of live streams that match the request criteria.
 	Items []*LiveStream `json:"items,omitempty"`
 
-	// Kind: The kind, fixed to "youtube#liveStreamListResponse".
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "youtube#liveStreamListResponse".
 	Kind string `json:"kind,omitempty"`
 
 	// NextPageToken: The token that can be used as the value of the
@@ -1438,7 +1456,8 @@
 	// Id: The ID that YouTube uses to uniquely identify the playlist.
 	Id string `json:"id,omitempty"`
 
-	// Kind: The kind, fixed to "youtube#playlist".
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "youtube#playlist".
 	Kind string `json:"kind,omitempty"`
 
 	// Player: The player object contains information that you would use to
@@ -1471,7 +1490,8 @@
 	// Id: The ID that YouTube uses to uniquely identify the playlist item.
 	Id string `json:"id,omitempty"`
 
-	// Kind: The kind, fixed to "youtube#playlistItem".
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "youtube#playlistItem".
 	Kind string `json:"kind,omitempty"`
 
 	// Snippet: The snippet object contains basic details about the playlist
@@ -1517,7 +1537,8 @@
 	// Items: A list of playlist items that match the request criteria.
 	Items []*PlaylistItem `json:"items,omitempty"`
 
-	// Kind: The kind, fixed to "youtube#playlistItemListResponse".
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "youtube#playlistItemListResponse".
 	Kind string `json:"kind,omitempty"`
 
 	// NextPageToken: The token that can be used as the value of the
@@ -1593,7 +1614,8 @@
 	// Items: A list of playlists that match the request criteria.
 	Items []*Playlist `json:"items,omitempty"`
 
-	// Kind: The kind, fixed to "youtube#playlistListResponse".
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "youtube#playlistListResponse".
 	Kind string `json:"kind,omitempty"`
 
 	// NextPageToken: The token that can be used as the value of the
@@ -1730,7 +1752,8 @@
 	// Items: A list of results that match the search criteria.
 	Items []*SearchResult `json:"items,omitempty"`
 
-	// Kind: The kind, fixed to "youtube#searchListResponse".
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "youtube#searchListResponse".
 	Kind string `json:"kind,omitempty"`
 
 	// NextPageToken: The token that can be used as the value of the
@@ -1757,7 +1780,8 @@
 	// identify the resource that matches the search request.
 	Id *ResourceId `json:"id,omitempty"`
 
-	// Kind: The kind, fixed to "youtube#searchResult".
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "youtube#searchResult".
 	Kind string `json:"kind,omitempty"`
 
 	// Snippet: The snippet object contains basic details about a search
@@ -1811,7 +1835,8 @@
 	// Id: The ID that YouTube uses to uniquely identify the subscription.
 	Id string `json:"id,omitempty"`
 
-	// Kind: The kind, fixed to "youtube#subscription".
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "youtube#subscription".
 	Kind string `json:"kind,omitempty"`
 
 	// Snippet: The snippet object contains basic details about the
@@ -1849,7 +1874,8 @@
 	// Items: A list of subscriptions that match the request criteria.
 	Items []*Subscription `json:"items,omitempty"`
 
-	// Kind: The kind, fixed to "youtube#subscriptionListResponse".
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "youtube#subscriptionListResponse".
 	Kind string `json:"kind,omitempty"`
 
 	// NextPageToken: The token that can be used as the value of the
@@ -1951,7 +1977,8 @@
 	// Items: A list of thumbnails.
 	Items []*ThumbnailDetails `json:"items,omitempty"`
 
-	// Kind: The kind, fixed to "youtube#thumbnailSetResponse".
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "youtube#thumbnailSetResponse".
 	Kind string `json:"kind,omitempty"`
 
 	// VisitorId: The visitorId identifies the visitor.
@@ -1987,11 +2014,14 @@
 	// Id: The ID that YouTube uses to uniquely identify the video.
 	Id string `json:"id,omitempty"`
 
-	// Kind: The kind, fixed to "youtube#video".
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "youtube#video".
 	Kind string `json:"kind,omitempty"`
 
 	// LiveStreamingDetails: The liveStreamingDetails object contains
-	// information regarding the livestream
+	// metadata about a live video broadcast. The object will only be
+	// present in a video resource if the video is an upcoming, live, or
+	// completed live broadcast.
 	LiveStreamingDetails *VideoLiveStreamingDetails `json:"liveStreamingDetails,omitempty"`
 
 	// MonetizationDetails: The monetizationDetails object encapsulates
@@ -2071,7 +2101,8 @@
 	// Id: The ID that YouTube uses to uniquely identify the video category.
 	Id string `json:"id,omitempty"`
 
-	// Kind: The kind, fixed to "youtube#videoCategory".
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "youtube#videoCategory".
 	Kind string `json:"kind,omitempty"`
 
 	// Snippet: The snippet object contains basic details about the video
@@ -2092,7 +2123,8 @@
 	// value is the corresponding videoCategory resource.
 	Items []*VideoCategory `json:"items,omitempty"`
 
-	// Kind: The kind, fixed to "youtube#videoCategoryListResponse".
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "youtube#videoCategoryListResponse".
 	Kind string `json:"kind,omitempty"`
 
 	// NextPageToken: The token that can be used as the value of the
@@ -2305,7 +2337,8 @@
 	// Items: A list of ratings that match the request criteria.
 	Items []*VideoRating `json:"items,omitempty"`
 
-	// Kind: The kind, fixed to "youtube#videoGetRatingResponse".
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "youtube#videoGetRatingResponse".
 	Kind string `json:"kind,omitempty"`
 }
 
@@ -2320,7 +2353,8 @@
 	// Items: A list of videos that match the request criteria.
 	Items []*Video `json:"items,omitempty"`
 
-	// Kind: The kind, fixed to "youtube#videoListResponse".
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "youtube#videoListResponse".
 	Kind string `json:"kind,omitempty"`
 
 	// NextPageToken: The token that can be used as the value of the
@@ -2340,24 +2374,35 @@
 }
 
 type VideoLiveStreamingDetails struct {
-	// ActualEndTimeMs: The time in milliseconds since the epoch when the
-	// livestream actually ended.
-	ActualEndTimeMs uint64 `json:"actualEndTimeMs,omitempty,string"`
+	// ActualEndTime: The time that the broadcast actually ended. The value
+	// is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format. This value
+	// will not be available until the broadcast is over.
+	ActualEndTime string `json:"actualEndTime,omitempty"`
 
-	// ActualStartTimeMs: The time in milliseconds since the epoch when the
-	// livestream actually started.
-	ActualStartTimeMs uint64 `json:"actualStartTimeMs,omitempty,string"`
+	// ActualStartTime: The time that the broadcast actually started. The
+	// value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format. This
+	// value will not be available until the broadcast begins.
+	ActualStartTime string `json:"actualStartTime,omitempty"`
 
-	// ConcurrentViewers: Number of viewers currently watch the livestream.
+	// ConcurrentViewers: The number of viewers currently watching the
+	// broadcast. The property and its value will be present if the
+	// broadcast has current viewers and the broadcast owner has not hidden
+	// the viewcount for the video. Note that YouTube stops tracking the
+	// number of concurrent viewers for a broadcast when the broadcast ends.
+	// So, this property would not identify the number of viewers watching
+	// an archived video of a live broadcast that already ended.
 	ConcurrentViewers uint64 `json:"concurrentViewers,omitempty,string"`
 
-	// ScheduledEndTimeMs: The time in milliseconds since the epoch when the
-	// livestream is scheduled to end.
-	ScheduledEndTimeMs uint64 `json:"scheduledEndTimeMs,omitempty,string"`
+	// ScheduledEndTime: The time that the broadcast is scheduled to end.
+	// The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
+	// If the value is empty or the property is not present, then the
+	// broadcast is scheduled to continue indefinitely.
+	ScheduledEndTime string `json:"scheduledEndTime,omitempty"`
 
-	// ScheduledStartTimeMs: The time in milliseconds since the epoch when
-	// the livestream is scheduled to start.
-	ScheduledStartTimeMs uint64 `json:"scheduledStartTimeMs,omitempty,string"`
+	// ScheduledStartTime: The time that the broadcast is scheduled to
+	// begin. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ)
+	// format.
+	ScheduledStartTime string `json:"scheduledStartTime,omitempty"`
 }
 
 type VideoMonetizationDetails struct {
@@ -3693,6 +3738,14 @@
 	return c
 }
 
+// Walltime sets the optional parameter "walltime": The walltime
+// parameter specifies the wall clock time at which the specified slate
+// change will occur.
+func (c *LiveBroadcastsControlCall) Walltime(walltime string) *LiveBroadcastsControlCall {
+	c.opt_["walltime"] = walltime
+	return c
+}
+
 func (c *LiveBroadcastsControlCall) Do() (*LiveBroadcast, error) {
 	var body io.Reader = nil
 	params := make(url.Values)
@@ -3708,6 +3761,9 @@
 	if v, ok := c.opt_["onBehalfOfContentOwner"]; ok {
 		params.Set("onBehalfOfContentOwner", fmt.Sprintf("%v", v))
 	}
+	if v, ok := c.opt_["walltime"]; ok {
+		params.Set("walltime", fmt.Sprintf("%v", v))
+	}
 	urls := googleapi.ResolveRelative("https://www.googleapis.com/youtube/v3/", "liveBroadcasts/control")
 	urls += "?" + params.Encode()
 	req, _ := http.NewRequest("POST", urls, body)
@@ -3762,6 +3818,12 @@
 	//       "location": "query",
 	//       "required": true,
 	//       "type": "string"
+	//     },
+	//     "walltime": {
+	//       "description": "The walltime parameter specifies the wall clock time at which the specified slate change will occur.",
+	//       "format": "date-time",
+	//       "location": "query",
+	//       "type": "string"
 	//     }
 	//   },
 	//   "path": "liveBroadcasts/control",
@@ -4781,6 +4843,25 @@
 	return c
 }
 
+// OnBehalfOfContentOwner sets the optional parameter
+// "onBehalfOfContentOwner": Note: This parameter is intended
+// exclusively for YouTube content partners.
+//
+// The onBehalfOfContentOwner
+// parameter indicates that the request's authorization credentials
+// identify a YouTube CMS user who is acting on behalf of the content
+// owner specified in the parameter value. This parameter is intended
+// for YouTube content partners that own and manage many different
+// YouTube channels. It allows content owners to authenticate once and
+// get access to all their video and channel data, without having to
+// provide authentication credentials for each individual channel. The
+// CMS account that the user authenticates with must be linked to the
+// specified YouTube content owner.
+func (c *PlaylistItemsInsertCall) OnBehalfOfContentOwner(onBehalfOfContentOwner string) *PlaylistItemsInsertCall {
+	c.opt_["onBehalfOfContentOwner"] = onBehalfOfContentOwner
+	return c
+}
+
 func (c *PlaylistItemsInsertCall) Do() (*PlaylistItem, error) {
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.playlistitem)
@@ -4791,6 +4872,9 @@
 	params := make(url.Values)
 	params.Set("alt", "json")
 	params.Set("part", fmt.Sprintf("%v", c.part))
+	if v, ok := c.opt_["onBehalfOfContentOwner"]; ok {
+		params.Set("onBehalfOfContentOwner", fmt.Sprintf("%v", v))
+	}
 	urls := googleapi.ResolveRelative("https://www.googleapis.com/youtube/v3/", "playlistItems")
 	urls += "?" + params.Encode()
 	req, _ := http.NewRequest("POST", urls, body)
@@ -4818,6 +4902,11 @@
 	//     "part"
 	//   ],
 	//   "parameters": {
+	//     "onBehalfOfContentOwner": {
+	//       "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
 	//     "part": {
 	//       "description": "The part parameter serves two purposes in this operation. It identifies the properties that the write operation will set as well as the properties that the API response will include.\n\nThe part names that you can include in the parameter value are snippet, contentDetails, and status.",
 	//       "location": "query",
@@ -4873,6 +4962,25 @@
 	return c
 }
 
+// OnBehalfOfContentOwner sets the optional parameter
+// "onBehalfOfContentOwner": Note: This parameter is intended
+// exclusively for YouTube content partners.
+//
+// The onBehalfOfContentOwner
+// parameter indicates that the request's authorization credentials
+// identify a YouTube CMS user who is acting on behalf of the content
+// owner specified in the parameter value. This parameter is intended
+// for YouTube content partners that own and manage many different
+// YouTube channels. It allows content owners to authenticate once and
+// get access to all their video and channel data, without having to
+// provide authentication credentials for each individual channel. The
+// CMS account that the user authenticates with must be linked to the
+// specified YouTube content owner.
+func (c *PlaylistItemsListCall) OnBehalfOfContentOwner(onBehalfOfContentOwner string) *PlaylistItemsListCall {
+	c.opt_["onBehalfOfContentOwner"] = onBehalfOfContentOwner
+	return c
+}
+
 // PageToken sets the optional parameter "pageToken": The pageToken
 // parameter identifies a specific page in the result set that should be
 // returned. In an API response, the nextPageToken and prevPageToken
@@ -4911,6 +5019,9 @@
 	if v, ok := c.opt_["maxResults"]; ok {
 		params.Set("maxResults", fmt.Sprintf("%v", v))
 	}
+	if v, ok := c.opt_["onBehalfOfContentOwner"]; ok {
+		params.Set("onBehalfOfContentOwner", fmt.Sprintf("%v", v))
+	}
 	if v, ok := c.opt_["pageToken"]; ok {
 		params.Set("pageToken", fmt.Sprintf("%v", v))
 	}
@@ -4960,6 +5071,11 @@
 	//       "minimum": "0",
 	//       "type": "integer"
 	//     },
+	//     "onBehalfOfContentOwner": {
+	//       "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
 	//     "pageToken": {
 	//       "description": "The pageToken parameter identifies a specific page in the result set that should be returned. In an API response, the nextPageToken and prevPageToken properties identify other pages that could be retrieved.",
 	//       "location": "query",
@@ -5089,8 +5205,19 @@
 }
 
 // OnBehalfOfContentOwner sets the optional parameter
-// "onBehalfOfContentOwner": USE_DESCRIPTION ---
-// videos:insert:onBehalfOfContentOwner
+// "onBehalfOfContentOwner": Note: This parameter is intended
+// exclusively for YouTube content partners.
+//
+// The onBehalfOfContentOwner
+// parameter indicates that the request's authorization credentials
+// identify a YouTube CMS user who is acting on behalf of the content
+// owner specified in the parameter value. This parameter is intended
+// for YouTube content partners that own and manage many different
+// YouTube channels. It allows content owners to authenticate once and
+// get access to all their video and channel data, without having to
+// provide authentication credentials for each individual channel. The
+// CMS account that the user authenticates with must be linked to the
+// specified YouTube content owner.
 func (c *PlaylistsDeleteCall) OnBehalfOfContentOwner(onBehalfOfContentOwner string) *PlaylistsDeleteCall {
 	c.opt_["onBehalfOfContentOwner"] = onBehalfOfContentOwner
 	return c
@@ -5133,7 +5260,7 @@
 	//       "type": "string"
 	//     },
 	//     "onBehalfOfContentOwner": {
-	//       "description": "USE_DESCRIPTION --- videos:insert:onBehalfOfContentOwner",
+	//       "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.",
 	//       "location": "query",
 	//       "type": "string"
 	//     }
@@ -5165,16 +5292,47 @@
 }
 
 // OnBehalfOfContentOwner sets the optional parameter
-// "onBehalfOfContentOwner": USE_DESCRIPTION ---
-// videos:insert:onBehalfOfContentOwner
+// "onBehalfOfContentOwner": Note: This parameter is intended
+// exclusively for YouTube content partners.
+//
+// The onBehalfOfContentOwner
+// parameter indicates that the request's authorization credentials
+// identify a YouTube CMS user who is acting on behalf of the content
+// owner specified in the parameter value. This parameter is intended
+// for YouTube content partners that own and manage many different
+// YouTube channels. It allows content owners to authenticate once and
+// get access to all their video and channel data, without having to
+// provide authentication credentials for each individual channel. The
+// CMS account that the user authenticates with must be linked to the
+// specified YouTube content owner.
 func (c *PlaylistsInsertCall) OnBehalfOfContentOwner(onBehalfOfContentOwner string) *PlaylistsInsertCall {
 	c.opt_["onBehalfOfContentOwner"] = onBehalfOfContentOwner
 	return c
 }
 
 // OnBehalfOfContentOwnerChannel sets the optional parameter
-// "onBehalfOfContentOwnerChannel": USE_DESCRIPTION ---
-// videos:insert:onBehalfOfContentOwnerChannel
+// "onBehalfOfContentOwnerChannel": This parameter can only be used in a
+// properly authorized request. Note: This parameter is intended
+// exclusively for YouTube content partners.
+//
+// The
+// onBehalfOfContentOwnerChannel parameter specifies the YouTube channel
+// ID of the channel to which a video is being added. This parameter is
+// required when a request specifies a value for the
+// onBehalfOfContentOwner parameter, and it can only be used in
+// conjunction with that parameter. In addition, the request must be
+// authorized using a CMS account that is linked to the content owner
+// that the onBehalfOfContentOwner parameter specifies. Finally, the
+// channel that the onBehalfOfContentOwnerChannel parameter value
+// specifies must be linked to the content owner that the
+// onBehalfOfContentOwner parameter specifies.
+//
+// This parameter is
+// intended for YouTube content partners that own and manage many
+// different YouTube channels. It allows content owners to authenticate
+// once and perform actions on behalf of the channel specified in the
+// parameter value, without having to provide authentication credentials
+// for each separate channel.
 func (c *PlaylistsInsertCall) OnBehalfOfContentOwnerChannel(onBehalfOfContentOwnerChannel string) *PlaylistsInsertCall {
 	c.opt_["onBehalfOfContentOwnerChannel"] = onBehalfOfContentOwnerChannel
 	return c
@@ -5224,12 +5382,12 @@
 	//   ],
 	//   "parameters": {
 	//     "onBehalfOfContentOwner": {
-	//       "description": "USE_DESCRIPTION --- videos:insert:onBehalfOfContentOwner",
+	//       "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
 	//     "onBehalfOfContentOwnerChannel": {
-	//       "description": "USE_DESCRIPTION --- videos:insert:onBehalfOfContentOwnerChannel",
+	//       "description": "This parameter can only be used in a properly authorized request. Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwnerChannel parameter specifies the YouTube channel ID of the channel to which a video is being added. This parameter is required when a request specifies a value for the onBehalfOfContentOwner parameter, and it can only be used in conjunction with that parameter. In addition, the request must be authorized using a CMS account that is linked to the content owner that the onBehalfOfContentOwner parameter specifies. Finally, the channel that the onBehalfOfContentOwnerChannel parameter value specifies must be linked to the content owner that the onBehalfOfContentOwner parameter specifies.\n\nThis parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and perform actions on behalf of the channel specified in the parameter value, without having to provide authentication credentials for each separate channel.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
@@ -5307,16 +5465,47 @@
 }
 
 // OnBehalfOfContentOwner sets the optional parameter
-// "onBehalfOfContentOwner": USE_DESCRIPTION ---
-// videos:insert:onBehalfOfContentOwner
+// "onBehalfOfContentOwner": Note: This parameter is intended
+// exclusively for YouTube content partners.
+//
+// The onBehalfOfContentOwner
+// parameter indicates that the request's authorization credentials
+// identify a YouTube CMS user who is acting on behalf of the content
+// owner specified in the parameter value. This parameter is intended
+// for YouTube content partners that own and manage many different
+// YouTube channels. It allows content owners to authenticate once and
+// get access to all their video and channel data, without having to
+// provide authentication credentials for each individual channel. The
+// CMS account that the user authenticates with must be linked to the
+// specified YouTube content owner.
 func (c *PlaylistsListCall) OnBehalfOfContentOwner(onBehalfOfContentOwner string) *PlaylistsListCall {
 	c.opt_["onBehalfOfContentOwner"] = onBehalfOfContentOwner
 	return c
 }
 
 // OnBehalfOfContentOwnerChannel sets the optional parameter
-// "onBehalfOfContentOwnerChannel": USE_DESCRIPTION ---
-// videos:insert:onBehalfOfContentOwnerChannel
+// "onBehalfOfContentOwnerChannel": This parameter can only be used in a
+// properly authorized request. Note: This parameter is intended
+// exclusively for YouTube content partners.
+//
+// The
+// onBehalfOfContentOwnerChannel parameter specifies the YouTube channel
+// ID of the channel to which a video is being added. This parameter is
+// required when a request specifies a value for the
+// onBehalfOfContentOwner parameter, and it can only be used in
+// conjunction with that parameter. In addition, the request must be
+// authorized using a CMS account that is linked to the content owner
+// that the onBehalfOfContentOwner parameter specifies. Finally, the
+// channel that the onBehalfOfContentOwnerChannel parameter value
+// specifies must be linked to the content owner that the
+// onBehalfOfContentOwner parameter specifies.
+//
+// This parameter is
+// intended for YouTube content partners that own and manage many
+// different YouTube channels. It allows content owners to authenticate
+// once and perform actions on behalf of the channel specified in the
+// parameter value, without having to provide authentication credentials
+// for each separate channel.
 func (c *PlaylistsListCall) OnBehalfOfContentOwnerChannel(onBehalfOfContentOwnerChannel string) *PlaylistsListCall {
 	c.opt_["onBehalfOfContentOwnerChannel"] = onBehalfOfContentOwnerChannel
 	return c
@@ -5408,12 +5597,12 @@
 	//       "type": "boolean"
 	//     },
 	//     "onBehalfOfContentOwner": {
-	//       "description": "USE_DESCRIPTION --- videos:insert:onBehalfOfContentOwner",
+	//       "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
 	//     "onBehalfOfContentOwnerChannel": {
-	//       "description": "USE_DESCRIPTION --- videos:insert:onBehalfOfContentOwnerChannel",
+	//       "description": "This parameter can only be used in a properly authorized request. Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwnerChannel parameter specifies the YouTube channel ID of the channel to which a video is being added. This parameter is required when a request specifies a value for the onBehalfOfContentOwner parameter, and it can only be used in conjunction with that parameter. In addition, the request must be authorized using a CMS account that is linked to the content owner that the onBehalfOfContentOwner parameter specifies. Finally, the channel that the onBehalfOfContentOwnerChannel parameter value specifies must be linked to the content owner that the onBehalfOfContentOwner parameter specifies.\n\nThis parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and perform actions on behalf of the channel specified in the parameter value, without having to provide authentication credentials for each separate channel.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
@@ -5461,8 +5650,19 @@
 }
 
 // OnBehalfOfContentOwner sets the optional parameter
-// "onBehalfOfContentOwner": USE_DESCRIPTION ---
-// videos:insert:onBehalfOfContentOwner
+// "onBehalfOfContentOwner": Note: This parameter is intended
+// exclusively for YouTube content partners.
+//
+// The onBehalfOfContentOwner
+// parameter indicates that the request's authorization credentials
+// identify a YouTube CMS user who is acting on behalf of the content
+// owner specified in the parameter value. This parameter is intended
+// for YouTube content partners that own and manage many different
+// YouTube channels. It allows content owners to authenticate once and
+// get access to all their video and channel data, without having to
+// provide authentication credentials for each individual channel. The
+// CMS account that the user authenticates with must be linked to the
+// specified YouTube content owner.
 func (c *PlaylistsUpdateCall) OnBehalfOfContentOwner(onBehalfOfContentOwner string) *PlaylistsUpdateCall {
 	c.opt_["onBehalfOfContentOwner"] = onBehalfOfContentOwner
 	return c
@@ -5509,7 +5709,7 @@
 	//   ],
 	//   "parameters": {
 	//     "onBehalfOfContentOwner": {
-	//       "description": "USE_DESCRIPTION --- videos:insert:onBehalfOfContentOwner",
+	//       "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
@@ -6396,8 +6596,28 @@
 }
 
 // OnBehalfOfContentOwnerChannel sets the optional parameter
-// "onBehalfOfContentOwnerChannel": USE_DESCRIPTION ---
-// videos:insert:onBehalfOfContentOwnerChannel
+// "onBehalfOfContentOwnerChannel": This parameter can only be used in a
+// properly authorized request. Note: This parameter is intended
+// exclusively for YouTube content partners.
+//
+// The
+// onBehalfOfContentOwnerChannel parameter specifies the YouTube channel
+// ID of the channel to which a video is being added. This parameter is
+// required when a request specifies a value for the
+// onBehalfOfContentOwner parameter, and it can only be used in
+// conjunction with that parameter. In addition, the request must be
+// authorized using a CMS account that is linked to the content owner
+// that the onBehalfOfContentOwner parameter specifies. Finally, the
+// channel that the onBehalfOfContentOwnerChannel parameter value
+// specifies must be linked to the content owner that the
+// onBehalfOfContentOwner parameter specifies.
+//
+// This parameter is
+// intended for YouTube content partners that own and manage many
+// different YouTube channels. It allows content owners to authenticate
+// once and perform actions on behalf of the channel specified in the
+// parameter value, without having to provide authentication credentials
+// for each separate channel.
 func (c *SubscriptionsListCall) OnBehalfOfContentOwnerChannel(onBehalfOfContentOwnerChannel string) *SubscriptionsListCall {
 	c.opt_["onBehalfOfContentOwnerChannel"] = onBehalfOfContentOwnerChannel
 	return c
@@ -6521,7 +6741,7 @@
 	//       "type": "string"
 	//     },
 	//     "onBehalfOfContentOwnerChannel": {
-	//       "description": "USE_DESCRIPTION --- videos:insert:onBehalfOfContentOwnerChannel",
+	//       "description": "This parameter can only be used in a properly authorized request. Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwnerChannel parameter specifies the YouTube channel ID of the channel to which a video is being added. This parameter is required when a request specifies a value for the onBehalfOfContentOwner parameter, and it can only be used in conjunction with that parameter. In addition, the request must be authorized using a CMS account that is linked to the content owner that the onBehalfOfContentOwner parameter specifies. Finally, the channel that the onBehalfOfContentOwnerChannel parameter value specifies must be linked to the content owner that the onBehalfOfContentOwner parameter specifies.\n\nThis parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and perform actions on behalf of the channel specified in the parameter value, without having to provide authentication credentials for each separate channel.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
@@ -6584,8 +6804,15 @@
 }
 
 // OnBehalfOfContentOwner sets the optional parameter
-// "onBehalfOfContentOwner": USE_DESCRIPTION ---
-// channels:list:onBehalfOfContentOwner
+// "onBehalfOfContentOwner": The onBehalfOfContentOwner parameter
+// indicates that the authenticated user is acting on behalf of the
+// content owner specified in the parameter value. This parameter is
+// intended for YouTube content partners that own and manage many
+// different YouTube channels. It allows content owners to authenticate
+// once and get access to all their video and channel data, without
+// having to provide authentication credentials for each individual
+// channel. The actual CMS account that the user authenticates with
+// needs to be linked to the specified YouTube content owner.
 func (c *ThumbnailsSetCall) OnBehalfOfContentOwner(onBehalfOfContentOwner string) *ThumbnailsSetCall {
 	c.opt_["onBehalfOfContentOwner"] = onBehalfOfContentOwner
 	return c
@@ -6659,7 +6886,7 @@
 	//   ],
 	//   "parameters": {
 	//     "onBehalfOfContentOwner": {
-	//       "description": "USE_DESCRIPTION --- channels:list:onBehalfOfContentOwner",
+	//       "description": "The onBehalfOfContentOwner parameter indicates that the authenticated user is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The actual CMS account that the user authenticates with needs to be linked to the specified YouTube content owner.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
@@ -7171,7 +7398,7 @@
 	//       "type": "string"
 	//     },
 	//     "part": {
-	//       "description": "The part parameter serves two purposes in this operation. It identifies the properties that the write operation will set as well as the properties that the API response will include.\n\nThe part names that you can include in the parameter value are snippet, contentDetails, fileDetails, player, processingDetails, recordingDetails, statistics, status, suggestions, and topicDetails. However, not all of those parts contain properties that can be set when setting or updating a video's metadata. For example, the statistics object encapsulates statistics that YouTube calculates for a video and does not contain values that you can set or modify. If the parameter value specifies a part that does not contain mutable values, that part will still be included in the API response.",
+	//       "description": "The part parameter serves two purposes in this operation. It identifies the properties that the write operation will set as well as the properties that the API response will include.\n\nThe part names that you can include in the parameter value are snippet, contentDetails, fileDetails, liveStreamingDetails, player, processingDetails, recordingDetails, statistics, status, suggestions, and topicDetails. However, not all of those parts contain properties that can be set when setting or updating a video's metadata. For example, the statistics object encapsulates statistics that YouTube calculates for a video and does not contain values that you can set or modify. If the parameter value specifies a part that does not contain mutable values, that part will still be included in the API response.",
 	//       "location": "query",
 	//       "required": true,
 	//       "type": "string"
@@ -7291,8 +7518,9 @@
 
 // RegionCode sets the optional parameter "regionCode": The regionCode
 // parameter instructs the API to select a video chart available in the
-// specified region. If using this parameter, chart must also be set.
-// The parameter value is an ISO 3166-1 alpha-2 country code.
+// specified region. This parameter can only be used in conjunction with
+// the chart parameter. The parameter value is an ISO 3166-1 alpha-2
+// country code.
 func (c *VideosListCall) RegionCode(regionCode string) *VideosListCall {
 	c.opt_["regionCode"] = regionCode
 	return c
@@ -7420,13 +7648,13 @@
 	//       "type": "string"
 	//     },
 	//     "part": {
-	//       "description": "The part parameter specifies a comma-separated list of one or more video resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, contentDetails, fileDetails, player, processingDetails, recordingDetails, statistics, status, suggestions, and topicDetails.\n\nIf the parameter identifies a property that contains child properties, the child properties will be included in the response. For example, in a video resource, the snippet property contains the channelId, title, description, tags, and categoryId properties. As such, if you set part=snippet, the API response will contain all of those properties.",
+	//       "description": "The part parameter specifies a comma-separated list of one or more video resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, contentDetails, fileDetails, liveStreamingDetails, player, processingDetails, recordingDetails, statistics, status, suggestions, and topicDetails.\n\nIf the parameter identifies a property that contains child properties, the child properties will be included in the response. For example, in a video resource, the snippet property contains the channelId, title, description, tags, and categoryId properties. As such, if you set part=snippet, the API response will contain all of those properties.",
 	//       "location": "query",
 	//       "required": true,
 	//       "type": "string"
 	//     },
 	//     "regionCode": {
-	//       "description": "The regionCode parameter instructs the API to select a video chart available in the specified region. If using this parameter, chart must also be set. The parameter value is an ISO 3166-1 alpha-2 country code.",
+	//       "description": "The regionCode parameter instructs the API to select a video chart available in the specified region. This parameter can only be used in conjunction with the chart parameter. The parameter value is an ISO 3166-1 alpha-2 country code.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
@@ -7638,7 +7866,7 @@
 	//       "type": "string"
 	//     },
 	//     "part": {
-	//       "description": "The part parameter serves two purposes in this operation. It identifies the properties that the write operation will set as well as the properties that the API response will include.\n\nThe part names that you can include in the parameter value are snippet, contentDetails, fileDetails, player, processingDetails, recordingDetails, statistics, status, suggestions, and topicDetails.\n\nNote that this method will override the existing values for all of the mutable properties that are contained in any parts that the parameter value specifies. For example, a video's privacy setting is contained in the status part. As such, if your request is updating a private video, and the request's part parameter value includes the status part, the video's privacy setting will be updated to whatever value the request body specifies. If the request body does not specify a value, the existing privacy setting will be removed and the video will revert to the default privacy setting.\n\nIn addition, not all of those parts contain properties that can be set when setting or updating a video's metadata. For example, the statistics object encapsulates statistics that YouTube calculates for a video and does not contain values that you can set or modify. If the parameter value specifies a part that does not contain mutable values, that part will still be included in the API response.",
+	//       "description": "The part parameter serves two purposes in this operation. It identifies the properties that the write operation will set as well as the properties that the API response will include.\n\nThe part names that you can include in the parameter value are snippet, contentDetails, fileDetails, liveStreamingDetails, player, processingDetails, recordingDetails, statistics, status, suggestions, and topicDetails.\n\nNote that this method will override the existing values for all of the mutable properties that are contained in any parts that the parameter value specifies. For example, a video's privacy setting is contained in the status part. As such, if your request is updating a private video, and the request's part parameter value includes the status part, the video's privacy setting will be updated to whatever value the request body specifies. If the request body does not specify a value, the existing privacy setting will be removed and the video will revert to the default privacy setting.\n\nIn addition, not all of those parts contain properties that can be set when setting or updating a video's metadata. For example, the statistics object encapsulates statistics that YouTube calculates for a video and does not contain values that you can set or modify. If the parameter value specifies a part that does not contain mutable values, that part will still be included in the API response.",
 	//       "location": "query",
 	//       "required": true,
 	//       "type": "string"
@@ -7678,8 +7906,15 @@
 }
 
 // OnBehalfOfContentOwner sets the optional parameter
-// "onBehalfOfContentOwner": USE_DESCRIPTION ---
-// channels:list:onBehalfOfContentOwner
+// "onBehalfOfContentOwner": The onBehalfOfContentOwner parameter
+// indicates that the authenticated user is acting on behalf of the
+// content owner specified in the parameter value. This parameter is
+// intended for YouTube content partners that own and manage many
+// different YouTube channels. It allows content owners to authenticate
+// once and get access to all their video and channel data, without
+// having to provide authentication credentials for each individual
+// channel. The actual CMS account that the user authenticates with
+// needs to be linked to the specified YouTube content owner.
 func (c *WatermarksSetCall) OnBehalfOfContentOwner(onBehalfOfContentOwner string) *WatermarksSetCall {
 	c.opt_["onBehalfOfContentOwner"] = onBehalfOfContentOwner
 	return c
@@ -7758,7 +7993,7 @@
 	//       "type": "string"
 	//     },
 	//     "onBehalfOfContentOwner": {
-	//       "description": "USE_DESCRIPTION --- channels:list:onBehalfOfContentOwner",
+	//       "description": "The onBehalfOfContentOwner parameter indicates that the authenticated user is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The actual CMS account that the user authenticates with needs to be linked to the specified YouTube content owner.",
 	//       "location": "query",
 	//       "type": "string"
 	//     }
@@ -7793,8 +8028,15 @@
 }
 
 // OnBehalfOfContentOwner sets the optional parameter
-// "onBehalfOfContentOwner": USE_DESCRIPTION ---
-// channels:list:onBehalfOfContentOwner
+// "onBehalfOfContentOwner": The onBehalfOfContentOwner parameter
+// indicates that the authenticated user is acting on behalf of the
+// content owner specified in the parameter value. This parameter is
+// intended for YouTube content partners that own and manage many
+// different YouTube channels. It allows content owners to authenticate
+// once and get access to all their video and channel data, without
+// having to provide authentication credentials for each individual
+// channel. The actual CMS account that the user authenticates with
+// needs to be linked to the specified YouTube content owner.
 func (c *WatermarksUnsetCall) OnBehalfOfContentOwner(onBehalfOfContentOwner string) *WatermarksUnsetCall {
 	c.opt_["onBehalfOfContentOwner"] = onBehalfOfContentOwner
 	return c
@@ -7837,7 +8079,7 @@
 	//       "type": "string"
 	//     },
 	//     "onBehalfOfContentOwner": {
-	//       "description": "USE_DESCRIPTION --- channels:list:onBehalfOfContentOwner",
+	//       "description": "The onBehalfOfContentOwner parameter indicates that the authenticated user is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The actual CMS account that the user authenticates with needs to be linked to the specified YouTube content owner.",
 	//       "location": "query",
 	//       "type": "string"
 	//     }
diff --git a/youtubeanalytics/v1/youtubeanalytics-api.json b/youtubeanalytics/v1/youtubeanalytics-api.json
index 902d763..5d8110b 100644
--- a/youtubeanalytics/v1/youtubeanalytics-api.json
+++ b/youtubeanalytics/v1/youtubeanalytics-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/kPorrLDyuheH1ieTSliAYMROi5Y\"",
+ "etag": "\"qMhxoRFWKZK4K3KdZJuqms1o3fc/kPorrLDyuheH1ieTSliAYMROi5Y\"",
  "discoveryVersion": "v1",
  "id": "youtubeAnalytics:v1",
  "name": "youtubeAnalytics",
diff --git a/youtubeanalytics/v1beta1/youtubeanalytics-api.json b/youtubeanalytics/v1beta1/youtubeanalytics-api.json
index ee6ab44..9ffd4e8 100644
--- a/youtubeanalytics/v1beta1/youtubeanalytics-api.json
+++ b/youtubeanalytics/v1beta1/youtubeanalytics-api.json
@@ -1,6 +1,6 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/7P28-qEy1_CxJUow-ylkQfHZJdE\"",
+ "etag": "\"qMhxoRFWKZK4K3KdZJuqms1o3fc/7P28-qEy1_CxJUow-ylkQfHZJdE\"",
  "discoveryVersion": "v1",
  "id": "youtubeAnalytics:v1beta1",
  "name": "youtubeAnalytics",