all: new and updated APIs

LGTM=gmlewis
R=gmlewis
CC=golang-codereviews
https://codereview.appspot.com/131890043
diff --git a/adexchangebuyer/v1.1/adexchangebuyer-api.json b/adexchangebuyer/v1.1/adexchangebuyer-api.json
index ae76fbc..7f8be9a 100644
--- a/adexchangebuyer/v1.1/adexchangebuyer-api.json
+++ b/adexchangebuyer/v1.1/adexchangebuyer-api.json
@@ -1,13 +1,14 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/sSrTRK5rT30gpj08DDODwXhxRak\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/_YnjZ9K0Y0VUDpIcxTyXmrce57E\"",
  "discoveryVersion": "v1",
  "id": "adexchangebuyer:v1.1",
  "name": "adexchangebuyer",
  "canonicalName": "Ad Exchange Buyer",
  "version": "v1.1",
+ "revision": "20140812",
  "title": "Ad Exchange Buyer API",
- "description": "Lets you manage your Ad Exchange Buyer account.",
+ "description": "Accesses your bidding-account information, submits creatives for validation, finds available direct deals, and retrieves performance reports.",
  "ownerDomain": "google.com",
  "ownerName": "Google",
  "icons": {
diff --git a/adexchangebuyer/v1.2/adexchangebuyer-api.json b/adexchangebuyer/v1.2/adexchangebuyer-api.json
index 300fa30..c53fea0 100644
--- a/adexchangebuyer/v1.2/adexchangebuyer-api.json
+++ b/adexchangebuyer/v1.2/adexchangebuyer-api.json
@@ -1,13 +1,14 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"C11OM5Qtr9122-scy_WeqND9D3o/LoRIMAKoKzC_3pYWoD_xTQpbqyo\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/AJO4ezPUJU7DJlps27fkVxvYLcI\"",
  "discoveryVersion": "v1",
  "id": "adexchangebuyer:v1.2",
  "name": "adexchangebuyer",
  "canonicalName": "Ad Exchange Buyer",
  "version": "v1.2",
+ "revision": "20140812",
  "title": "Ad Exchange Buyer API",
- "description": "Lets you manage your Ad Exchange Buyer account.",
+ "description": "Accesses your bidding-account information, submits creatives for validation, finds available direct deals, and retrieves performance reports.",
  "ownerDomain": "google.com",
  "ownerName": "Google",
  "icons": {
diff --git a/adexchangebuyer/v1.3/adexchangebuyer-api.json b/adexchangebuyer/v1.3/adexchangebuyer-api.json
index 0e0aa19..706faf2 100644
--- a/adexchangebuyer/v1.3/adexchangebuyer-api.json
+++ b/adexchangebuyer/v1.3/adexchangebuyer-api.json
@@ -1,13 +1,14 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"C11OM5Qtr9122-scy_WeqND9D3o/IppDfK0CjXD9AYpQUEOpRxnDZzg\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/RGPcvGO92y6YyF8hUUCx0o8WiC0\"",
  "discoveryVersion": "v1",
  "id": "adexchangebuyer:v1.3",
  "name": "adexchangebuyer",
  "canonicalName": "Ad Exchange Buyer",
  "version": "v1.3",
+ "revision": "20140812",
  "title": "Ad Exchange Buyer API",
- "description": "Lets you manage your Ad Exchange Buyer account.",
+ "description": "Accesses your bidding-account information, submits creatives for validation, finds available direct deals, and retrieves performance reports.",
  "ownerDomain": "google.com",
  "ownerName": "Google",
  "icons": {
@@ -147,6 +148,53 @@
     }
    }
   },
+  "BillingInfo": {
+   "id": "BillingInfo",
+   "type": "object",
+   "description": "The configuration data for an Ad Exchange billing info.",
+   "properties": {
+    "accountId": {
+     "type": "integer",
+     "description": "Account id.",
+     "format": "int32"
+    },
+    "accountName": {
+     "type": "string",
+     "description": "Account name."
+    },
+    "billingId": {
+     "type": "array",
+     "description": "Billing info id.",
+     "items": {
+      "type": "string"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Resource type.",
+     "default": "adexchangebuyer#billingInfo"
+    }
+   }
+  },
+  "BillingInfoList": {
+   "id": "BillingInfoList",
+   "type": "object",
+   "description": "A billing info feed lists Billing Info the Ad Exchange buyer account has access to. Each entry in the feed corresponds to a single billing info.",
+   "properties": {
+    "items": {
+     "type": "array",
+     "description": "A list of billing info relevant for your account.",
+     "items": {
+      "$ref": "BillingInfo"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Resource type.",
+     "default": "adexchangebuyer#billingInfoList"
+    }
+   }
+  },
   "Creative": {
    "id": "Creative",
    "type": "object",
@@ -874,6 +922,46 @@
     }
    }
   },
+  "billingInfo": {
+   "methods": {
+    "get": {
+     "id": "adexchangebuyer.billingInfo.get",
+     "path": "billinginfo/{accountId}",
+     "httpMethod": "GET",
+     "description": "Returns the billing information for one account specified by account ID.",
+     "parameters": {
+      "accountId": {
+       "type": "integer",
+       "description": "The account id.",
+       "required": true,
+       "format": "int32",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "accountId"
+     ],
+     "response": {
+      "$ref": "BillingInfo"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/adexchange.buyer"
+     ]
+    },
+    "list": {
+     "id": "adexchangebuyer.billingInfo.list",
+     "path": "billinginfo",
+     "httpMethod": "GET",
+     "description": "Retrieves a list of billing information for all accounts of the authenticated user.",
+     "response": {
+      "$ref": "BillingInfoList"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/adexchange.buyer"
+     ]
+    }
+   }
+  },
   "creatives": {
    "methods": {
     "get": {
diff --git a/adexchangebuyer/v1.3/adexchangebuyer-gen.go b/adexchangebuyer/v1.3/adexchangebuyer-gen.go
index 6134d01..2356ca7 100644
--- a/adexchangebuyer/v1.3/adexchangebuyer-gen.go
+++ b/adexchangebuyer/v1.3/adexchangebuyer-gen.go
@@ -51,6 +51,7 @@
 	}
 	s := &Service{client: client, BasePath: basePath}
 	s.Accounts = NewAccountsService(s)
+	s.BillingInfo = NewBillingInfoService(s)
 	s.Creatives = NewCreativesService(s)
 	s.DirectDeals = NewDirectDealsService(s)
 	s.PerformanceReport = NewPerformanceReportService(s)
@@ -64,6 +65,8 @@
 
 	Accounts *AccountsService
 
+	BillingInfo *BillingInfoService
+
 	Creatives *CreativesService
 
 	DirectDeals *DirectDealsService
@@ -82,6 +85,15 @@
 	s *Service
 }
 
+func NewBillingInfoService(s *Service) *BillingInfoService {
+	rs := &BillingInfoService{s: s}
+	return rs
+}
+
+type BillingInfoService struct {
+	s *Service
+}
+
 func NewCreativesService(s *Service) *CreativesService {
 	rs := &CreativesService{s: s}
 	return rs
@@ -168,6 +180,28 @@
 	Kind string `json:"kind,omitempty"`
 }
 
+type BillingInfo struct {
+	// AccountId: Account id.
+	AccountId int64 `json:"accountId,omitempty"`
+
+	// AccountName: Account name.
+	AccountName string `json:"accountName,omitempty"`
+
+	// BillingId: Billing info id.
+	BillingId []string `json:"billingId,omitempty"`
+
+	// Kind: Resource type.
+	Kind string `json:"kind,omitempty"`
+}
+
+type BillingInfoList struct {
+	// Items: A list of billing info relevant for your account.
+	Items []*BillingInfo `json:"items,omitempty"`
+
+	// Kind: Resource type.
+	Kind string `json:"kind,omitempty"`
+}
+
 type Creative struct {
 	// HTMLSnippet: The HTML snippet that displays the ad when inserted in
 	// the web page. If set, videoURL should not be set.
@@ -824,6 +858,124 @@
 
 }
 
+// method id "adexchangebuyer.billingInfo.get":
+
+type BillingInfoGetCall struct {
+	s         *Service
+	accountId int64
+	opt_      map[string]interface{}
+}
+
+// Get: Returns the billing information for one account specified by
+// account ID.
+func (r *BillingInfoService) Get(accountId int64) *BillingInfoGetCall {
+	c := &BillingInfoGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.accountId = accountId
+	return c
+}
+
+func (c *BillingInfoGetCall) Do() (*BillingInfo, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "billinginfo/{accountId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"accountId": strconv.FormatInt(c.accountId, 10),
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *BillingInfo
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Returns the billing information for one account specified by account ID.",
+	//   "httpMethod": "GET",
+	//   "id": "adexchangebuyer.billingInfo.get",
+	//   "parameterOrder": [
+	//     "accountId"
+	//   ],
+	//   "parameters": {
+	//     "accountId": {
+	//       "description": "The account id.",
+	//       "format": "int32",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "integer"
+	//     }
+	//   },
+	//   "path": "billinginfo/{accountId}",
+	//   "response": {
+	//     "$ref": "BillingInfo"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adexchange.buyer"
+	//   ]
+	// }
+
+}
+
+// method id "adexchangebuyer.billingInfo.list":
+
+type BillingInfoListCall struct {
+	s    *Service
+	opt_ map[string]interface{}
+}
+
+// List: Retrieves a list of billing information for all accounts of the
+// authenticated user.
+func (r *BillingInfoService) List() *BillingInfoListCall {
+	c := &BillingInfoListCall{s: r.s, opt_: make(map[string]interface{})}
+	return c
+}
+
+func (c *BillingInfoListCall) Do() (*BillingInfoList, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "billinginfo")
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *BillingInfoList
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves a list of billing information for all accounts of the authenticated user.",
+	//   "httpMethod": "GET",
+	//   "id": "adexchangebuyer.billingInfo.list",
+	//   "path": "billinginfo",
+	//   "response": {
+	//     "$ref": "BillingInfoList"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/adexchange.buyer"
+	//   ]
+	// }
+
+}
+
 // method id "adexchangebuyer.creatives.get":
 
 type CreativesGetCall struct {
diff --git a/adexchangebuyer/v1/adexchangebuyer-api.json b/adexchangebuyer/v1/adexchangebuyer-api.json
index 8b02542..de18e86 100644
--- a/adexchangebuyer/v1/adexchangebuyer-api.json
+++ b/adexchangebuyer/v1/adexchangebuyer-api.json
@@ -1,13 +1,14 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/uBdBsKoCx2blJHBc5UBukt70JEU\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/i3M0e8Ed8AaqZfjhj-Y7kpaqBfc\"",
  "discoveryVersion": "v1",
  "id": "adexchangebuyer:v1",
  "name": "adexchangebuyer",
  "canonicalName": "Ad Exchange Buyer",
  "version": "v1",
+ "revision": "20140812",
  "title": "Ad Exchange Buyer API",
- "description": "Lets you manage your Ad Exchange Buyer account.",
+ "description": "Accesses your bidding-account information, submits creatives for validation, finds available direct deals, and retrieves performance reports.",
  "ownerDomain": "google.com",
  "ownerName": "Google",
  "icons": {
diff --git a/adexchangeseller/v1.1/adexchangeseller-api.json b/adexchangeseller/v1.1/adexchangeseller-api.json
index b2b9297..1203607 100644
--- a/adexchangeseller/v1.1/adexchangeseller-api.json
+++ b/adexchangeseller/v1.1/adexchangeseller-api.json
@@ -1,11 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/o4lGc4skdE8M5fsjyXciyvLhoWk\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/izkNl2UwXYl431d7iNVN_c0mTdc\"",
  "discoveryVersion": "v1",
  "id": "adexchangeseller:v1.1",
  "name": "adexchangeseller",
  "canonicalName": "Ad Exchange Seller",
  "version": "v1.1",
+ "revision": "20140818",
  "title": "Ad Exchange Seller API",
  "description": "Gives Ad Exchange seller users access to their inventory and the ability to generate reports",
  "ownerDomain": "google.com",
diff --git a/adexchangeseller/v1/adexchangeseller-api.json b/adexchangeseller/v1/adexchangeseller-api.json
index cae061e..732fb99 100644
--- a/adexchangeseller/v1/adexchangeseller-api.json
+++ b/adexchangeseller/v1/adexchangeseller-api.json
@@ -1,11 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/k4EGd11ZUVmhrZoqHDxlI_JyIAo\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/3o5nbWgZ2ebmwb-6dwEZn6lTRRM\"",
  "discoveryVersion": "v1",
  "id": "adexchangeseller:v1",
  "name": "adexchangeseller",
  "canonicalName": "Ad Exchange Seller",
  "version": "v1",
+ "revision": "20140818",
  "title": "Ad Exchange Seller API",
  "description": "Gives Ad Exchange seller users access to their inventory and the ability to generate reports",
  "ownerDomain": "google.com",
diff --git a/admin/email_migration_v2/admin-api.json b/admin/email_migration_v2/admin-api.json
index b612dbf..57fb91d 100644
--- a/admin/email_migration_v2/admin-api.json
+++ b/admin/email_migration_v2/admin-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/5IR4qYAEytuHObETjxcLeQt8rDQ\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/sAW4O9TJFjBOU_nyFti74xIcDhI\"",
  "discoveryVersion": "v1",
  "id": "admin:email_migration_v2",
  "name": "admin",
  "version": "email_migration_v2",
+ "revision": "20140130",
  "title": "Email Migration API v2",
  "description": "Email Migration API lets you migrate emails of users to Google backends.",
  "ownerDomain": "google.com",
diff --git a/admin/reports_v1/admin-api.json b/admin/reports_v1/admin-api.json
index 0d7cd67..1925340 100644
--- a/admin/reports_v1/admin-api.json
+++ b/admin/reports_v1/admin-api.json
@@ -1,11 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"C11OM5Qtr9122-scy_WeqND9D3o/326vA-FkWTAsBS87tMbdTss8IyI\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/1CnyuAQi1v-9K692tzB6A2cyPVk\"",
  "discoveryVersion": "v1",
  "id": "admin:reports_v1",
  "name": "admin",
  "canonicalName": "reports",
  "version": "reports_v1",
+ "revision": "20140725",
  "title": "Admin Reports API",
  "description": "Allows the administrators of Google Apps customers to fetch reports about the usage, collaboration, security and risk for their users.",
  "ownerDomain": "google.com",
diff --git a/adsense/v1.2/adsense-api.json b/adsense/v1.2/adsense-api.json
index 37a2d32..457224c 100644
--- a/adsense/v1.2/adsense-api.json
+++ b/adsense/v1.2/adsense-api.json
@@ -1,11 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/AIo_7F6prmIO5AKtg_utl79123U\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/DDlWvIUUwlcEBB_pQUa3qNW4_h0\"",
  "discoveryVersion": "v1",
  "id": "adsense:v1.2",
  "name": "adsense",
  "canonicalName": "AdSense",
  "version": "v1.2",
+ "revision": "20140818",
  "title": "AdSense Management API",
  "description": "Gives AdSense publishers access to their inventory and the ability to generate reports",
  "ownerDomain": "google.com",
diff --git a/adsense/v1.3/adsense-api.json b/adsense/v1.3/adsense-api.json
index f511e58..3fece80 100644
--- a/adsense/v1.3/adsense-api.json
+++ b/adsense/v1.3/adsense-api.json
@@ -1,11 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/RY77fvEvdMvjXK9LvO9FVN68TJk\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/mOn8X0iaUqOHvMxfG4gWdYsWc-M\"",
  "discoveryVersion": "v1",
  "id": "adsense:v1.3",
  "name": "adsense",
  "canonicalName": "AdSense",
  "version": "v1.3",
+ "revision": "20140818",
  "title": "AdSense Management API",
  "description": "Gives AdSense publishers access to their inventory and the ability to generate reports",
  "ownerDomain": "google.com",
diff --git a/adsense/v1.4/adsense-api.json b/adsense/v1.4/adsense-api.json
index 51032c3..fafcd00 100644
--- a/adsense/v1.4/adsense-api.json
+++ b/adsense/v1.4/adsense-api.json
@@ -1,11 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/G2IFVrRZc_qYUIJrbpW9h4_B9is\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/NWKqx9OpHBmgM50-l4IkPccEE50\"",
  "discoveryVersion": "v1",
  "id": "adsense:v1.4",
  "name": "adsense",
  "canonicalName": "AdSense",
  "version": "v1.4",
+ "revision": "20140818",
  "title": "AdSense Management API",
  "description": "Gives AdSense publishers access to their inventory and the ability to generate reports",
  "ownerDomain": "google.com",
diff --git a/adsensehost/v4.1/adsensehost-api.json b/adsensehost/v4.1/adsensehost-api.json
index 556f6c8..f0008e2 100644
--- a/adsensehost/v4.1/adsensehost-api.json
+++ b/adsensehost/v4.1/adsensehost-api.json
@@ -1,11 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/sg56Xf_5EyNWaO73kOWKtnVtRUE\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/siE3wsHvk-iF9Tq0BKcBieKWk2w\"",
  "discoveryVersion": "v1",
  "id": "adsensehost:v4.1",
  "name": "adsensehost",
  "canonicalName": "AdSense Host",
  "version": "v4.1",
+ "revision": "20140818",
  "title": "AdSense Host API",
  "description": "Gives AdSense Hosts access to report generation, ad code generation, and publisher management capabilities.",
  "ownerDomain": "google.com",
diff --git a/analytics/v2.4/analytics-api.json b/analytics/v2.4/analytics-api.json
index b7f16cf..c620539 100644
--- a/analytics/v2.4/analytics-api.json
+++ b/analytics/v2.4/analytics-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"C11OM5Qtr9122-scy_WeqND9D3o/rC7evxf6j8LpJCoZJCsaJEaVGbY\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/BKSH4LIFnjmjrIUb-y_VGQJ3F5Q\"",
  "discoveryVersion": "v1",
  "id": "analytics:v2.4",
  "name": "analytics",
  "version": "v2.4",
+ "revision": "20140723",
  "title": "Google Analytics API",
  "description": "View and manage your Google Analytics data",
  "ownerDomain": "google.com",
diff --git a/analytics/v3/analytics-api.json b/analytics/v3/analytics-api.json
index 2c9e4a6..32a791f 100644
--- a/analytics/v3/analytics-api.json
+++ b/analytics/v3/analytics-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"C11OM5Qtr9122-scy_WeqND9D3o/Okz6uD7sX42-Q472w-eBSjs0s8k\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/SYGRjopRmK4Bczs5VKxKJQKTU8s\"",
  "discoveryVersion": "v1",
  "id": "analytics:v3",
  "name": "analytics",
  "version": "v3",
+ "revision": "20140723",
  "title": "Google Analytics API",
  "description": "View and manage your Google Analytics data",
  "ownerDomain": "google.com",
diff --git a/androidpublisher/v1.1/androidpublisher-api.json b/androidpublisher/v1.1/androidpublisher-api.json
index 5e36e6d..349d50b 100644
--- a/androidpublisher/v1.1/androidpublisher-api.json
+++ b/androidpublisher/v1.1/androidpublisher-api.json
@@ -1,11 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"C11OM5Qtr9122-scy_WeqND9D3o/bS1XRqjc6yZk7_4BPKBpe9B9r8M\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/jeIgT3QV13bokLdy4qSXH6yrzsk\"",
  "discoveryVersion": "v1",
  "id": "androidpublisher:v1.1",
  "name": "androidpublisher",
  "canonicalName": "Android Publisher",
  "version": "v1.1",
+ "revision": "20140710",
  "title": "Google Play Android Developer API",
  "description": "Lets Android application developers access their Google Play accounts.",
  "ownerDomain": "google.com",
diff --git a/androidpublisher/v1/androidpublisher-api.json b/androidpublisher/v1/androidpublisher-api.json
index 19d3825..61ea37a 100644
--- a/androidpublisher/v1/androidpublisher-api.json
+++ b/androidpublisher/v1/androidpublisher-api.json
@@ -1,11 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"C11OM5Qtr9122-scy_WeqND9D3o/UUBf3jcU1S7f2gMA7g9Iuwrld9I\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/h4V3iSCdYzfkS1qj8rDB96u3htw\"",
  "discoveryVersion": "v1",
  "id": "androidpublisher:v1",
  "name": "androidpublisher",
  "canonicalName": "Android Publisher",
  "version": "v1",
+ "revision": "20140710",
  "title": "Google Play Android Developer API",
  "description": "Lets Android application developers access their Google Play accounts.",
  "ownerDomain": "google.com",
diff --git a/androidpublisher/v2/androidpublisher-api.json b/androidpublisher/v2/androidpublisher-api.json
new file mode 100644
index 0000000..d7a93a5
--- /dev/null
+++ b/androidpublisher/v2/androidpublisher-api.json
@@ -0,0 +1,2600 @@
+{
+ "kind": "discovery#restDescription",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/SpdF15iP95XJtsE2pYrbnjejwVI\"",
+ "discoveryVersion": "v1",
+ "id": "androidpublisher:v2",
+ "name": "androidpublisher",
+ "canonicalName": "Android Publisher",
+ "version": "v2",
+ "revision": "20140710",
+ "title": "Google Play Android Developer API",
+ "description": "Lets Android application developers access their Google Play accounts.",
+ "ownerDomain": "google.com",
+ "ownerName": "Google",
+ "icons": {
+  "x16": "http://www.google.com/images/icons/product/android-16.png",
+  "x32": "http://www.google.com/images/icons/product/android-32.png"
+ },
+ "documentationLink": "https://developers.google.com/android-publisher",
+ "protocol": "rest",
+ "baseUrl": "https://www.googleapis.com/androidpublisher/v2/applications/",
+ "basePath": "/androidpublisher/v2/applications/",
+ "rootUrl": "https://www.googleapis.com/",
+ "servicePath": "androidpublisher/v2/applications/",
+ "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/androidpublisher": {
+     "description": "View and manage your Google Play Android Developer account"
+    }
+   }
+  }
+ },
+ "schemas": {
+  "Apk": {
+   "id": "Apk",
+   "type": "object",
+   "properties": {
+    "binary": {
+     "$ref": "ApkBinary",
+     "description": "Information about the binary payload of this APK."
+    },
+    "versionCode": {
+     "type": "integer",
+     "description": "The version code of the APK, as specified in the APK's manifest file.",
+     "format": "int32"
+    }
+   }
+  },
+  "ApkBinary": {
+   "id": "ApkBinary",
+   "type": "object",
+   "description": "Represents the binary payload of an APK.",
+   "properties": {
+    "sha1": {
+     "type": "string",
+     "description": "A sha1 hash of the APK payload, encoded as a hex string and matching the output of the sha1sum command."
+    }
+   }
+  },
+  "ApkListing": {
+   "id": "ApkListing",
+   "type": "object",
+   "properties": {
+    "language": {
+     "type": "string",
+     "description": "The language code, in BCP 47 format (eg \"en-US\")."
+    },
+    "recentChanges": {
+     "type": "string",
+     "description": "Describe what's new in your APK."
+    }
+   }
+  },
+  "ApkListingsListResponse": {
+   "id": "ApkListingsListResponse",
+   "type": "object",
+   "properties": {
+    "kind": {
+     "type": "string",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"androidpublisher#apkListingsListResponse\".",
+     "default": "androidpublisher#apkListingsListResponse"
+    },
+    "listings": {
+     "type": "array",
+     "items": {
+      "$ref": "ApkListing"
+     }
+    }
+   }
+  },
+  "ApksListResponse": {
+   "id": "ApksListResponse",
+   "type": "object",
+   "properties": {
+    "apks": {
+     "type": "array",
+     "items": {
+      "$ref": "Apk"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"androidpublisher#apksListResponse\".",
+     "default": "androidpublisher#apksListResponse"
+    }
+   }
+  },
+  "AppDetails": {
+   "id": "AppDetails",
+   "type": "object",
+   "properties": {
+    "contactEmail": {
+     "type": "string",
+     "description": "The user-visible support email for this app."
+    },
+    "contactPhone": {
+     "type": "string",
+     "description": "The user-visible support telephone number for this app."
+    },
+    "contactWebsite": {
+     "type": "string",
+     "description": "The user-visible website for this app."
+    },
+    "defaultLanguage": {
+     "type": "string",
+     "description": "Default language code, in BCP 47 format (eg \"en-US\")."
+    }
+   }
+  },
+  "AppEdit": {
+   "id": "AppEdit",
+   "type": "object",
+   "description": "Represents an edit of an app. An edit allows clients to make multiple changes before committing them in one operation.",
+   "properties": {
+    "expiryTimeSeconds": {
+     "type": "string",
+     "description": "The time at which the edit will expire and will be no longer valid for use in any subsequent API calls (encoded as seconds since the Epoch)."
+    },
+    "id": {
+     "type": "string",
+     "description": "The ID of the edit that can be used in subsequent API calls."
+    }
+   }
+  },
+  "ExpansionFile": {
+   "id": "ExpansionFile",
+   "type": "object",
+   "properties": {
+    "fileSize": {
+     "type": "string",
+     "description": "If set this field indicates that this APK has an Expansion File uploaded to it: this APK does not reference another APK's Expansion File. The field's value is the size of the uploaded Expansion File in bytes.",
+     "format": "int64"
+    },
+    "referencesVersion": {
+     "type": "integer",
+     "description": "If set this APK's Expansion File references another APK's Expansion File. The file_size field will not be set.",
+     "format": "int32"
+    }
+   }
+  },
+  "ExpansionFilesUploadResponse": {
+   "id": "ExpansionFilesUploadResponse",
+   "type": "object",
+   "properties": {
+    "expansionFile": {
+     "$ref": "ExpansionFile"
+    }
+   }
+  },
+  "Image": {
+   "id": "Image",
+   "type": "object",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "A unique id representing this image."
+    },
+    "sha1": {
+     "type": "string",
+     "description": "A sha1 hash of the image that was uploaded."
+    },
+    "url": {
+     "type": "string",
+     "description": "A URL that will serve a preview of the image."
+    }
+   }
+  },
+  "ImagesDeleteAllResponse": {
+   "id": "ImagesDeleteAllResponse",
+   "type": "object",
+   "properties": {
+    "deleted": {
+     "type": "array",
+     "items": {
+      "$ref": "Image"
+     }
+    }
+   }
+  },
+  "ImagesListResponse": {
+   "id": "ImagesListResponse",
+   "type": "object",
+   "properties": {
+    "images": {
+     "type": "array",
+     "items": {
+      "$ref": "Image"
+     }
+    }
+   }
+  },
+  "ImagesUploadResponse": {
+   "id": "ImagesUploadResponse",
+   "type": "object",
+   "properties": {
+    "image": {
+     "$ref": "Image"
+    }
+   }
+  },
+  "InAppProduct": {
+   "id": "InAppProduct",
+   "type": "object",
+   "properties": {
+    "defaultLanguage": {
+     "type": "string",
+     "description": "The default language of the localized data, as defined by BCP 47. e.g. \"en-US\", \"en-GB\"."
+    },
+    "defaultPrice": {
+     "$ref": "Price",
+     "description": "Default price cannot be zero. In-app products can never be free. Default price is always in the developer's Checkout merchant currency."
+    },
+    "listings": {
+     "type": "object",
+     "description": "List of localized title and description data.",
+     "additionalProperties": {
+      "$ref": "InAppProductListing",
+      "description": "The language of the localized data, as defined by BCP 47. i.e.: \"en-US\", \"en-GB\"."
+     }
+    },
+    "packageName": {
+     "type": "string",
+     "description": "The package name of the parent app."
+    },
+    "prices": {
+     "type": "object",
+     "description": "Prices per buyer region. None of these prices should be zero. In-app products can never be free.",
+     "additionalProperties": {
+      "$ref": "Price",
+      "description": "Region code, as defined by ISO 3166-2."
+     }
+    },
+    "purchaseType": {
+     "type": "string",
+     "description": "Purchase type enum value. Unmodifiable after creation."
+    },
+    "sku": {
+     "type": "string",
+     "description": "The stock-keeping-unit (SKU) of the product, unique within an app."
+    },
+    "status": {
+     "type": "string"
+    },
+    "subscriptionPeriod": {
+     "type": "string",
+     "description": "The period of the subscription (if any), i.e. period at which payments must happen. Defined as ISO 8601 duration, i.e. \"P1M\" for 1 month period."
+    },
+    "trialPeriod": {
+     "type": "string",
+     "description": "Trial duration (if any) of the subscription, defined as ISO 8601. i.e. \"P10D\" means an initial period of 10 days during which ownership is granted prior to any payment. Acceptable values are between \"P7D\" and \"P999D\"."
+    }
+   }
+  },
+  "InAppProductListing": {
+   "id": "InAppProductListing",
+   "type": "object",
+   "properties": {
+    "description": {
+     "type": "string"
+    },
+    "title": {
+     "type": "string"
+    }
+   }
+  },
+  "InappproductsBatchRequest": {
+   "id": "InappproductsBatchRequest",
+   "type": "object",
+   "properties": {
+    "entrys": {
+     "type": "array",
+     "items": {
+      "$ref": "InappproductsBatchRequestEntry"
+     }
+    }
+   }
+  },
+  "InappproductsBatchRequestEntry": {
+   "id": "InappproductsBatchRequestEntry",
+   "type": "object",
+   "properties": {
+    "batchId": {
+     "type": "integer",
+     "format": "uint32"
+    },
+    "inappproductsinsertrequest": {
+     "$ref": "InappproductsInsertRequest"
+    },
+    "inappproductsupdaterequest": {
+     "$ref": "InappproductsUpdateRequest"
+    },
+    "methodName": {
+     "type": "string"
+    }
+   }
+  },
+  "InappproductsBatchResponse": {
+   "id": "InappproductsBatchResponse",
+   "type": "object",
+   "properties": {
+    "entrys": {
+     "type": "array",
+     "items": {
+      "$ref": "InappproductsBatchResponseEntry"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"androidpublisher#inappproductsBatchResponse\".",
+     "default": "androidpublisher#inappproductsBatchResponse"
+    }
+   }
+  },
+  "InappproductsBatchResponseEntry": {
+   "id": "InappproductsBatchResponseEntry",
+   "type": "object",
+   "properties": {
+    "batchId": {
+     "type": "integer",
+     "format": "uint32"
+    },
+    "inappproductsinsertresponse": {
+     "$ref": "InappproductsInsertResponse"
+    },
+    "inappproductsupdateresponse": {
+     "$ref": "InappproductsUpdateResponse"
+    }
+   }
+  },
+  "InappproductsInsertRequest": {
+   "id": "InappproductsInsertRequest",
+   "type": "object",
+   "properties": {
+    "inappproduct": {
+     "$ref": "InAppProduct"
+    }
+   }
+  },
+  "InappproductsInsertResponse": {
+   "id": "InappproductsInsertResponse",
+   "type": "object",
+   "properties": {
+    "inappproduct": {
+     "$ref": "InAppProduct"
+    }
+   }
+  },
+  "InappproductsListResponse": {
+   "id": "InappproductsListResponse",
+   "type": "object",
+   "properties": {
+    "inappproduct": {
+     "type": "array",
+     "items": {
+      "$ref": "InAppProduct"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"androidpublisher#inappproductsListResponse\".",
+     "default": "androidpublisher#inappproductsListResponse"
+    },
+    "pageInfo": {
+     "$ref": "PageInfo"
+    },
+    "tokenPagination": {
+     "$ref": "TokenPagination"
+    }
+   }
+  },
+  "InappproductsUpdateRequest": {
+   "id": "InappproductsUpdateRequest",
+   "type": "object",
+   "properties": {
+    "inappproduct": {
+     "$ref": "InAppProduct"
+    }
+   }
+  },
+  "InappproductsUpdateResponse": {
+   "id": "InappproductsUpdateResponse",
+   "type": "object",
+   "properties": {
+    "inappproduct": {
+     "$ref": "InAppProduct"
+    }
+   }
+  },
+  "Listing": {
+   "id": "Listing",
+   "type": "object",
+   "properties": {
+    "fullDescription": {
+     "type": "string",
+     "description": "Full description of the app; this may be up to 4000 characters in length."
+    },
+    "language": {
+     "type": "string",
+     "description": "Language localization code (for example, \"de-AT\" for Austrian German)."
+    },
+    "shortDescription": {
+     "type": "string",
+     "description": "Short description of the app (previously known as promo text); this may be up to 80 characters in length."
+    },
+    "title": {
+     "type": "string",
+     "description": "App's localized title."
+    },
+    "video": {
+     "type": "string",
+     "description": "URL of a promotional YouTube video for the app."
+    }
+   }
+  },
+  "ListingsListResponse": {
+   "id": "ListingsListResponse",
+   "type": "object",
+   "properties": {
+    "kind": {
+     "type": "string",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"androidpublisher#listingsListResponse\".",
+     "default": "androidpublisher#listingsListResponse"
+    },
+    "listings": {
+     "type": "array",
+     "items": {
+      "$ref": "Listing"
+     }
+    }
+   }
+  },
+  "PageInfo": {
+   "id": "PageInfo",
+   "type": "object",
+   "properties": {
+    "resultPerPage": {
+     "type": "integer",
+     "format": "int32"
+    },
+    "startIndex": {
+     "type": "integer",
+     "format": "int32"
+    },
+    "totalResults": {
+     "type": "integer",
+     "format": "int32"
+    }
+   }
+  },
+  "Price": {
+   "id": "Price",
+   "type": "object",
+   "properties": {
+    "currency": {
+     "type": "string",
+     "description": "3 letter Currency code, as defined by ISO 4217."
+    },
+    "priceMicros": {
+     "type": "string",
+     "description": "The price in millionths of the currency base unit represented as a string."
+    }
+   }
+  },
+  "ProductPurchase": {
+   "id": "ProductPurchase",
+   "type": "object",
+   "description": "A ProductPurchase resource indicates the status of a user's inapp product purchase.",
+   "properties": {
+    "consumptionState": {
+     "type": "integer",
+     "description": "The consumption state of the inapp product. Possible values are:  \n- Yet to be consumed \n- Consumed",
+     "format": "int32"
+    },
+    "developerPayload": {
+     "type": "string",
+     "description": "A developer-specified string that contains supplemental information about an order."
+    },
+    "kind": {
+     "type": "string",
+     "description": "This kind represents an inappPurchase object in the androidpublisher service.",
+     "default": "androidpublisher#productPurchase"
+    },
+    "purchaseState": {
+     "type": "integer",
+     "description": "The purchase state of the order. Possible values are:  \n- Purchased \n- Cancelled",
+     "format": "int32"
+    },
+    "purchaseTimeMillis": {
+     "type": "string",
+     "description": "The time the product was purchased, in milliseconds since the epoch (Jan 1, 1970).",
+     "format": "int64"
+    }
+   }
+  },
+  "SubscriptionPurchase": {
+   "id": "SubscriptionPurchase",
+   "type": "object",
+   "description": "A SubscriptionPurchase resource indicates the status of a user's subscription purchase.",
+   "properties": {
+    "autoRenewing": {
+     "type": "boolean",
+     "description": "Whether the subscription will automatically be renewed when it reaches its current expiry time."
+    },
+    "expiryTimeMillis": {
+     "type": "string",
+     "description": "Time at which the subscription will expire, in milliseconds since Epoch.",
+     "format": "int64"
+    },
+    "kind": {
+     "type": "string",
+     "description": "This kind represents a subscriptionPurchase object in the androidpublisher service.",
+     "default": "androidpublisher#subscriptionPurchase"
+    },
+    "startTimeMillis": {
+     "type": "string",
+     "description": "Time at which the subscription was granted, in milliseconds since Epoch.",
+     "format": "int64"
+    }
+   }
+  },
+  "Testers": {
+   "id": "Testers",
+   "type": "object",
+   "properties": {
+    "googleGroups": {
+     "type": "array",
+     "items": {
+      "type": "string"
+     }
+    },
+    "googlePlusCommunities": {
+     "type": "array",
+     "items": {
+      "type": "string"
+     }
+    }
+   }
+  },
+  "TokenPagination": {
+   "id": "TokenPagination",
+   "type": "object",
+   "properties": {
+    "nextPageToken": {
+     "type": "string"
+    },
+    "previousPageToken": {
+     "type": "string"
+    }
+   }
+  },
+  "Track": {
+   "id": "Track",
+   "type": "object",
+   "properties": {
+    "track": {
+     "type": "string"
+    },
+    "userFraction": {
+     "type": "number",
+     "format": "double"
+    },
+    "versionCodes": {
+     "type": "array",
+     "items": {
+      "type": "integer",
+      "format": "int32"
+     }
+    }
+   }
+  },
+  "TracksListResponse": {
+   "id": "TracksListResponse",
+   "type": "object",
+   "properties": {
+    "kind": {
+     "type": "string",
+     "description": "Identifies what kind of resource this is. Value: the fixed string \"androidpublisher#tracksListResponse\".",
+     "default": "androidpublisher#tracksListResponse"
+    },
+    "tracks": {
+     "type": "array",
+     "items": {
+      "$ref": "Track"
+     }
+    }
+   }
+  }
+ },
+ "resources": {
+  "edits": {
+   "methods": {
+    "commit": {
+     "id": "androidpublisher.edits.commit",
+     "path": "{packageName}/edits/{editId}:commit",
+     "httpMethod": "POST",
+     "description": "Commits/applies the changes made in this edit back to the app.",
+     "parameters": {
+      "editId": {
+       "type": "string",
+       "description": "Unique identifier for this edit.",
+       "required": true,
+       "location": "path"
+      },
+      "packageName": {
+       "type": "string",
+       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "packageName",
+      "editId"
+     ],
+     "response": {
+      "$ref": "AppEdit"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/androidpublisher"
+     ]
+    },
+    "delete": {
+     "id": "androidpublisher.edits.delete",
+     "path": "{packageName}/edits/{editId}",
+     "httpMethod": "DELETE",
+     "description": "Deletes an edit for an app. Creating a new edit will automatically delete any of your previous edits so this method need only be called if you want to preemptively abandon an edit.",
+     "parameters": {
+      "editId": {
+       "type": "string",
+       "description": "Unique identifier for this edit.",
+       "required": true,
+       "location": "path"
+      },
+      "packageName": {
+       "type": "string",
+       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "packageName",
+      "editId"
+     ],
+     "scopes": [
+      "https://www.googleapis.com/auth/androidpublisher"
+     ]
+    },
+    "get": {
+     "id": "androidpublisher.edits.get",
+     "path": "{packageName}/edits/{editId}",
+     "httpMethod": "GET",
+     "description": "Returns information about the edit specified. Calls will fail if the edit is no long active (e.g. has been deleted, superseded or expired).",
+     "parameters": {
+      "editId": {
+       "type": "string",
+       "description": "Unique identifier for this edit.",
+       "required": true,
+       "location": "path"
+      },
+      "packageName": {
+       "type": "string",
+       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "packageName",
+      "editId"
+     ],
+     "response": {
+      "$ref": "AppEdit"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/androidpublisher"
+     ]
+    },
+    "insert": {
+     "id": "androidpublisher.edits.insert",
+     "path": "{packageName}/edits",
+     "httpMethod": "POST",
+     "description": "Creates a new edit for an app, populated with the app's current state.",
+     "parameters": {
+      "packageName": {
+       "type": "string",
+       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "packageName"
+     ],
+     "request": {
+      "$ref": "AppEdit"
+     },
+     "response": {
+      "$ref": "AppEdit"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/androidpublisher"
+     ]
+    }
+   },
+   "resources": {
+    "apklistings": {
+     "methods": {
+      "delete": {
+       "id": "androidpublisher.edits.apklistings.delete",
+       "path": "{packageName}/edits/{editId}/apks/{apkVersionCode}/listings/{language}",
+       "httpMethod": "DELETE",
+       "description": "Deletes the APK-specific localized listing for a specified APK and language code.",
+       "parameters": {
+        "apkVersionCode": {
+         "type": "integer",
+         "description": "The APK version code whose APK-specific listings should be read or modified.",
+         "required": true,
+         "format": "int32",
+         "location": "path"
+        },
+        "editId": {
+         "type": "string",
+         "description": "Unique identifier for this edit.",
+         "required": true,
+         "location": "path"
+        },
+        "language": {
+         "type": "string",
+         "description": "The language code (a BCP-47 language tag) of the APK-specific localized listing to read or modify. For example, to select Austrian German, pass \"de-AT\".",
+         "required": true,
+         "location": "path"
+        },
+        "packageName": {
+         "type": "string",
+         "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "packageName",
+        "editId",
+        "apkVersionCode",
+        "language"
+       ],
+       "scopes": [
+        "https://www.googleapis.com/auth/androidpublisher"
+       ]
+      },
+      "deleteall": {
+       "id": "androidpublisher.edits.apklistings.deleteall",
+       "path": "{packageName}/edits/{editId}/apks/{apkVersionCode}/listings",
+       "httpMethod": "DELETE",
+       "description": "Deletes all the APK-specific localized listings for a specified APK.",
+       "parameters": {
+        "apkVersionCode": {
+         "type": "integer",
+         "description": "The APK version code whose APK-specific listings should be read or modified.",
+         "required": true,
+         "format": "int32",
+         "location": "path"
+        },
+        "editId": {
+         "type": "string",
+         "description": "Unique identifier for this edit.",
+         "required": true,
+         "location": "path"
+        },
+        "packageName": {
+         "type": "string",
+         "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "packageName",
+        "editId",
+        "apkVersionCode"
+       ],
+       "scopes": [
+        "https://www.googleapis.com/auth/androidpublisher"
+       ]
+      },
+      "get": {
+       "id": "androidpublisher.edits.apklistings.get",
+       "path": "{packageName}/edits/{editId}/apks/{apkVersionCode}/listings/{language}",
+       "httpMethod": "GET",
+       "description": "Fetches the APK-specific localized listing for a specified APK and language code.",
+       "parameters": {
+        "apkVersionCode": {
+         "type": "integer",
+         "description": "The APK version code whose APK-specific listings should be read or modified.",
+         "required": true,
+         "format": "int32",
+         "location": "path"
+        },
+        "editId": {
+         "type": "string",
+         "description": "Unique identifier for this edit.",
+         "required": true,
+         "location": "path"
+        },
+        "language": {
+         "type": "string",
+         "description": "The language code (a BCP-47 language tag) of the APK-specific localized listing to read or modify. For example, to select Austrian German, pass \"de-AT\".",
+         "required": true,
+         "location": "path"
+        },
+        "packageName": {
+         "type": "string",
+         "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "packageName",
+        "editId",
+        "apkVersionCode",
+        "language"
+       ],
+       "response": {
+        "$ref": "ApkListing"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/androidpublisher"
+       ]
+      },
+      "list": {
+       "id": "androidpublisher.edits.apklistings.list",
+       "path": "{packageName}/edits/{editId}/apks/{apkVersionCode}/listings",
+       "httpMethod": "GET",
+       "description": "Lists all the APK-specific localized listings for a specified APK.",
+       "parameters": {
+        "apkVersionCode": {
+         "type": "integer",
+         "description": "The APK version code whose APK-specific listings should be read or modified.",
+         "required": true,
+         "format": "int32",
+         "location": "path"
+        },
+        "editId": {
+         "type": "string",
+         "description": "Unique identifier for this edit.",
+         "required": true,
+         "location": "path"
+        },
+        "packageName": {
+         "type": "string",
+         "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "packageName",
+        "editId",
+        "apkVersionCode"
+       ],
+       "response": {
+        "$ref": "ApkListingsListResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/androidpublisher"
+       ]
+      },
+      "patch": {
+       "id": "androidpublisher.edits.apklistings.patch",
+       "path": "{packageName}/edits/{editId}/apks/{apkVersionCode}/listings/{language}",
+       "httpMethod": "PATCH",
+       "description": "Updates or creates the APK-specific localized listing for a specified APK and language code. This method supports patch semantics.",
+       "parameters": {
+        "apkVersionCode": {
+         "type": "integer",
+         "description": "The APK version code whose APK-specific listings should be read or modified.",
+         "required": true,
+         "format": "int32",
+         "location": "path"
+        },
+        "editId": {
+         "type": "string",
+         "description": "Unique identifier for this edit.",
+         "required": true,
+         "location": "path"
+        },
+        "language": {
+         "type": "string",
+         "description": "The language code (a BCP-47 language tag) of the APK-specific localized listing to read or modify. For example, to select Austrian German, pass \"de-AT\".",
+         "required": true,
+         "location": "path"
+        },
+        "packageName": {
+         "type": "string",
+         "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "packageName",
+        "editId",
+        "apkVersionCode",
+        "language"
+       ],
+       "request": {
+        "$ref": "ApkListing"
+       },
+       "response": {
+        "$ref": "ApkListing"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/androidpublisher"
+       ]
+      },
+      "update": {
+       "id": "androidpublisher.edits.apklistings.update",
+       "path": "{packageName}/edits/{editId}/apks/{apkVersionCode}/listings/{language}",
+       "httpMethod": "PUT",
+       "description": "Updates or creates the APK-specific localized listing for a specified APK and language code.",
+       "parameters": {
+        "apkVersionCode": {
+         "type": "integer",
+         "description": "The APK version code whose APK-specific listings should be read or modified.",
+         "required": true,
+         "format": "int32",
+         "location": "path"
+        },
+        "editId": {
+         "type": "string",
+         "description": "Unique identifier for this edit.",
+         "required": true,
+         "location": "path"
+        },
+        "language": {
+         "type": "string",
+         "description": "The language code (a BCP-47 language tag) of the APK-specific localized listing to read or modify. For example, to select Austrian German, pass \"de-AT\".",
+         "required": true,
+         "location": "path"
+        },
+        "packageName": {
+         "type": "string",
+         "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "packageName",
+        "editId",
+        "apkVersionCode",
+        "language"
+       ],
+       "request": {
+        "$ref": "ApkListing"
+       },
+       "response": {
+        "$ref": "ApkListing"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/androidpublisher"
+       ]
+      }
+     }
+    },
+    "apks": {
+     "methods": {
+      "list": {
+       "id": "androidpublisher.edits.apks.list",
+       "path": "{packageName}/edits/{editId}/apks",
+       "httpMethod": "GET",
+       "parameters": {
+        "editId": {
+         "type": "string",
+         "description": "Unique identifier for this edit.",
+         "required": true,
+         "location": "path"
+        },
+        "packageName": {
+         "type": "string",
+         "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "packageName",
+        "editId"
+       ],
+       "response": {
+        "$ref": "ApksListResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/androidpublisher"
+       ]
+      },
+      "upload": {
+       "id": "androidpublisher.edits.apks.upload",
+       "path": "{packageName}/edits/{editId}/apks",
+       "httpMethod": "POST",
+       "parameters": {
+        "editId": {
+         "type": "string",
+         "description": "Unique identifier for this edit.",
+         "required": true,
+         "location": "path"
+        },
+        "packageName": {
+         "type": "string",
+         "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "packageName",
+        "editId"
+       ],
+       "response": {
+        "$ref": "Apk"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/androidpublisher"
+       ],
+       "supportsMediaUpload": true,
+       "mediaUpload": {
+        "accept": [
+         "application/octet-stream",
+         "application/vnd.android.package-archive"
+        ],
+        "maxSize": "50MB",
+        "protocols": {
+         "simple": {
+          "multipart": true,
+          "path": "/upload/androidpublisher/v2/applications/{packageName}/edits/{editId}/apks"
+         },
+         "resumable": {
+          "multipart": true,
+          "path": "/resumable/upload/androidpublisher/v2/applications/{packageName}/edits/{editId}/apks"
+         }
+        }
+       }
+      }
+     }
+    },
+    "details": {
+     "methods": {
+      "get": {
+       "id": "androidpublisher.edits.details.get",
+       "path": "{packageName}/edits/{editId}/details",
+       "httpMethod": "GET",
+       "description": "Fetches app details for this edit. This includes the default language and developer support contact information.",
+       "parameters": {
+        "editId": {
+         "type": "string",
+         "description": "Unique identifier for this edit.",
+         "required": true,
+         "location": "path"
+        },
+        "packageName": {
+         "type": "string",
+         "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "packageName",
+        "editId"
+       ],
+       "response": {
+        "$ref": "AppDetails"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/androidpublisher"
+       ]
+      },
+      "patch": {
+       "id": "androidpublisher.edits.details.patch",
+       "path": "{packageName}/edits/{editId}/details",
+       "httpMethod": "PATCH",
+       "description": "Updates app details for this edit. This method supports patch semantics.",
+       "parameters": {
+        "editId": {
+         "type": "string",
+         "description": "Unique identifier for this edit.",
+         "required": true,
+         "location": "path"
+        },
+        "packageName": {
+         "type": "string",
+         "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "packageName",
+        "editId"
+       ],
+       "request": {
+        "$ref": "AppDetails"
+       },
+       "response": {
+        "$ref": "AppDetails"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/androidpublisher"
+       ]
+      },
+      "update": {
+       "id": "androidpublisher.edits.details.update",
+       "path": "{packageName}/edits/{editId}/details",
+       "httpMethod": "PUT",
+       "description": "Updates app details for this edit.",
+       "parameters": {
+        "editId": {
+         "type": "string",
+         "description": "Unique identifier for this edit.",
+         "required": true,
+         "location": "path"
+        },
+        "packageName": {
+         "type": "string",
+         "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "packageName",
+        "editId"
+       ],
+       "request": {
+        "$ref": "AppDetails"
+       },
+       "response": {
+        "$ref": "AppDetails"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/androidpublisher"
+       ]
+      }
+     }
+    },
+    "expansionfiles": {
+     "methods": {
+      "get": {
+       "id": "androidpublisher.edits.expansionfiles.get",
+       "path": "{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}",
+       "httpMethod": "GET",
+       "description": "Fetches the Expansion File configuration for the APK specified.",
+       "parameters": {
+        "apkVersionCode": {
+         "type": "integer",
+         "description": "The version code of the APK whose Expansion File configuration is being read or modified.",
+         "required": true,
+         "format": "int32",
+         "location": "path"
+        },
+        "editId": {
+         "type": "string",
+         "description": "Unique identifier for this edit.",
+         "required": true,
+         "location": "path"
+        },
+        "expansionFileType": {
+         "type": "string",
+         "required": true,
+         "enum": [
+          "main",
+          "patch"
+         ],
+         "enumDescriptions": [
+          "",
+          ""
+         ],
+         "location": "path"
+        },
+        "packageName": {
+         "type": "string",
+         "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "packageName",
+        "editId",
+        "apkVersionCode",
+        "expansionFileType"
+       ],
+       "response": {
+        "$ref": "ExpansionFile"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/androidpublisher"
+       ]
+      },
+      "patch": {
+       "id": "androidpublisher.edits.expansionfiles.patch",
+       "path": "{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}",
+       "httpMethod": "PATCH",
+       "description": "Updates the APK's Expansion File configuration to reference another APK's Expansion Files. To add a new Expansion File use the Upload method. This method supports patch semantics.",
+       "parameters": {
+        "apkVersionCode": {
+         "type": "integer",
+         "description": "The version code of the APK whose Expansion File configuration is being read or modified.",
+         "required": true,
+         "format": "int32",
+         "location": "path"
+        },
+        "editId": {
+         "type": "string",
+         "description": "Unique identifier for this edit.",
+         "required": true,
+         "location": "path"
+        },
+        "expansionFileType": {
+         "type": "string",
+         "required": true,
+         "enum": [
+          "main",
+          "patch"
+         ],
+         "enumDescriptions": [
+          "",
+          ""
+         ],
+         "location": "path"
+        },
+        "packageName": {
+         "type": "string",
+         "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "packageName",
+        "editId",
+        "apkVersionCode",
+        "expansionFileType"
+       ],
+       "request": {
+        "$ref": "ExpansionFile"
+       },
+       "response": {
+        "$ref": "ExpansionFile"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/androidpublisher"
+       ]
+      },
+      "update": {
+       "id": "androidpublisher.edits.expansionfiles.update",
+       "path": "{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}",
+       "httpMethod": "PUT",
+       "description": "Updates the APK's Expansion File configuration to reference another APK's Expansion Files. To add a new Expansion File use the Upload method.",
+       "parameters": {
+        "apkVersionCode": {
+         "type": "integer",
+         "description": "The version code of the APK whose Expansion File configuration is being read or modified.",
+         "required": true,
+         "format": "int32",
+         "location": "path"
+        },
+        "editId": {
+         "type": "string",
+         "description": "Unique identifier for this edit.",
+         "required": true,
+         "location": "path"
+        },
+        "expansionFileType": {
+         "type": "string",
+         "required": true,
+         "enum": [
+          "main",
+          "patch"
+         ],
+         "enumDescriptions": [
+          "",
+          ""
+         ],
+         "location": "path"
+        },
+        "packageName": {
+         "type": "string",
+         "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "packageName",
+        "editId",
+        "apkVersionCode",
+        "expansionFileType"
+       ],
+       "request": {
+        "$ref": "ExpansionFile"
+       },
+       "response": {
+        "$ref": "ExpansionFile"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/androidpublisher"
+       ]
+      },
+      "upload": {
+       "id": "androidpublisher.edits.expansionfiles.upload",
+       "path": "{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}",
+       "httpMethod": "POST",
+       "description": "Uploads and attaches a new Expansion File to the APK specified.",
+       "parameters": {
+        "apkVersionCode": {
+         "type": "integer",
+         "description": "The version code of the APK whose Expansion File configuration is being read or modified.",
+         "required": true,
+         "format": "int32",
+         "location": "path"
+        },
+        "editId": {
+         "type": "string",
+         "description": "Unique identifier for this edit.",
+         "required": true,
+         "location": "path"
+        },
+        "expansionFileType": {
+         "type": "string",
+         "required": true,
+         "enum": [
+          "main",
+          "patch"
+         ],
+         "enumDescriptions": [
+          "",
+          ""
+         ],
+         "location": "path"
+        },
+        "packageName": {
+         "type": "string",
+         "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "packageName",
+        "editId",
+        "apkVersionCode",
+        "expansionFileType"
+       ],
+       "response": {
+        "$ref": "ExpansionFilesUploadResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/androidpublisher"
+       ],
+       "supportsMediaUpload": true,
+       "mediaUpload": {
+        "accept": [
+         "application/octet-stream"
+        ],
+        "maxSize": "2048MB",
+        "protocols": {
+         "simple": {
+          "multipart": true,
+          "path": "/upload/androidpublisher/v2/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}"
+         },
+         "resumable": {
+          "multipart": true,
+          "path": "/resumable/upload/androidpublisher/v2/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}"
+         }
+        }
+       }
+      }
+     }
+    },
+    "images": {
+     "methods": {
+      "delete": {
+       "id": "androidpublisher.edits.images.delete",
+       "path": "{packageName}/edits/{editId}/listings/{language}/{imageType}/{imageId}",
+       "httpMethod": "DELETE",
+       "description": "Deletes the image (specified by id) from the edit.",
+       "parameters": {
+        "editId": {
+         "type": "string",
+         "description": "Unique identifier for this edit.",
+         "required": true,
+         "location": "path"
+        },
+        "imageId": {
+         "type": "string",
+         "description": "Unique identifier an image within the set of images attached to this edit.",
+         "required": true,
+         "location": "path"
+        },
+        "imageType": {
+         "type": "string",
+         "required": true,
+         "enum": [
+          "featureGraphic",
+          "icon",
+          "phoneScreenshots",
+          "promoGraphic",
+          "sevenInchScreenshots",
+          "tenInchScreenshots"
+         ],
+         "enumDescriptions": [
+          "",
+          "",
+          "",
+          "",
+          "",
+          ""
+         ],
+         "location": "path"
+        },
+        "language": {
+         "type": "string",
+         "description": "The language code (a BCP-47 language tag) of the localized listing whose images are to read or modified. For example, to select Austrian German, pass \"de-AT\".",
+         "required": true,
+         "location": "path"
+        },
+        "packageName": {
+         "type": "string",
+         "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "packageName",
+        "editId",
+        "language",
+        "imageType",
+        "imageId"
+       ],
+       "scopes": [
+        "https://www.googleapis.com/auth/androidpublisher"
+       ]
+      },
+      "deleteall": {
+       "id": "androidpublisher.edits.images.deleteall",
+       "path": "{packageName}/edits/{editId}/listings/{language}/{imageType}",
+       "httpMethod": "DELETE",
+       "description": "Deletes all images for the specified language and image type.",
+       "parameters": {
+        "editId": {
+         "type": "string",
+         "description": "Unique identifier for this edit.",
+         "required": true,
+         "location": "path"
+        },
+        "imageType": {
+         "type": "string",
+         "required": true,
+         "enum": [
+          "featureGraphic",
+          "icon",
+          "phoneScreenshots",
+          "promoGraphic",
+          "sevenInchScreenshots",
+          "tenInchScreenshots"
+         ],
+         "enumDescriptions": [
+          "",
+          "",
+          "",
+          "",
+          "",
+          ""
+         ],
+         "location": "path"
+        },
+        "language": {
+         "type": "string",
+         "description": "The language code (a BCP-47 language tag) of the localized listing whose images are to read or modified. For example, to select Austrian German, pass \"de-AT\".",
+         "required": true,
+         "location": "path"
+        },
+        "packageName": {
+         "type": "string",
+         "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "packageName",
+        "editId",
+        "language",
+        "imageType"
+       ],
+       "response": {
+        "$ref": "ImagesDeleteAllResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/androidpublisher"
+       ]
+      },
+      "list": {
+       "id": "androidpublisher.edits.images.list",
+       "path": "{packageName}/edits/{editId}/listings/{language}/{imageType}",
+       "httpMethod": "GET",
+       "description": "Lists all images for the specified language and image type.",
+       "parameters": {
+        "editId": {
+         "type": "string",
+         "description": "Unique identifier for this edit.",
+         "required": true,
+         "location": "path"
+        },
+        "imageType": {
+         "type": "string",
+         "required": true,
+         "enum": [
+          "featureGraphic",
+          "icon",
+          "phoneScreenshots",
+          "promoGraphic",
+          "sevenInchScreenshots",
+          "tenInchScreenshots"
+         ],
+         "enumDescriptions": [
+          "",
+          "",
+          "",
+          "",
+          "",
+          ""
+         ],
+         "location": "path"
+        },
+        "language": {
+         "type": "string",
+         "description": "The language code (a BCP-47 language tag) of the localized listing whose images are to read or modified. For example, to select Austrian German, pass \"de-AT\".",
+         "required": true,
+         "location": "path"
+        },
+        "packageName": {
+         "type": "string",
+         "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "packageName",
+        "editId",
+        "language",
+        "imageType"
+       ],
+       "response": {
+        "$ref": "ImagesListResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/androidpublisher"
+       ]
+      },
+      "upload": {
+       "id": "androidpublisher.edits.images.upload",
+       "path": "{packageName}/edits/{editId}/listings/{language}/{imageType}",
+       "httpMethod": "POST",
+       "description": "Uploads a new image and adds it to the list of images for the specified language and image type.",
+       "parameters": {
+        "editId": {
+         "type": "string",
+         "description": "Unique identifier for this edit.",
+         "required": true,
+         "location": "path"
+        },
+        "imageType": {
+         "type": "string",
+         "required": true,
+         "enum": [
+          "featureGraphic",
+          "icon",
+          "phoneScreenshots",
+          "promoGraphic",
+          "sevenInchScreenshots",
+          "tenInchScreenshots"
+         ],
+         "enumDescriptions": [
+          "",
+          "",
+          "",
+          "",
+          "",
+          ""
+         ],
+         "location": "path"
+        },
+        "language": {
+         "type": "string",
+         "description": "The language code (a BCP-47 language tag) of the localized listing whose images are to read or modified. For example, to select Austrian German, pass \"de-AT\".",
+         "required": true,
+         "location": "path"
+        },
+        "packageName": {
+         "type": "string",
+         "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "packageName",
+        "editId",
+        "language",
+        "imageType"
+       ],
+       "response": {
+        "$ref": "ImagesUploadResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/androidpublisher"
+       ],
+       "supportsMediaUpload": true,
+       "mediaUpload": {
+        "accept": [
+         "image/*"
+        ],
+        "maxSize": "15MB",
+        "protocols": {
+         "simple": {
+          "multipart": true,
+          "path": "/upload/androidpublisher/v2/applications/{packageName}/edits/{editId}/listings/{language}/{imageType}"
+         },
+         "resumable": {
+          "multipart": true,
+          "path": "/resumable/upload/androidpublisher/v2/applications/{packageName}/edits/{editId}/listings/{language}/{imageType}"
+         }
+        }
+       }
+      }
+     }
+    },
+    "listings": {
+     "methods": {
+      "delete": {
+       "id": "androidpublisher.edits.listings.delete",
+       "path": "{packageName}/edits/{editId}/listings/{language}",
+       "httpMethod": "DELETE",
+       "description": "Deletes the specified localized store listing from an edit.",
+       "parameters": {
+        "editId": {
+         "type": "string",
+         "description": "Unique identifier for this edit.",
+         "required": true,
+         "location": "path"
+        },
+        "language": {
+         "type": "string",
+         "description": "The language code (a BCP-47 language tag) of the localized listing to read or modify. For example, to select Austrian German, pass \"de-AT\".",
+         "required": true,
+         "location": "path"
+        },
+        "packageName": {
+         "type": "string",
+         "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "packageName",
+        "editId",
+        "language"
+       ],
+       "scopes": [
+        "https://www.googleapis.com/auth/androidpublisher"
+       ]
+      },
+      "deleteall": {
+       "id": "androidpublisher.edits.listings.deleteall",
+       "path": "{packageName}/edits/{editId}/listings",
+       "httpMethod": "DELETE",
+       "description": "Deletes all localized listings from an edit.",
+       "parameters": {
+        "editId": {
+         "type": "string",
+         "description": "Unique identifier for this edit.",
+         "required": true,
+         "location": "path"
+        },
+        "packageName": {
+         "type": "string",
+         "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "packageName",
+        "editId"
+       ],
+       "scopes": [
+        "https://www.googleapis.com/auth/androidpublisher"
+       ]
+      },
+      "get": {
+       "id": "androidpublisher.edits.listings.get",
+       "path": "{packageName}/edits/{editId}/listings/{language}",
+       "httpMethod": "GET",
+       "description": "Fetches information about a localized store listing.",
+       "parameters": {
+        "editId": {
+         "type": "string",
+         "description": "Unique identifier for this edit.",
+         "required": true,
+         "location": "path"
+        },
+        "language": {
+         "type": "string",
+         "description": "The language code (a BCP-47 language tag) of the localized listing to read or modify. For example, to select Austrian German, pass \"de-AT\".",
+         "required": true,
+         "location": "path"
+        },
+        "packageName": {
+         "type": "string",
+         "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "packageName",
+        "editId",
+        "language"
+       ],
+       "response": {
+        "$ref": "Listing"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/androidpublisher"
+       ]
+      },
+      "list": {
+       "id": "androidpublisher.edits.listings.list",
+       "path": "{packageName}/edits/{editId}/listings",
+       "httpMethod": "GET",
+       "description": "Returns all of the localized store listings attached to this edit.",
+       "parameters": {
+        "editId": {
+         "type": "string",
+         "description": "Unique identifier for this edit.",
+         "required": true,
+         "location": "path"
+        },
+        "packageName": {
+         "type": "string",
+         "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "packageName",
+        "editId"
+       ],
+       "response": {
+        "$ref": "ListingsListResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/androidpublisher"
+       ]
+      },
+      "patch": {
+       "id": "androidpublisher.edits.listings.patch",
+       "path": "{packageName}/edits/{editId}/listings/{language}",
+       "httpMethod": "PATCH",
+       "description": "Creates or updates a localized store listing. This method supports patch semantics.",
+       "parameters": {
+        "editId": {
+         "type": "string",
+         "description": "Unique identifier for this edit.",
+         "required": true,
+         "location": "path"
+        },
+        "language": {
+         "type": "string",
+         "description": "The language code (a BCP-47 language tag) of the localized listing to read or modify. For example, to select Austrian German, pass \"de-AT\".",
+         "required": true,
+         "location": "path"
+        },
+        "packageName": {
+         "type": "string",
+         "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "packageName",
+        "editId",
+        "language"
+       ],
+       "request": {
+        "$ref": "Listing"
+       },
+       "response": {
+        "$ref": "Listing"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/androidpublisher"
+       ]
+      },
+      "update": {
+       "id": "androidpublisher.edits.listings.update",
+       "path": "{packageName}/edits/{editId}/listings/{language}",
+       "httpMethod": "PUT",
+       "description": "Creates or updates a localized store listing.",
+       "parameters": {
+        "editId": {
+         "type": "string",
+         "description": "Unique identifier for this edit.",
+         "required": true,
+         "location": "path"
+        },
+        "language": {
+         "type": "string",
+         "description": "The language code (a BCP-47 language tag) of the localized listing to read or modify. For example, to select Austrian German, pass \"de-AT\".",
+         "required": true,
+         "location": "path"
+        },
+        "packageName": {
+         "type": "string",
+         "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "packageName",
+        "editId",
+        "language"
+       ],
+       "request": {
+        "$ref": "Listing"
+       },
+       "response": {
+        "$ref": "Listing"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/androidpublisher"
+       ]
+      }
+     }
+    },
+    "testers": {
+     "methods": {
+      "get": {
+       "id": "androidpublisher.edits.testers.get",
+       "path": "{packageName}/edits/{editId}/testers/{track}",
+       "httpMethod": "GET",
+       "parameters": {
+        "editId": {
+         "type": "string",
+         "description": "Unique identifier for this edit.",
+         "required": true,
+         "location": "path"
+        },
+        "packageName": {
+         "type": "string",
+         "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+         "required": true,
+         "location": "path"
+        },
+        "track": {
+         "type": "string",
+         "required": true,
+         "enum": [
+          "alpha",
+          "beta",
+          "production",
+          "rollout"
+         ],
+         "enumDescriptions": [
+          "",
+          "",
+          "",
+          ""
+         ],
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "packageName",
+        "editId",
+        "track"
+       ],
+       "response": {
+        "$ref": "Testers"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/androidpublisher"
+       ]
+      },
+      "patch": {
+       "id": "androidpublisher.edits.testers.patch",
+       "path": "{packageName}/edits/{editId}/testers/{track}",
+       "httpMethod": "PATCH",
+       "parameters": {
+        "editId": {
+         "type": "string",
+         "description": "Unique identifier for this edit.",
+         "required": true,
+         "location": "path"
+        },
+        "packageName": {
+         "type": "string",
+         "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+         "required": true,
+         "location": "path"
+        },
+        "track": {
+         "type": "string",
+         "required": true,
+         "enum": [
+          "alpha",
+          "beta",
+          "production",
+          "rollout"
+         ],
+         "enumDescriptions": [
+          "",
+          "",
+          "",
+          ""
+         ],
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "packageName",
+        "editId",
+        "track"
+       ],
+       "request": {
+        "$ref": "Testers"
+       },
+       "response": {
+        "$ref": "Testers"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/androidpublisher"
+       ]
+      },
+      "update": {
+       "id": "androidpublisher.edits.testers.update",
+       "path": "{packageName}/edits/{editId}/testers/{track}",
+       "httpMethod": "PUT",
+       "parameters": {
+        "editId": {
+         "type": "string",
+         "description": "Unique identifier for this edit.",
+         "required": true,
+         "location": "path"
+        },
+        "packageName": {
+         "type": "string",
+         "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+         "required": true,
+         "location": "path"
+        },
+        "track": {
+         "type": "string",
+         "required": true,
+         "enum": [
+          "alpha",
+          "beta",
+          "production",
+          "rollout"
+         ],
+         "enumDescriptions": [
+          "",
+          "",
+          "",
+          ""
+         ],
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "packageName",
+        "editId",
+        "track"
+       ],
+       "request": {
+        "$ref": "Testers"
+       },
+       "response": {
+        "$ref": "Testers"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/androidpublisher"
+       ]
+      }
+     }
+    },
+    "tracks": {
+     "methods": {
+      "get": {
+       "id": "androidpublisher.edits.tracks.get",
+       "path": "{packageName}/edits/{editId}/tracks/{track}",
+       "httpMethod": "GET",
+       "description": "Fetches the track configuration for the specified track type. Includes the APK version codes that are in this track.",
+       "parameters": {
+        "editId": {
+         "type": "string",
+         "description": "Unique identifier for this edit.",
+         "required": true,
+         "location": "path"
+        },
+        "packageName": {
+         "type": "string",
+         "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+         "required": true,
+         "location": "path"
+        },
+        "track": {
+         "type": "string",
+         "description": "The track type to read or modify.",
+         "required": true,
+         "enum": [
+          "alpha",
+          "beta",
+          "production",
+          "rollout"
+         ],
+         "enumDescriptions": [
+          "",
+          "",
+          "",
+          ""
+         ],
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "packageName",
+        "editId",
+        "track"
+       ],
+       "response": {
+        "$ref": "Track"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/androidpublisher"
+       ]
+      },
+      "list": {
+       "id": "androidpublisher.edits.tracks.list",
+       "path": "{packageName}/edits/{editId}/tracks",
+       "httpMethod": "GET",
+       "description": "Lists all the track configurations for this edit.",
+       "parameters": {
+        "editId": {
+         "type": "string",
+         "description": "Unique identifier for this edit.",
+         "required": true,
+         "location": "path"
+        },
+        "packageName": {
+         "type": "string",
+         "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "packageName",
+        "editId"
+       ],
+       "response": {
+        "$ref": "TracksListResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/androidpublisher"
+       ]
+      },
+      "patch": {
+       "id": "androidpublisher.edits.tracks.patch",
+       "path": "{packageName}/edits/{editId}/tracks/{track}",
+       "httpMethod": "PATCH",
+       "description": "Updates the track configuration for the specified track type. This method supports patch semantics.",
+       "parameters": {
+        "editId": {
+         "type": "string",
+         "description": "Unique identifier for this edit.",
+         "required": true,
+         "location": "path"
+        },
+        "packageName": {
+         "type": "string",
+         "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+         "required": true,
+         "location": "path"
+        },
+        "track": {
+         "type": "string",
+         "description": "The track type to read or modify.",
+         "required": true,
+         "enum": [
+          "alpha",
+          "beta",
+          "production",
+          "rollout"
+         ],
+         "enumDescriptions": [
+          "",
+          "",
+          "",
+          ""
+         ],
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "packageName",
+        "editId",
+        "track"
+       ],
+       "request": {
+        "$ref": "Track"
+       },
+       "response": {
+        "$ref": "Track"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/androidpublisher"
+       ]
+      },
+      "update": {
+       "id": "androidpublisher.edits.tracks.update",
+       "path": "{packageName}/edits/{editId}/tracks/{track}",
+       "httpMethod": "PUT",
+       "description": "Updates the track configuration for the specified track type.",
+       "parameters": {
+        "editId": {
+         "type": "string",
+         "description": "Unique identifier for this edit.",
+         "required": true,
+         "location": "path"
+        },
+        "packageName": {
+         "type": "string",
+         "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+         "required": true,
+         "location": "path"
+        },
+        "track": {
+         "type": "string",
+         "description": "The track type to read or modify.",
+         "required": true,
+         "enum": [
+          "alpha",
+          "beta",
+          "production",
+          "rollout"
+         ],
+         "enumDescriptions": [
+          "",
+          "",
+          "",
+          ""
+         ],
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "packageName",
+        "editId",
+        "track"
+       ],
+       "request": {
+        "$ref": "Track"
+       },
+       "response": {
+        "$ref": "Track"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/androidpublisher"
+       ]
+      }
+     }
+    }
+   }
+  },
+  "inappproducts": {
+   "methods": {
+    "batch": {
+     "id": "androidpublisher.inappproducts.batch",
+     "path": "inappproducts/batch",
+     "httpMethod": "POST",
+     "request": {
+      "$ref": "InappproductsBatchRequest"
+     },
+     "response": {
+      "$ref": "InappproductsBatchResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/androidpublisher"
+     ]
+    },
+    "delete": {
+     "id": "androidpublisher.inappproducts.delete",
+     "path": "{packageName}/inappproducts/{sku}",
+     "httpMethod": "DELETE",
+     "description": "Delete an in-app product for an app.",
+     "parameters": {
+      "packageName": {
+       "type": "string",
+       "description": "Unique identifier for the Android app with the in-app product; for example, \"com.spiffygame\".",
+       "required": true,
+       "location": "path"
+      },
+      "sku": {
+       "type": "string",
+       "description": "Unique identifier for the in-app product.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "packageName",
+      "sku"
+     ],
+     "scopes": [
+      "https://www.googleapis.com/auth/androidpublisher"
+     ]
+    },
+    "get": {
+     "id": "androidpublisher.inappproducts.get",
+     "path": "{packageName}/inappproducts/{sku}",
+     "httpMethod": "GET",
+     "description": "Returns information about the in-app product specified.",
+     "parameters": {
+      "packageName": {
+       "type": "string",
+       "required": true,
+       "location": "path"
+      },
+      "sku": {
+       "type": "string",
+       "description": "Unique identifier for the in-app product.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "packageName",
+      "sku"
+     ],
+     "response": {
+      "$ref": "InAppProduct"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/androidpublisher"
+     ]
+    },
+    "insert": {
+     "id": "androidpublisher.inappproducts.insert",
+     "path": "{packageName}/inappproducts",
+     "httpMethod": "POST",
+     "description": "Creates a new in-app product for an app.",
+     "parameters": {
+      "autoConvertMissingPrices": {
+       "type": "boolean",
+       "description": "If true the prices for all regions targeted by the parent app that don't have a price specified for this in-app product will be auto converted to the target currency based on the default price. Defaults to false.",
+       "location": "query"
+      },
+      "packageName": {
+       "type": "string",
+       "description": "Unique identifier for the Android app; for example, \"com.spiffygame\".",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "packageName"
+     ],
+     "request": {
+      "$ref": "InAppProduct"
+     },
+     "response": {
+      "$ref": "InAppProduct"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/androidpublisher"
+     ]
+    },
+    "list": {
+     "id": "androidpublisher.inappproducts.list",
+     "path": "{packageName}/inappproducts",
+     "httpMethod": "GET",
+     "description": "List all the in-app products for an Android app, both subscriptions and managed in-app products..",
+     "parameters": {
+      "maxResults": {
+       "type": "integer",
+       "format": "uint32",
+       "location": "query"
+      },
+      "packageName": {
+       "type": "string",
+       "description": "Unique identifier for the Android app with in-app products; for example, \"com.spiffygame\".",
+       "required": true,
+       "location": "path"
+      },
+      "startIndex": {
+       "type": "integer",
+       "format": "uint32",
+       "location": "query"
+      },
+      "token": {
+       "type": "string",
+       "location": "query"
+      }
+     },
+     "parameterOrder": [
+      "packageName"
+     ],
+     "response": {
+      "$ref": "InappproductsListResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/androidpublisher"
+     ]
+    },
+    "patch": {
+     "id": "androidpublisher.inappproducts.patch",
+     "path": "{packageName}/inappproducts/{sku}",
+     "httpMethod": "PATCH",
+     "description": "Updates the details of an in-app product. This method supports patch semantics.",
+     "parameters": {
+      "autoConvertMissingPrices": {
+       "type": "boolean",
+       "description": "If true the prices for all regions targeted by the parent app that don't have a price specified for this in-app product will be auto converted to the target currency based on the default price. Defaults to false.",
+       "location": "query"
+      },
+      "packageName": {
+       "type": "string",
+       "description": "Unique identifier for the Android app with the in-app product; for example, \"com.spiffygame\".",
+       "required": true,
+       "location": "path"
+      },
+      "sku": {
+       "type": "string",
+       "description": "Unique identifier for the in-app product.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "packageName",
+      "sku"
+     ],
+     "request": {
+      "$ref": "InAppProduct"
+     },
+     "response": {
+      "$ref": "InAppProduct"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/androidpublisher"
+     ]
+    },
+    "update": {
+     "id": "androidpublisher.inappproducts.update",
+     "path": "{packageName}/inappproducts/{sku}",
+     "httpMethod": "PUT",
+     "description": "Updates the details of an in-app product.",
+     "parameters": {
+      "autoConvertMissingPrices": {
+       "type": "boolean",
+       "description": "If true the prices for all regions targeted by the parent app that don't have a price specified for this in-app product will be auto converted to the target currency based on the default price. Defaults to false.",
+       "location": "query"
+      },
+      "packageName": {
+       "type": "string",
+       "description": "Unique identifier for the Android app with the in-app product; for example, \"com.spiffygame\".",
+       "required": true,
+       "location": "path"
+      },
+      "sku": {
+       "type": "string",
+       "description": "Unique identifier for the in-app product.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "packageName",
+      "sku"
+     ],
+     "request": {
+      "$ref": "InAppProduct"
+     },
+     "response": {
+      "$ref": "InAppProduct"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/androidpublisher"
+     ]
+    }
+   }
+  },
+  "purchases": {
+   "resources": {
+    "products": {
+     "methods": {
+      "get": {
+       "id": "androidpublisher.purchases.products.get",
+       "path": "{packageName}/purchases/products/{productId}/tokens/{token}",
+       "httpMethod": "GET",
+       "description": "Checks the purchase and consumption status of an inapp item.",
+       "parameters": {
+        "packageName": {
+         "type": "string",
+         "description": "The package name of the application the inapp product was sold in (for example, 'com.some.thing').",
+         "required": true,
+         "location": "path"
+        },
+        "productId": {
+         "type": "string",
+         "description": "The inapp product SKU (for example, 'com.some.thing.inapp1').",
+         "required": true,
+         "location": "path"
+        },
+        "token": {
+         "type": "string",
+         "description": "The token provided to the user's device when the inapp product was purchased.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "packageName",
+        "productId",
+        "token"
+       ],
+       "response": {
+        "$ref": "ProductPurchase"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/androidpublisher"
+       ]
+      }
+     }
+    },
+    "subscriptions": {
+     "methods": {
+      "cancel": {
+       "id": "androidpublisher.purchases.subscriptions.cancel",
+       "path": "{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}:cancel",
+       "httpMethod": "POST",
+       "description": "Cancels a user's subscription purchase. The subscription remains valid until its expiration time.",
+       "parameters": {
+        "packageName": {
+         "type": "string",
+         "description": "The package name of the application for which this subscription was purchased (for example, 'com.some.thing').",
+         "required": true,
+         "location": "path"
+        },
+        "subscriptionId": {
+         "type": "string",
+         "description": "The purchased subscription ID (for example, 'monthly001').",
+         "required": true,
+         "location": "path"
+        },
+        "token": {
+         "type": "string",
+         "description": "The token provided to the user's device when the subscription was purchased.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "packageName",
+        "subscriptionId",
+        "token"
+       ],
+       "scopes": [
+        "https://www.googleapis.com/auth/androidpublisher"
+       ]
+      },
+      "get": {
+       "id": "androidpublisher.purchases.subscriptions.get",
+       "path": "{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}",
+       "httpMethod": "GET",
+       "description": "Checks whether a user's subscription purchase is valid and returns its expiry time.",
+       "parameters": {
+        "packageName": {
+         "type": "string",
+         "description": "The package name of the application for which this subscription was purchased (for example, 'com.some.thing').",
+         "required": true,
+         "location": "path"
+        },
+        "subscriptionId": {
+         "type": "string",
+         "description": "The purchased subscription ID (for example, 'monthly001').",
+         "required": true,
+         "location": "path"
+        },
+        "token": {
+         "type": "string",
+         "description": "The token provided to the user's device when the subscription was purchased.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "packageName",
+        "subscriptionId",
+        "token"
+       ],
+       "response": {
+        "$ref": "SubscriptionPurchase"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/androidpublisher"
+       ]
+      }
+     }
+    }
+   }
+  }
+ }
+}
diff --git a/androidpublisher/v2/androidpublisher-gen.go b/androidpublisher/v2/androidpublisher-gen.go
new file mode 100644
index 0000000..9492804
--- /dev/null
+++ b/androidpublisher/v2/androidpublisher-gen.go
@@ -0,0 +1,4851 @@
+// Package androidpublisher provides access to the Google Play Android Developer API.
+//
+// See https://developers.google.com/android-publisher
+//
+// Usage example:
+//
+//   import "code.google.com/p/google-api-go-client/androidpublisher/v2"
+//   ...
+//   androidpublisherService, err := androidpublisher.New(oauthHttpClient)
+package androidpublisher
+
+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 = "androidpublisher:v2"
+const apiName = "androidpublisher"
+const apiVersion = "v2"
+const basePath = "https://www.googleapis.com/androidpublisher/v2/applications/"
+
+// OAuth2 scopes used by this API.
+const (
+	// View and manage your Google Play Android Developer account
+	AndroidpublisherScope = "https://www.googleapis.com/auth/androidpublisher"
+)
+
+func New(client *http.Client) (*Service, error) {
+	if client == nil {
+		return nil, errors.New("client is nil")
+	}
+	s := &Service{client: client, BasePath: basePath}
+	s.Edits = NewEditsService(s)
+	s.Inappproducts = NewInappproductsService(s)
+	s.Purchases = NewPurchasesService(s)
+	return s, nil
+}
+
+type Service struct {
+	client   *http.Client
+	BasePath string // API endpoint base URL
+
+	Edits *EditsService
+
+	Inappproducts *InappproductsService
+
+	Purchases *PurchasesService
+}
+
+func NewEditsService(s *Service) *EditsService {
+	rs := &EditsService{s: s}
+	rs.Apklistings = NewEditsApklistingsService(s)
+	rs.Apks = NewEditsApksService(s)
+	rs.Details = NewEditsDetailsService(s)
+	rs.Expansionfiles = NewEditsExpansionfilesService(s)
+	rs.Images = NewEditsImagesService(s)
+	rs.Listings = NewEditsListingsService(s)
+	rs.Testers = NewEditsTestersService(s)
+	rs.Tracks = NewEditsTracksService(s)
+	return rs
+}
+
+type EditsService struct {
+	s *Service
+
+	Apklistings *EditsApklistingsService
+
+	Apks *EditsApksService
+
+	Details *EditsDetailsService
+
+	Expansionfiles *EditsExpansionfilesService
+
+	Images *EditsImagesService
+
+	Listings *EditsListingsService
+
+	Testers *EditsTestersService
+
+	Tracks *EditsTracksService
+}
+
+func NewEditsApklistingsService(s *Service) *EditsApklistingsService {
+	rs := &EditsApklistingsService{s: s}
+	return rs
+}
+
+type EditsApklistingsService struct {
+	s *Service
+}
+
+func NewEditsApksService(s *Service) *EditsApksService {
+	rs := &EditsApksService{s: s}
+	return rs
+}
+
+type EditsApksService struct {
+	s *Service
+}
+
+func NewEditsDetailsService(s *Service) *EditsDetailsService {
+	rs := &EditsDetailsService{s: s}
+	return rs
+}
+
+type EditsDetailsService struct {
+	s *Service
+}
+
+func NewEditsExpansionfilesService(s *Service) *EditsExpansionfilesService {
+	rs := &EditsExpansionfilesService{s: s}
+	return rs
+}
+
+type EditsExpansionfilesService struct {
+	s *Service
+}
+
+func NewEditsImagesService(s *Service) *EditsImagesService {
+	rs := &EditsImagesService{s: s}
+	return rs
+}
+
+type EditsImagesService struct {
+	s *Service
+}
+
+func NewEditsListingsService(s *Service) *EditsListingsService {
+	rs := &EditsListingsService{s: s}
+	return rs
+}
+
+type EditsListingsService struct {
+	s *Service
+}
+
+func NewEditsTestersService(s *Service) *EditsTestersService {
+	rs := &EditsTestersService{s: s}
+	return rs
+}
+
+type EditsTestersService struct {
+	s *Service
+}
+
+func NewEditsTracksService(s *Service) *EditsTracksService {
+	rs := &EditsTracksService{s: s}
+	return rs
+}
+
+type EditsTracksService struct {
+	s *Service
+}
+
+func NewInappproductsService(s *Service) *InappproductsService {
+	rs := &InappproductsService{s: s}
+	return rs
+}
+
+type InappproductsService struct {
+	s *Service
+}
+
+func NewPurchasesService(s *Service) *PurchasesService {
+	rs := &PurchasesService{s: s}
+	rs.Products = NewPurchasesProductsService(s)
+	rs.Subscriptions = NewPurchasesSubscriptionsService(s)
+	return rs
+}
+
+type PurchasesService struct {
+	s *Service
+
+	Products *PurchasesProductsService
+
+	Subscriptions *PurchasesSubscriptionsService
+}
+
+func NewPurchasesProductsService(s *Service) *PurchasesProductsService {
+	rs := &PurchasesProductsService{s: s}
+	return rs
+}
+
+type PurchasesProductsService struct {
+	s *Service
+}
+
+func NewPurchasesSubscriptionsService(s *Service) *PurchasesSubscriptionsService {
+	rs := &PurchasesSubscriptionsService{s: s}
+	return rs
+}
+
+type PurchasesSubscriptionsService struct {
+	s *Service
+}
+
+type Apk struct {
+	// Binary: Information about the binary payload of this APK.
+	Binary *ApkBinary `json:"binary,omitempty"`
+
+	// VersionCode: The version code of the APK, as specified in the APK's
+	// manifest file.
+	VersionCode int64 `json:"versionCode,omitempty"`
+}
+
+type ApkBinary struct {
+	// Sha1: A sha1 hash of the APK payload, encoded as a hex string and
+	// matching the output of the sha1sum command.
+	Sha1 string `json:"sha1,omitempty"`
+}
+
+type ApkListing struct {
+	// Language: The language code, in BCP 47 format (eg "en-US").
+	Language string `json:"language,omitempty"`
+
+	// RecentChanges: Describe what's new in your APK.
+	RecentChanges string `json:"recentChanges,omitempty"`
+}
+
+type ApkListingsListResponse struct {
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "androidpublisher#apkListingsListResponse".
+	Kind string `json:"kind,omitempty"`
+
+	Listings []*ApkListing `json:"listings,omitempty"`
+}
+
+type ApksListResponse struct {
+	Apks []*Apk `json:"apks,omitempty"`
+
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "androidpublisher#apksListResponse".
+	Kind string `json:"kind,omitempty"`
+}
+
+type AppDetails struct {
+	// ContactEmail: The user-visible support email for this app.
+	ContactEmail string `json:"contactEmail,omitempty"`
+
+	// ContactPhone: The user-visible support telephone number for this app.
+	ContactPhone string `json:"contactPhone,omitempty"`
+
+	// ContactWebsite: The user-visible website for this app.
+	ContactWebsite string `json:"contactWebsite,omitempty"`
+
+	// DefaultLanguage: Default language code, in BCP 47 format (eg
+	// "en-US").
+	DefaultLanguage string `json:"defaultLanguage,omitempty"`
+}
+
+type AppEdit struct {
+	// ExpiryTimeSeconds: The time at which the edit will expire and will be
+	// no longer valid for use in any subsequent API calls (encoded as
+	// seconds since the Epoch).
+	ExpiryTimeSeconds string `json:"expiryTimeSeconds,omitempty"`
+
+	// Id: The ID of the edit that can be used in subsequent API calls.
+	Id string `json:"id,omitempty"`
+}
+
+type ExpansionFile struct {
+	// FileSize: If set this field indicates that this APK has an Expansion
+	// File uploaded to it: this APK does not reference another APK's
+	// Expansion File. The field's value is the size of the uploaded
+	// Expansion File in bytes.
+	FileSize int64 `json:"fileSize,omitempty,string"`
+
+	// ReferencesVersion: If set this APK's Expansion File references
+	// another APK's Expansion File. The file_size field will not be set.
+	ReferencesVersion int64 `json:"referencesVersion,omitempty"`
+}
+
+type ExpansionFilesUploadResponse struct {
+	ExpansionFile *ExpansionFile `json:"expansionFile,omitempty"`
+}
+
+type Image struct {
+	// Id: A unique id representing this image.
+	Id string `json:"id,omitempty"`
+
+	// Sha1: A sha1 hash of the image that was uploaded.
+	Sha1 string `json:"sha1,omitempty"`
+
+	// Url: A URL that will serve a preview of the image.
+	Url string `json:"url,omitempty"`
+}
+
+type ImagesDeleteAllResponse struct {
+	Deleted []*Image `json:"deleted,omitempty"`
+}
+
+type ImagesListResponse struct {
+	Images []*Image `json:"images,omitempty"`
+}
+
+type ImagesUploadResponse struct {
+	Image *Image `json:"image,omitempty"`
+}
+
+type InAppProduct struct {
+	// DefaultLanguage: The default language of the localized data, as
+	// defined by BCP 47. e.g. "en-US", "en-GB".
+	DefaultLanguage string `json:"defaultLanguage,omitempty"`
+
+	// DefaultPrice: Default price cannot be zero. In-app products can never
+	// be free. Default price is always in the developer's Checkout merchant
+	// currency.
+	DefaultPrice *Price `json:"defaultPrice,omitempty"`
+
+	// Listings: List of localized title and description data.
+	Listings map[string]InAppProductListing `json:"listings,omitempty"`
+
+	// PackageName: The package name of the parent app.
+	PackageName string `json:"packageName,omitempty"`
+
+	// Prices: Prices per buyer region. None of these prices should be zero.
+	// In-app products can never be free.
+	Prices map[string]Price `json:"prices,omitempty"`
+
+	// PurchaseType: Purchase type enum value. Unmodifiable after creation.
+	PurchaseType string `json:"purchaseType,omitempty"`
+
+	// Sku: The stock-keeping-unit (SKU) of the product, unique within an
+	// app.
+	Sku string `json:"sku,omitempty"`
+
+	Status string `json:"status,omitempty"`
+
+	// SubscriptionPeriod: The period of the subscription (if any), i.e.
+	// period at which payments must happen. Defined as ISO 8601 duration,
+	// i.e. "P1M" for 1 month period.
+	SubscriptionPeriod string `json:"subscriptionPeriod,omitempty"`
+
+	// TrialPeriod: Trial duration (if any) of the subscription, defined as
+	// ISO 8601. i.e. "P10D" means an initial period of 10 days during which
+	// ownership is granted prior to any payment. Acceptable values are
+	// between "P7D" and "P999D".
+	TrialPeriod string `json:"trialPeriod,omitempty"`
+}
+
+type InAppProductListing struct {
+	Description string `json:"description,omitempty"`
+
+	Title string `json:"title,omitempty"`
+}
+
+type InappproductsBatchRequest struct {
+	Entrys []*InappproductsBatchRequestEntry `json:"entrys,omitempty"`
+}
+
+type InappproductsBatchRequestEntry struct {
+	BatchId int64 `json:"batchId,omitempty"`
+
+	Inappproductsinsertrequest *InappproductsInsertRequest `json:"inappproductsinsertrequest,omitempty"`
+
+	Inappproductsupdaterequest *InappproductsUpdateRequest `json:"inappproductsupdaterequest,omitempty"`
+
+	MethodName string `json:"methodName,omitempty"`
+}
+
+type InappproductsBatchResponse struct {
+	Entrys []*InappproductsBatchResponseEntry `json:"entrys,omitempty"`
+
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "androidpublisher#inappproductsBatchResponse".
+	Kind string `json:"kind,omitempty"`
+}
+
+type InappproductsBatchResponseEntry struct {
+	BatchId int64 `json:"batchId,omitempty"`
+
+	Inappproductsinsertresponse *InappproductsInsertResponse `json:"inappproductsinsertresponse,omitempty"`
+
+	Inappproductsupdateresponse *InappproductsUpdateResponse `json:"inappproductsupdateresponse,omitempty"`
+}
+
+type InappproductsInsertRequest struct {
+	Inappproduct *InAppProduct `json:"inappproduct,omitempty"`
+}
+
+type InappproductsInsertResponse struct {
+	Inappproduct *InAppProduct `json:"inappproduct,omitempty"`
+}
+
+type InappproductsListResponse struct {
+	Inappproduct []*InAppProduct `json:"inappproduct,omitempty"`
+
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "androidpublisher#inappproductsListResponse".
+	Kind string `json:"kind,omitempty"`
+
+	PageInfo *PageInfo `json:"pageInfo,omitempty"`
+
+	TokenPagination *TokenPagination `json:"tokenPagination,omitempty"`
+}
+
+type InappproductsUpdateRequest struct {
+	Inappproduct *InAppProduct `json:"inappproduct,omitempty"`
+}
+
+type InappproductsUpdateResponse struct {
+	Inappproduct *InAppProduct `json:"inappproduct,omitempty"`
+}
+
+type Listing struct {
+	// FullDescription: Full description of the app; this may be up to 4000
+	// characters in length.
+	FullDescription string `json:"fullDescription,omitempty"`
+
+	// Language: Language localization code (for example, "de-AT" for
+	// Austrian German).
+	Language string `json:"language,omitempty"`
+
+	// ShortDescription: Short description of the app (previously known as
+	// promo text); this may be up to 80 characters in length.
+	ShortDescription string `json:"shortDescription,omitempty"`
+
+	// Title: App's localized title.
+	Title string `json:"title,omitempty"`
+
+	// Video: URL of a promotional YouTube video for the app.
+	Video string `json:"video,omitempty"`
+}
+
+type ListingsListResponse struct {
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "androidpublisher#listingsListResponse".
+	Kind string `json:"kind,omitempty"`
+
+	Listings []*Listing `json:"listings,omitempty"`
+}
+
+type PageInfo struct {
+	ResultPerPage int64 `json:"resultPerPage,omitempty"`
+
+	StartIndex int64 `json:"startIndex,omitempty"`
+
+	TotalResults int64 `json:"totalResults,omitempty"`
+}
+
+type Price struct {
+	// Currency: 3 letter Currency code, as defined by ISO 4217.
+	Currency string `json:"currency,omitempty"`
+
+	// PriceMicros: The price in millionths of the currency base unit
+	// represented as a string.
+	PriceMicros string `json:"priceMicros,omitempty"`
+}
+
+type ProductPurchase struct {
+	// ConsumptionState: The consumption state of the inapp product.
+	// Possible values are:
+	// - Yet to be consumed
+	// - Consumed
+	ConsumptionState int64 `json:"consumptionState,omitempty"`
+
+	// DeveloperPayload: A developer-specified string that contains
+	// supplemental information about an order.
+	DeveloperPayload string `json:"developerPayload,omitempty"`
+
+	// Kind: This kind represents an inappPurchase object in the
+	// androidpublisher service.
+	Kind string `json:"kind,omitempty"`
+
+	// PurchaseState: The purchase state of the order. Possible values are:
+	//
+	// - Purchased
+	// - Cancelled
+	PurchaseState int64 `json:"purchaseState,omitempty"`
+
+	// PurchaseTimeMillis: The time the product was purchased, in
+	// milliseconds since the epoch (Jan 1, 1970).
+	PurchaseTimeMillis int64 `json:"purchaseTimeMillis,omitempty,string"`
+}
+
+type SubscriptionPurchase struct {
+	// AutoRenewing: Whether the subscription will automatically be renewed
+	// when it reaches its current expiry time.
+	AutoRenewing bool `json:"autoRenewing,omitempty"`
+
+	// ExpiryTimeMillis: Time at which the subscription will expire, in
+	// milliseconds since Epoch.
+	ExpiryTimeMillis int64 `json:"expiryTimeMillis,omitempty,string"`
+
+	// Kind: This kind represents a subscriptionPurchase object in the
+	// androidpublisher service.
+	Kind string `json:"kind,omitempty"`
+
+	// StartTimeMillis: Time at which the subscription was granted, in
+	// milliseconds since Epoch.
+	StartTimeMillis int64 `json:"startTimeMillis,omitempty,string"`
+}
+
+type Testers struct {
+	GoogleGroups []string `json:"googleGroups,omitempty"`
+
+	GooglePlusCommunities []string `json:"googlePlusCommunities,omitempty"`
+}
+
+type TokenPagination struct {
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	PreviousPageToken string `json:"previousPageToken,omitempty"`
+}
+
+type Track struct {
+	Track string `json:"track,omitempty"`
+
+	UserFraction float64 `json:"userFraction,omitempty"`
+
+	VersionCodes []int64 `json:"versionCodes,omitempty"`
+}
+
+type TracksListResponse struct {
+	// Kind: Identifies what kind of resource this is. Value: the fixed
+	// string "androidpublisher#tracksListResponse".
+	Kind string `json:"kind,omitempty"`
+
+	Tracks []*Track `json:"tracks,omitempty"`
+}
+
+// method id "androidpublisher.edits.commit":
+
+type EditsCommitCall struct {
+	s             *Service
+	packageNameid string
+	editId        string
+	opt_          map[string]interface{}
+}
+
+// Commit: Commits/applies the changes made in this edit back to the
+// app.
+func (r *EditsService) Commit(packageNameid string, editId string) *EditsCommitCall {
+	c := &EditsCommitCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.editId = editId
+	return c
+}
+
+func (c *EditsCommitCall) Do() (*AppEdit, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}:commit")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName": c.packageNameid,
+		"editId":      c.editId,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *AppEdit
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Commits/applies the changes made in this edit back to the app.",
+	//   "httpMethod": "POST",
+	//   "id": "androidpublisher.edits.commit",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "editId"
+	//   ],
+	//   "parameters": {
+	//     "editId": {
+	//       "description": "Unique identifier for this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits/{editId}:commit",
+	//   "response": {
+	//     "$ref": "AppEdit"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.edits.delete":
+
+type EditsDeleteCall struct {
+	s             *Service
+	packageNameid string
+	editId        string
+	opt_          map[string]interface{}
+}
+
+// Delete: Deletes an edit for an app. Creating a new edit will
+// automatically delete any of your previous edits so this method need
+// only be called if you want to preemptively abandon an edit.
+func (r *EditsService) Delete(packageNameid string, editId string) *EditsDeleteCall {
+	c := &EditsDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.editId = editId
+	return c
+}
+
+func (c *EditsDeleteCall) Do() error {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName": c.packageNameid,
+		"editId":      c.editId,
+	})
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return err
+	}
+	return nil
+	// {
+	//   "description": "Deletes an edit for an app. Creating a new edit will automatically delete any of your previous edits so this method need only be called if you want to preemptively abandon an edit.",
+	//   "httpMethod": "DELETE",
+	//   "id": "androidpublisher.edits.delete",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "editId"
+	//   ],
+	//   "parameters": {
+	//     "editId": {
+	//       "description": "Unique identifier for this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits/{editId}",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.edits.get":
+
+type EditsGetCall struct {
+	s             *Service
+	packageNameid string
+	editId        string
+	opt_          map[string]interface{}
+}
+
+// Get: Returns information about the edit specified. Calls will fail if
+// the edit is no long active (e.g. has been deleted, superseded or
+// expired).
+func (r *EditsService) Get(packageNameid string, editId string) *EditsGetCall {
+	c := &EditsGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.editId = editId
+	return c
+}
+
+func (c *EditsGetCall) Do() (*AppEdit, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName": c.packageNameid,
+		"editId":      c.editId,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *AppEdit
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Returns information about the edit specified. Calls will fail if the edit is no long active (e.g. has been deleted, superseded or expired).",
+	//   "httpMethod": "GET",
+	//   "id": "androidpublisher.edits.get",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "editId"
+	//   ],
+	//   "parameters": {
+	//     "editId": {
+	//       "description": "Unique identifier for this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits/{editId}",
+	//   "response": {
+	//     "$ref": "AppEdit"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.edits.insert":
+
+type EditsInsertCall struct {
+	s             *Service
+	packageNameid string
+	appedit       *AppEdit
+	opt_          map[string]interface{}
+}
+
+// Insert: Creates a new edit for an app, populated with the app's
+// current state.
+func (r *EditsService) Insert(packageNameid string, appedit *AppEdit) *EditsInsertCall {
+	c := &EditsInsertCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.appedit = appedit
+	return c
+}
+
+func (c *EditsInsertCall) Do() (*AppEdit, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.appedit)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName": c.packageNameid,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *AppEdit
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Creates a new edit for an app, populated with the app's current state.",
+	//   "httpMethod": "POST",
+	//   "id": "androidpublisher.edits.insert",
+	//   "parameterOrder": [
+	//     "packageName"
+	//   ],
+	//   "parameters": {
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits",
+	//   "request": {
+	//     "$ref": "AppEdit"
+	//   },
+	//   "response": {
+	//     "$ref": "AppEdit"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.edits.apklistings.delete":
+
+type EditsApklistingsDeleteCall struct {
+	s              *Service
+	packageNameid  string
+	editId         string
+	apkVersionCode int64
+	language       string
+	opt_           map[string]interface{}
+}
+
+// Delete: Deletes the APK-specific localized listing for a specified
+// APK and language code.
+func (r *EditsApklistingsService) Delete(packageNameid string, editId string, apkVersionCode int64, language string) *EditsApklistingsDeleteCall {
+	c := &EditsApklistingsDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.editId = editId
+	c.apkVersionCode = apkVersionCode
+	c.language = language
+	return c
+}
+
+func (c *EditsApklistingsDeleteCall) Do() error {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/apks/{apkVersionCode}/listings/{language}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName":    c.packageNameid,
+		"editId":         c.editId,
+		"apkVersionCode": strconv.FormatInt(c.apkVersionCode, 10),
+		"language":       c.language,
+	})
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return err
+	}
+	return nil
+	// {
+	//   "description": "Deletes the APK-specific localized listing for a specified APK and language code.",
+	//   "httpMethod": "DELETE",
+	//   "id": "androidpublisher.edits.apklistings.delete",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "editId",
+	//     "apkVersionCode",
+	//     "language"
+	//   ],
+	//   "parameters": {
+	//     "apkVersionCode": {
+	//       "description": "The APK version code whose APK-specific listings should be read or modified.",
+	//       "format": "int32",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "integer"
+	//     },
+	//     "editId": {
+	//       "description": "Unique identifier for this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "language": {
+	//       "description": "The language code (a BCP-47 language tag) of the APK-specific localized listing to read or modify. For example, to select Austrian German, pass \"de-AT\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits/{editId}/apks/{apkVersionCode}/listings/{language}",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.edits.apklistings.deleteall":
+
+type EditsApklistingsDeleteallCall struct {
+	s              *Service
+	packageNameid  string
+	editId         string
+	apkVersionCode int64
+	opt_           map[string]interface{}
+}
+
+// Deleteall: Deletes all the APK-specific localized listings for a
+// specified APK.
+func (r *EditsApklistingsService) Deleteall(packageNameid string, editId string, apkVersionCode int64) *EditsApklistingsDeleteallCall {
+	c := &EditsApklistingsDeleteallCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.editId = editId
+	c.apkVersionCode = apkVersionCode
+	return c
+}
+
+func (c *EditsApklistingsDeleteallCall) Do() error {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/apks/{apkVersionCode}/listings")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName":    c.packageNameid,
+		"editId":         c.editId,
+		"apkVersionCode": strconv.FormatInt(c.apkVersionCode, 10),
+	})
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return err
+	}
+	return nil
+	// {
+	//   "description": "Deletes all the APK-specific localized listings for a specified APK.",
+	//   "httpMethod": "DELETE",
+	//   "id": "androidpublisher.edits.apklistings.deleteall",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "editId",
+	//     "apkVersionCode"
+	//   ],
+	//   "parameters": {
+	//     "apkVersionCode": {
+	//       "description": "The APK version code whose APK-specific listings should be read or modified.",
+	//       "format": "int32",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "integer"
+	//     },
+	//     "editId": {
+	//       "description": "Unique identifier for this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits/{editId}/apks/{apkVersionCode}/listings",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.edits.apklistings.get":
+
+type EditsApklistingsGetCall struct {
+	s              *Service
+	packageNameid  string
+	editId         string
+	apkVersionCode int64
+	language       string
+	opt_           map[string]interface{}
+}
+
+// Get: Fetches the APK-specific localized listing for a specified APK
+// and language code.
+func (r *EditsApklistingsService) Get(packageNameid string, editId string, apkVersionCode int64, language string) *EditsApklistingsGetCall {
+	c := &EditsApklistingsGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.editId = editId
+	c.apkVersionCode = apkVersionCode
+	c.language = language
+	return c
+}
+
+func (c *EditsApklistingsGetCall) Do() (*ApkListing, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/apks/{apkVersionCode}/listings/{language}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName":    c.packageNameid,
+		"editId":         c.editId,
+		"apkVersionCode": strconv.FormatInt(c.apkVersionCode, 10),
+		"language":       c.language,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *ApkListing
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Fetches the APK-specific localized listing for a specified APK and language code.",
+	//   "httpMethod": "GET",
+	//   "id": "androidpublisher.edits.apklistings.get",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "editId",
+	//     "apkVersionCode",
+	//     "language"
+	//   ],
+	//   "parameters": {
+	//     "apkVersionCode": {
+	//       "description": "The APK version code whose APK-specific listings should be read or modified.",
+	//       "format": "int32",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "integer"
+	//     },
+	//     "editId": {
+	//       "description": "Unique identifier for this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "language": {
+	//       "description": "The language code (a BCP-47 language tag) of the APK-specific localized listing to read or modify. For example, to select Austrian German, pass \"de-AT\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits/{editId}/apks/{apkVersionCode}/listings/{language}",
+	//   "response": {
+	//     "$ref": "ApkListing"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.edits.apklistings.list":
+
+type EditsApklistingsListCall struct {
+	s              *Service
+	packageNameid  string
+	editId         string
+	apkVersionCode int64
+	opt_           map[string]interface{}
+}
+
+// List: Lists all the APK-specific localized listings for a specified
+// APK.
+func (r *EditsApklistingsService) List(packageNameid string, editId string, apkVersionCode int64) *EditsApklistingsListCall {
+	c := &EditsApklistingsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.editId = editId
+	c.apkVersionCode = apkVersionCode
+	return c
+}
+
+func (c *EditsApklistingsListCall) Do() (*ApkListingsListResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/apks/{apkVersionCode}/listings")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName":    c.packageNameid,
+		"editId":         c.editId,
+		"apkVersionCode": strconv.FormatInt(c.apkVersionCode, 10),
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *ApkListingsListResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists all the APK-specific localized listings for a specified APK.",
+	//   "httpMethod": "GET",
+	//   "id": "androidpublisher.edits.apklistings.list",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "editId",
+	//     "apkVersionCode"
+	//   ],
+	//   "parameters": {
+	//     "apkVersionCode": {
+	//       "description": "The APK version code whose APK-specific listings should be read or modified.",
+	//       "format": "int32",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "integer"
+	//     },
+	//     "editId": {
+	//       "description": "Unique identifier for this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits/{editId}/apks/{apkVersionCode}/listings",
+	//   "response": {
+	//     "$ref": "ApkListingsListResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.edits.apklistings.patch":
+
+type EditsApklistingsPatchCall struct {
+	s              *Service
+	packageNameid  string
+	editId         string
+	apkVersionCode int64
+	language       string
+	apklisting     *ApkListing
+	opt_           map[string]interface{}
+}
+
+// Patch: Updates or creates the APK-specific localized listing for a
+// specified APK and language code. This method supports patch
+// semantics.
+func (r *EditsApklistingsService) Patch(packageNameid string, editId string, apkVersionCode int64, language string, apklisting *ApkListing) *EditsApklistingsPatchCall {
+	c := &EditsApklistingsPatchCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.editId = editId
+	c.apkVersionCode = apkVersionCode
+	c.language = language
+	c.apklisting = apklisting
+	return c
+}
+
+func (c *EditsApklistingsPatchCall) Do() (*ApkListing, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.apklisting)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/apks/{apkVersionCode}/listings/{language}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("PATCH", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName":    c.packageNameid,
+		"editId":         c.editId,
+		"apkVersionCode": strconv.FormatInt(c.apkVersionCode, 10),
+		"language":       c.language,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *ApkListing
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates or creates the APK-specific localized listing for a specified APK and language code. This method supports patch semantics.",
+	//   "httpMethod": "PATCH",
+	//   "id": "androidpublisher.edits.apklistings.patch",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "editId",
+	//     "apkVersionCode",
+	//     "language"
+	//   ],
+	//   "parameters": {
+	//     "apkVersionCode": {
+	//       "description": "The APK version code whose APK-specific listings should be read or modified.",
+	//       "format": "int32",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "integer"
+	//     },
+	//     "editId": {
+	//       "description": "Unique identifier for this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "language": {
+	//       "description": "The language code (a BCP-47 language tag) of the APK-specific localized listing to read or modify. For example, to select Austrian German, pass \"de-AT\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits/{editId}/apks/{apkVersionCode}/listings/{language}",
+	//   "request": {
+	//     "$ref": "ApkListing"
+	//   },
+	//   "response": {
+	//     "$ref": "ApkListing"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.edits.apklistings.update":
+
+type EditsApklistingsUpdateCall struct {
+	s              *Service
+	packageNameid  string
+	editId         string
+	apkVersionCode int64
+	language       string
+	apklisting     *ApkListing
+	opt_           map[string]interface{}
+}
+
+// Update: Updates or creates the APK-specific localized listing for a
+// specified APK and language code.
+func (r *EditsApklistingsService) Update(packageNameid string, editId string, apkVersionCode int64, language string, apklisting *ApkListing) *EditsApklistingsUpdateCall {
+	c := &EditsApklistingsUpdateCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.editId = editId
+	c.apkVersionCode = apkVersionCode
+	c.language = language
+	c.apklisting = apklisting
+	return c
+}
+
+func (c *EditsApklistingsUpdateCall) Do() (*ApkListing, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.apklisting)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/apks/{apkVersionCode}/listings/{language}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("PUT", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName":    c.packageNameid,
+		"editId":         c.editId,
+		"apkVersionCode": strconv.FormatInt(c.apkVersionCode, 10),
+		"language":       c.language,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *ApkListing
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates or creates the APK-specific localized listing for a specified APK and language code.",
+	//   "httpMethod": "PUT",
+	//   "id": "androidpublisher.edits.apklistings.update",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "editId",
+	//     "apkVersionCode",
+	//     "language"
+	//   ],
+	//   "parameters": {
+	//     "apkVersionCode": {
+	//       "description": "The APK version code whose APK-specific listings should be read or modified.",
+	//       "format": "int32",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "integer"
+	//     },
+	//     "editId": {
+	//       "description": "Unique identifier for this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "language": {
+	//       "description": "The language code (a BCP-47 language tag) of the APK-specific localized listing to read or modify. For example, to select Austrian German, pass \"de-AT\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits/{editId}/apks/{apkVersionCode}/listings/{language}",
+	//   "request": {
+	//     "$ref": "ApkListing"
+	//   },
+	//   "response": {
+	//     "$ref": "ApkListing"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.edits.apks.list":
+
+type EditsApksListCall struct {
+	s             *Service
+	packageNameid string
+	editId        string
+	opt_          map[string]interface{}
+}
+
+// List:
+func (r *EditsApksService) List(packageNameid string, editId string) *EditsApksListCall {
+	c := &EditsApksListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.editId = editId
+	return c
+}
+
+func (c *EditsApksListCall) Do() (*ApksListResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/apks")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName": c.packageNameid,
+		"editId":      c.editId,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *ApksListResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "httpMethod": "GET",
+	//   "id": "androidpublisher.edits.apks.list",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "editId"
+	//   ],
+	//   "parameters": {
+	//     "editId": {
+	//       "description": "Unique identifier for this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits/{editId}/apks",
+	//   "response": {
+	//     "$ref": "ApksListResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.edits.apks.upload":
+
+type EditsApksUploadCall struct {
+	s             *Service
+	packageNameid string
+	editId        string
+	opt_          map[string]interface{}
+	media_        io.Reader
+}
+
+// Upload:
+func (r *EditsApksService) Upload(packageNameid string, editId string) *EditsApksUploadCall {
+	c := &EditsApksUploadCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.editId = editId
+	return c
+}
+func (c *EditsApksUploadCall) Media(r io.Reader) *EditsApksUploadCall {
+	c.media_ = r
+	return c
+}
+
+func (c *EditsApksUploadCall) Do() (*Apk, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/apks")
+	if c.media_ != nil {
+		urls = strings.Replace(urls, "https://www.googleapis.com/", "https://www.googleapis.com/upload/", 1)
+		params.Set("uploadType", "multipart")
+	}
+	urls += "?" + params.Encode()
+	body = new(bytes.Buffer)
+	ctype := "application/json"
+	contentLength_, hasMedia_ := googleapi.ConditionallyIncludeMedia(c.media_, &body, &ctype)
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName": c.packageNameid,
+		"editId":      c.editId,
+	})
+	if hasMedia_ {
+		req.ContentLength = contentLength_
+	}
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *Apk
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "httpMethod": "POST",
+	//   "id": "androidpublisher.edits.apks.upload",
+	//   "mediaUpload": {
+	//     "accept": [
+	//       "application/octet-stream",
+	//       "application/vnd.android.package-archive"
+	//     ],
+	//     "maxSize": "50MB",
+	//     "protocols": {
+	//       "resumable": {
+	//         "multipart": true,
+	//         "path": "/resumable/upload/androidpublisher/v2/applications/{packageName}/edits/{editId}/apks"
+	//       },
+	//       "simple": {
+	//         "multipart": true,
+	//         "path": "/upload/androidpublisher/v2/applications/{packageName}/edits/{editId}/apks"
+	//       }
+	//     }
+	//   },
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "editId"
+	//   ],
+	//   "parameters": {
+	//     "editId": {
+	//       "description": "Unique identifier for this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits/{editId}/apks",
+	//   "response": {
+	//     "$ref": "Apk"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ],
+	//   "supportsMediaUpload": true
+	// }
+
+}
+
+// method id "androidpublisher.edits.details.get":
+
+type EditsDetailsGetCall struct {
+	s             *Service
+	packageNameid string
+	editId        string
+	opt_          map[string]interface{}
+}
+
+// Get: Fetches app details for this edit. This includes the default
+// language and developer support contact information.
+func (r *EditsDetailsService) Get(packageNameid string, editId string) *EditsDetailsGetCall {
+	c := &EditsDetailsGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.editId = editId
+	return c
+}
+
+func (c *EditsDetailsGetCall) Do() (*AppDetails, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/details")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName": c.packageNameid,
+		"editId":      c.editId,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *AppDetails
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Fetches app details for this edit. This includes the default language and developer support contact information.",
+	//   "httpMethod": "GET",
+	//   "id": "androidpublisher.edits.details.get",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "editId"
+	//   ],
+	//   "parameters": {
+	//     "editId": {
+	//       "description": "Unique identifier for this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits/{editId}/details",
+	//   "response": {
+	//     "$ref": "AppDetails"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.edits.details.patch":
+
+type EditsDetailsPatchCall struct {
+	s             *Service
+	packageNameid string
+	editId        string
+	appdetails    *AppDetails
+	opt_          map[string]interface{}
+}
+
+// Patch: Updates app details for this edit. This method supports patch
+// semantics.
+func (r *EditsDetailsService) Patch(packageNameid string, editId string, appdetails *AppDetails) *EditsDetailsPatchCall {
+	c := &EditsDetailsPatchCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.editId = editId
+	c.appdetails = appdetails
+	return c
+}
+
+func (c *EditsDetailsPatchCall) Do() (*AppDetails, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.appdetails)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/details")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("PATCH", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName": c.packageNameid,
+		"editId":      c.editId,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *AppDetails
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates app details for this edit. This method supports patch semantics.",
+	//   "httpMethod": "PATCH",
+	//   "id": "androidpublisher.edits.details.patch",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "editId"
+	//   ],
+	//   "parameters": {
+	//     "editId": {
+	//       "description": "Unique identifier for this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits/{editId}/details",
+	//   "request": {
+	//     "$ref": "AppDetails"
+	//   },
+	//   "response": {
+	//     "$ref": "AppDetails"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.edits.details.update":
+
+type EditsDetailsUpdateCall struct {
+	s             *Service
+	packageNameid string
+	editId        string
+	appdetails    *AppDetails
+	opt_          map[string]interface{}
+}
+
+// Update: Updates app details for this edit.
+func (r *EditsDetailsService) Update(packageNameid string, editId string, appdetails *AppDetails) *EditsDetailsUpdateCall {
+	c := &EditsDetailsUpdateCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.editId = editId
+	c.appdetails = appdetails
+	return c
+}
+
+func (c *EditsDetailsUpdateCall) Do() (*AppDetails, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.appdetails)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/details")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("PUT", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName": c.packageNameid,
+		"editId":      c.editId,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *AppDetails
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates app details for this edit.",
+	//   "httpMethod": "PUT",
+	//   "id": "androidpublisher.edits.details.update",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "editId"
+	//   ],
+	//   "parameters": {
+	//     "editId": {
+	//       "description": "Unique identifier for this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits/{editId}/details",
+	//   "request": {
+	//     "$ref": "AppDetails"
+	//   },
+	//   "response": {
+	//     "$ref": "AppDetails"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.edits.expansionfiles.get":
+
+type EditsExpansionfilesGetCall struct {
+	s                 *Service
+	packageNameid     string
+	editId            string
+	apkVersionCode    int64
+	expansionFileType string
+	opt_              map[string]interface{}
+}
+
+// Get: Fetches the Expansion File configuration for the APK specified.
+func (r *EditsExpansionfilesService) Get(packageNameid string, editId string, apkVersionCode int64, expansionFileType string) *EditsExpansionfilesGetCall {
+	c := &EditsExpansionfilesGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.editId = editId
+	c.apkVersionCode = apkVersionCode
+	c.expansionFileType = expansionFileType
+	return c
+}
+
+func (c *EditsExpansionfilesGetCall) Do() (*ExpansionFile, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName":       c.packageNameid,
+		"editId":            c.editId,
+		"apkVersionCode":    strconv.FormatInt(c.apkVersionCode, 10),
+		"expansionFileType": c.expansionFileType,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *ExpansionFile
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Fetches the Expansion File configuration for the APK specified.",
+	//   "httpMethod": "GET",
+	//   "id": "androidpublisher.edits.expansionfiles.get",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "editId",
+	//     "apkVersionCode",
+	//     "expansionFileType"
+	//   ],
+	//   "parameters": {
+	//     "apkVersionCode": {
+	//       "description": "The version code of the APK whose Expansion File configuration is being read or modified.",
+	//       "format": "int32",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "integer"
+	//     },
+	//     "editId": {
+	//       "description": "Unique identifier for this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "expansionFileType": {
+	//       "enum": [
+	//         "main",
+	//         "patch"
+	//       ],
+	//       "enumDescriptions": [
+	//         "",
+	//         ""
+	//       ],
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}",
+	//   "response": {
+	//     "$ref": "ExpansionFile"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.edits.expansionfiles.patch":
+
+type EditsExpansionfilesPatchCall struct {
+	s                 *Service
+	packageNameid     string
+	editId            string
+	apkVersionCode    int64
+	expansionFileType string
+	expansionfile     *ExpansionFile
+	opt_              map[string]interface{}
+}
+
+// Patch: Updates the APK's Expansion File configuration to reference
+// another APK's Expansion Files. To add a new Expansion File use the
+// Upload method. This method supports patch semantics.
+func (r *EditsExpansionfilesService) Patch(packageNameid string, editId string, apkVersionCode int64, expansionFileType string, expansionfile *ExpansionFile) *EditsExpansionfilesPatchCall {
+	c := &EditsExpansionfilesPatchCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.editId = editId
+	c.apkVersionCode = apkVersionCode
+	c.expansionFileType = expansionFileType
+	c.expansionfile = expansionfile
+	return c
+}
+
+func (c *EditsExpansionfilesPatchCall) Do() (*ExpansionFile, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.expansionfile)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("PATCH", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName":       c.packageNameid,
+		"editId":            c.editId,
+		"apkVersionCode":    strconv.FormatInt(c.apkVersionCode, 10),
+		"expansionFileType": c.expansionFileType,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *ExpansionFile
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates the APK's Expansion File configuration to reference another APK's Expansion Files. To add a new Expansion File use the Upload method. This method supports patch semantics.",
+	//   "httpMethod": "PATCH",
+	//   "id": "androidpublisher.edits.expansionfiles.patch",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "editId",
+	//     "apkVersionCode",
+	//     "expansionFileType"
+	//   ],
+	//   "parameters": {
+	//     "apkVersionCode": {
+	//       "description": "The version code of the APK whose Expansion File configuration is being read or modified.",
+	//       "format": "int32",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "integer"
+	//     },
+	//     "editId": {
+	//       "description": "Unique identifier for this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "expansionFileType": {
+	//       "enum": [
+	//         "main",
+	//         "patch"
+	//       ],
+	//       "enumDescriptions": [
+	//         "",
+	//         ""
+	//       ],
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}",
+	//   "request": {
+	//     "$ref": "ExpansionFile"
+	//   },
+	//   "response": {
+	//     "$ref": "ExpansionFile"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.edits.expansionfiles.update":
+
+type EditsExpansionfilesUpdateCall struct {
+	s                 *Service
+	packageNameid     string
+	editId            string
+	apkVersionCode    int64
+	expansionFileType string
+	expansionfile     *ExpansionFile
+	opt_              map[string]interface{}
+}
+
+// Update: Updates the APK's Expansion File configuration to reference
+// another APK's Expansion Files. To add a new Expansion File use the
+// Upload method.
+func (r *EditsExpansionfilesService) Update(packageNameid string, editId string, apkVersionCode int64, expansionFileType string, expansionfile *ExpansionFile) *EditsExpansionfilesUpdateCall {
+	c := &EditsExpansionfilesUpdateCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.editId = editId
+	c.apkVersionCode = apkVersionCode
+	c.expansionFileType = expansionFileType
+	c.expansionfile = expansionfile
+	return c
+}
+
+func (c *EditsExpansionfilesUpdateCall) Do() (*ExpansionFile, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.expansionfile)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("PUT", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName":       c.packageNameid,
+		"editId":            c.editId,
+		"apkVersionCode":    strconv.FormatInt(c.apkVersionCode, 10),
+		"expansionFileType": c.expansionFileType,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *ExpansionFile
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates the APK's Expansion File configuration to reference another APK's Expansion Files. To add a new Expansion File use the Upload method.",
+	//   "httpMethod": "PUT",
+	//   "id": "androidpublisher.edits.expansionfiles.update",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "editId",
+	//     "apkVersionCode",
+	//     "expansionFileType"
+	//   ],
+	//   "parameters": {
+	//     "apkVersionCode": {
+	//       "description": "The version code of the APK whose Expansion File configuration is being read or modified.",
+	//       "format": "int32",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "integer"
+	//     },
+	//     "editId": {
+	//       "description": "Unique identifier for this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "expansionFileType": {
+	//       "enum": [
+	//         "main",
+	//         "patch"
+	//       ],
+	//       "enumDescriptions": [
+	//         "",
+	//         ""
+	//       ],
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}",
+	//   "request": {
+	//     "$ref": "ExpansionFile"
+	//   },
+	//   "response": {
+	//     "$ref": "ExpansionFile"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.edits.expansionfiles.upload":
+
+type EditsExpansionfilesUploadCall struct {
+	s                 *Service
+	packageNameid     string
+	editId            string
+	apkVersionCode    int64
+	expansionFileType string
+	opt_              map[string]interface{}
+	media_            io.Reader
+}
+
+// Upload: Uploads and attaches a new Expansion File to the APK
+// specified.
+func (r *EditsExpansionfilesService) Upload(packageNameid string, editId string, apkVersionCode int64, expansionFileType string) *EditsExpansionfilesUploadCall {
+	c := &EditsExpansionfilesUploadCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.editId = editId
+	c.apkVersionCode = apkVersionCode
+	c.expansionFileType = expansionFileType
+	return c
+}
+func (c *EditsExpansionfilesUploadCall) Media(r io.Reader) *EditsExpansionfilesUploadCall {
+	c.media_ = r
+	return c
+}
+
+func (c *EditsExpansionfilesUploadCall) Do() (*ExpansionFilesUploadResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}")
+	if c.media_ != nil {
+		urls = strings.Replace(urls, "https://www.googleapis.com/", "https://www.googleapis.com/upload/", 1)
+		params.Set("uploadType", "multipart")
+	}
+	urls += "?" + params.Encode()
+	body = new(bytes.Buffer)
+	ctype := "application/json"
+	contentLength_, hasMedia_ := googleapi.ConditionallyIncludeMedia(c.media_, &body, &ctype)
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName":       c.packageNameid,
+		"editId":            c.editId,
+		"apkVersionCode":    strconv.FormatInt(c.apkVersionCode, 10),
+		"expansionFileType": c.expansionFileType,
+	})
+	if hasMedia_ {
+		req.ContentLength = contentLength_
+	}
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *ExpansionFilesUploadResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Uploads and attaches a new Expansion File to the APK specified.",
+	//   "httpMethod": "POST",
+	//   "id": "androidpublisher.edits.expansionfiles.upload",
+	//   "mediaUpload": {
+	//     "accept": [
+	//       "application/octet-stream"
+	//     ],
+	//     "maxSize": "2048MB",
+	//     "protocols": {
+	//       "resumable": {
+	//         "multipart": true,
+	//         "path": "/resumable/upload/androidpublisher/v2/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}"
+	//       },
+	//       "simple": {
+	//         "multipart": true,
+	//         "path": "/upload/androidpublisher/v2/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}"
+	//       }
+	//     }
+	//   },
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "editId",
+	//     "apkVersionCode",
+	//     "expansionFileType"
+	//   ],
+	//   "parameters": {
+	//     "apkVersionCode": {
+	//       "description": "The version code of the APK whose Expansion File configuration is being read or modified.",
+	//       "format": "int32",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "integer"
+	//     },
+	//     "editId": {
+	//       "description": "Unique identifier for this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "expansionFileType": {
+	//       "enum": [
+	//         "main",
+	//         "patch"
+	//       ],
+	//       "enumDescriptions": [
+	//         "",
+	//         ""
+	//       ],
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}",
+	//   "response": {
+	//     "$ref": "ExpansionFilesUploadResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ],
+	//   "supportsMediaUpload": true
+	// }
+
+}
+
+// method id "androidpublisher.edits.images.delete":
+
+type EditsImagesDeleteCall struct {
+	s             *Service
+	packageNameid string
+	editId        string
+	language      string
+	imageType     string
+	imageId       string
+	opt_          map[string]interface{}
+}
+
+// Delete: Deletes the image (specified by id) from the edit.
+func (r *EditsImagesService) Delete(packageNameid string, editId string, language string, imageType string, imageId string) *EditsImagesDeleteCall {
+	c := &EditsImagesDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.editId = editId
+	c.language = language
+	c.imageType = imageType
+	c.imageId = imageId
+	return c
+}
+
+func (c *EditsImagesDeleteCall) Do() error {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/listings/{language}/{imageType}/{imageId}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName": c.packageNameid,
+		"editId":      c.editId,
+		"language":    c.language,
+		"imageType":   c.imageType,
+		"imageId":     c.imageId,
+	})
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return err
+	}
+	return nil
+	// {
+	//   "description": "Deletes the image (specified by id) from the edit.",
+	//   "httpMethod": "DELETE",
+	//   "id": "androidpublisher.edits.images.delete",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "editId",
+	//     "language",
+	//     "imageType",
+	//     "imageId"
+	//   ],
+	//   "parameters": {
+	//     "editId": {
+	//       "description": "Unique identifier for this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "imageId": {
+	//       "description": "Unique identifier an image within the set of images attached to this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "imageType": {
+	//       "enum": [
+	//         "featureGraphic",
+	//         "icon",
+	//         "phoneScreenshots",
+	//         "promoGraphic",
+	//         "sevenInchScreenshots",
+	//         "tenInchScreenshots"
+	//       ],
+	//       "enumDescriptions": [
+	//         "",
+	//         "",
+	//         "",
+	//         "",
+	//         "",
+	//         ""
+	//       ],
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "language": {
+	//       "description": "The language code (a BCP-47 language tag) of the localized listing whose images are to read or modified. For example, to select Austrian German, pass \"de-AT\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits/{editId}/listings/{language}/{imageType}/{imageId}",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.edits.images.deleteall":
+
+type EditsImagesDeleteallCall struct {
+	s             *Service
+	packageNameid string
+	editId        string
+	language      string
+	imageType     string
+	opt_          map[string]interface{}
+}
+
+// Deleteall: Deletes all images for the specified language and image
+// type.
+func (r *EditsImagesService) Deleteall(packageNameid string, editId string, language string, imageType string) *EditsImagesDeleteallCall {
+	c := &EditsImagesDeleteallCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.editId = editId
+	c.language = language
+	c.imageType = imageType
+	return c
+}
+
+func (c *EditsImagesDeleteallCall) Do() (*ImagesDeleteAllResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/listings/{language}/{imageType}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName": c.packageNameid,
+		"editId":      c.editId,
+		"language":    c.language,
+		"imageType":   c.imageType,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *ImagesDeleteAllResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Deletes all images for the specified language and image type.",
+	//   "httpMethod": "DELETE",
+	//   "id": "androidpublisher.edits.images.deleteall",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "editId",
+	//     "language",
+	//     "imageType"
+	//   ],
+	//   "parameters": {
+	//     "editId": {
+	//       "description": "Unique identifier for this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "imageType": {
+	//       "enum": [
+	//         "featureGraphic",
+	//         "icon",
+	//         "phoneScreenshots",
+	//         "promoGraphic",
+	//         "sevenInchScreenshots",
+	//         "tenInchScreenshots"
+	//       ],
+	//       "enumDescriptions": [
+	//         "",
+	//         "",
+	//         "",
+	//         "",
+	//         "",
+	//         ""
+	//       ],
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "language": {
+	//       "description": "The language code (a BCP-47 language tag) of the localized listing whose images are to read or modified. For example, to select Austrian German, pass \"de-AT\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits/{editId}/listings/{language}/{imageType}",
+	//   "response": {
+	//     "$ref": "ImagesDeleteAllResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.edits.images.list":
+
+type EditsImagesListCall struct {
+	s             *Service
+	packageNameid string
+	editId        string
+	language      string
+	imageType     string
+	opt_          map[string]interface{}
+}
+
+// List: Lists all images for the specified language and image type.
+func (r *EditsImagesService) List(packageNameid string, editId string, language string, imageType string) *EditsImagesListCall {
+	c := &EditsImagesListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.editId = editId
+	c.language = language
+	c.imageType = imageType
+	return c
+}
+
+func (c *EditsImagesListCall) Do() (*ImagesListResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/listings/{language}/{imageType}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName": c.packageNameid,
+		"editId":      c.editId,
+		"language":    c.language,
+		"imageType":   c.imageType,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *ImagesListResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists all images for the specified language and image type.",
+	//   "httpMethod": "GET",
+	//   "id": "androidpublisher.edits.images.list",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "editId",
+	//     "language",
+	//     "imageType"
+	//   ],
+	//   "parameters": {
+	//     "editId": {
+	//       "description": "Unique identifier for this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "imageType": {
+	//       "enum": [
+	//         "featureGraphic",
+	//         "icon",
+	//         "phoneScreenshots",
+	//         "promoGraphic",
+	//         "sevenInchScreenshots",
+	//         "tenInchScreenshots"
+	//       ],
+	//       "enumDescriptions": [
+	//         "",
+	//         "",
+	//         "",
+	//         "",
+	//         "",
+	//         ""
+	//       ],
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "language": {
+	//       "description": "The language code (a BCP-47 language tag) of the localized listing whose images are to read or modified. For example, to select Austrian German, pass \"de-AT\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits/{editId}/listings/{language}/{imageType}",
+	//   "response": {
+	//     "$ref": "ImagesListResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.edits.images.upload":
+
+type EditsImagesUploadCall struct {
+	s             *Service
+	packageNameid string
+	editId        string
+	language      string
+	imageType     string
+	opt_          map[string]interface{}
+	media_        io.Reader
+}
+
+// Upload: Uploads a new image and adds it to the list of images for the
+// specified language and image type.
+func (r *EditsImagesService) Upload(packageNameid string, editId string, language string, imageType string) *EditsImagesUploadCall {
+	c := &EditsImagesUploadCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.editId = editId
+	c.language = language
+	c.imageType = imageType
+	return c
+}
+func (c *EditsImagesUploadCall) Media(r io.Reader) *EditsImagesUploadCall {
+	c.media_ = r
+	return c
+}
+
+func (c *EditsImagesUploadCall) Do() (*ImagesUploadResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/listings/{language}/{imageType}")
+	if c.media_ != nil {
+		urls = strings.Replace(urls, "https://www.googleapis.com/", "https://www.googleapis.com/upload/", 1)
+		params.Set("uploadType", "multipart")
+	}
+	urls += "?" + params.Encode()
+	body = new(bytes.Buffer)
+	ctype := "application/json"
+	contentLength_, hasMedia_ := googleapi.ConditionallyIncludeMedia(c.media_, &body, &ctype)
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName": c.packageNameid,
+		"editId":      c.editId,
+		"language":    c.language,
+		"imageType":   c.imageType,
+	})
+	if hasMedia_ {
+		req.ContentLength = contentLength_
+	}
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *ImagesUploadResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Uploads a new image and adds it to the list of images for the specified language and image type.",
+	//   "httpMethod": "POST",
+	//   "id": "androidpublisher.edits.images.upload",
+	//   "mediaUpload": {
+	//     "accept": [
+	//       "image/*"
+	//     ],
+	//     "maxSize": "15MB",
+	//     "protocols": {
+	//       "resumable": {
+	//         "multipart": true,
+	//         "path": "/resumable/upload/androidpublisher/v2/applications/{packageName}/edits/{editId}/listings/{language}/{imageType}"
+	//       },
+	//       "simple": {
+	//         "multipart": true,
+	//         "path": "/upload/androidpublisher/v2/applications/{packageName}/edits/{editId}/listings/{language}/{imageType}"
+	//       }
+	//     }
+	//   },
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "editId",
+	//     "language",
+	//     "imageType"
+	//   ],
+	//   "parameters": {
+	//     "editId": {
+	//       "description": "Unique identifier for this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "imageType": {
+	//       "enum": [
+	//         "featureGraphic",
+	//         "icon",
+	//         "phoneScreenshots",
+	//         "promoGraphic",
+	//         "sevenInchScreenshots",
+	//         "tenInchScreenshots"
+	//       ],
+	//       "enumDescriptions": [
+	//         "",
+	//         "",
+	//         "",
+	//         "",
+	//         "",
+	//         ""
+	//       ],
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "language": {
+	//       "description": "The language code (a BCP-47 language tag) of the localized listing whose images are to read or modified. For example, to select Austrian German, pass \"de-AT\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits/{editId}/listings/{language}/{imageType}",
+	//   "response": {
+	//     "$ref": "ImagesUploadResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ],
+	//   "supportsMediaUpload": true
+	// }
+
+}
+
+// method id "androidpublisher.edits.listings.delete":
+
+type EditsListingsDeleteCall struct {
+	s             *Service
+	packageNameid string
+	editId        string
+	language      string
+	opt_          map[string]interface{}
+}
+
+// Delete: Deletes the specified localized store listing from an edit.
+func (r *EditsListingsService) Delete(packageNameid string, editId string, language string) *EditsListingsDeleteCall {
+	c := &EditsListingsDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.editId = editId
+	c.language = language
+	return c
+}
+
+func (c *EditsListingsDeleteCall) Do() error {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/listings/{language}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName": c.packageNameid,
+		"editId":      c.editId,
+		"language":    c.language,
+	})
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return err
+	}
+	return nil
+	// {
+	//   "description": "Deletes the specified localized store listing from an edit.",
+	//   "httpMethod": "DELETE",
+	//   "id": "androidpublisher.edits.listings.delete",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "editId",
+	//     "language"
+	//   ],
+	//   "parameters": {
+	//     "editId": {
+	//       "description": "Unique identifier for this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "language": {
+	//       "description": "The language code (a BCP-47 language tag) of the localized listing to read or modify. For example, to select Austrian German, pass \"de-AT\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits/{editId}/listings/{language}",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.edits.listings.deleteall":
+
+type EditsListingsDeleteallCall struct {
+	s             *Service
+	packageNameid string
+	editId        string
+	opt_          map[string]interface{}
+}
+
+// Deleteall: Deletes all localized listings from an edit.
+func (r *EditsListingsService) Deleteall(packageNameid string, editId string) *EditsListingsDeleteallCall {
+	c := &EditsListingsDeleteallCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.editId = editId
+	return c
+}
+
+func (c *EditsListingsDeleteallCall) Do() error {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/listings")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName": c.packageNameid,
+		"editId":      c.editId,
+	})
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return err
+	}
+	return nil
+	// {
+	//   "description": "Deletes all localized listings from an edit.",
+	//   "httpMethod": "DELETE",
+	//   "id": "androidpublisher.edits.listings.deleteall",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "editId"
+	//   ],
+	//   "parameters": {
+	//     "editId": {
+	//       "description": "Unique identifier for this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits/{editId}/listings",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.edits.listings.get":
+
+type EditsListingsGetCall struct {
+	s             *Service
+	packageNameid string
+	editId        string
+	language      string
+	opt_          map[string]interface{}
+}
+
+// Get: Fetches information about a localized store listing.
+func (r *EditsListingsService) Get(packageNameid string, editId string, language string) *EditsListingsGetCall {
+	c := &EditsListingsGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.editId = editId
+	c.language = language
+	return c
+}
+
+func (c *EditsListingsGetCall) Do() (*Listing, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/listings/{language}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName": c.packageNameid,
+		"editId":      c.editId,
+		"language":    c.language,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *Listing
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Fetches information about a localized store listing.",
+	//   "httpMethod": "GET",
+	//   "id": "androidpublisher.edits.listings.get",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "editId",
+	//     "language"
+	//   ],
+	//   "parameters": {
+	//     "editId": {
+	//       "description": "Unique identifier for this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "language": {
+	//       "description": "The language code (a BCP-47 language tag) of the localized listing to read or modify. For example, to select Austrian German, pass \"de-AT\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits/{editId}/listings/{language}",
+	//   "response": {
+	//     "$ref": "Listing"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.edits.listings.list":
+
+type EditsListingsListCall struct {
+	s             *Service
+	packageNameid string
+	editId        string
+	opt_          map[string]interface{}
+}
+
+// List: Returns all of the localized store listings attached to this
+// edit.
+func (r *EditsListingsService) List(packageNameid string, editId string) *EditsListingsListCall {
+	c := &EditsListingsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.editId = editId
+	return c
+}
+
+func (c *EditsListingsListCall) Do() (*ListingsListResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/listings")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName": c.packageNameid,
+		"editId":      c.editId,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *ListingsListResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Returns all of the localized store listings attached to this edit.",
+	//   "httpMethod": "GET",
+	//   "id": "androidpublisher.edits.listings.list",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "editId"
+	//   ],
+	//   "parameters": {
+	//     "editId": {
+	//       "description": "Unique identifier for this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits/{editId}/listings",
+	//   "response": {
+	//     "$ref": "ListingsListResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.edits.listings.patch":
+
+type EditsListingsPatchCall struct {
+	s             *Service
+	packageNameid string
+	editId        string
+	language      string
+	listing       *Listing
+	opt_          map[string]interface{}
+}
+
+// Patch: Creates or updates a localized store listing. This method
+// supports patch semantics.
+func (r *EditsListingsService) Patch(packageNameid string, editId string, language string, listing *Listing) *EditsListingsPatchCall {
+	c := &EditsListingsPatchCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.editId = editId
+	c.language = language
+	c.listing = listing
+	return c
+}
+
+func (c *EditsListingsPatchCall) Do() (*Listing, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.listing)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/listings/{language}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("PATCH", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName": c.packageNameid,
+		"editId":      c.editId,
+		"language":    c.language,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *Listing
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Creates or updates a localized store listing. This method supports patch semantics.",
+	//   "httpMethod": "PATCH",
+	//   "id": "androidpublisher.edits.listings.patch",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "editId",
+	//     "language"
+	//   ],
+	//   "parameters": {
+	//     "editId": {
+	//       "description": "Unique identifier for this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "language": {
+	//       "description": "The language code (a BCP-47 language tag) of the localized listing to read or modify. For example, to select Austrian German, pass \"de-AT\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits/{editId}/listings/{language}",
+	//   "request": {
+	//     "$ref": "Listing"
+	//   },
+	//   "response": {
+	//     "$ref": "Listing"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.edits.listings.update":
+
+type EditsListingsUpdateCall struct {
+	s             *Service
+	packageNameid string
+	editId        string
+	language      string
+	listing       *Listing
+	opt_          map[string]interface{}
+}
+
+// Update: Creates or updates a localized store listing.
+func (r *EditsListingsService) Update(packageNameid string, editId string, language string, listing *Listing) *EditsListingsUpdateCall {
+	c := &EditsListingsUpdateCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.editId = editId
+	c.language = language
+	c.listing = listing
+	return c
+}
+
+func (c *EditsListingsUpdateCall) Do() (*Listing, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.listing)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/listings/{language}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("PUT", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName": c.packageNameid,
+		"editId":      c.editId,
+		"language":    c.language,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *Listing
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Creates or updates a localized store listing.",
+	//   "httpMethod": "PUT",
+	//   "id": "androidpublisher.edits.listings.update",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "editId",
+	//     "language"
+	//   ],
+	//   "parameters": {
+	//     "editId": {
+	//       "description": "Unique identifier for this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "language": {
+	//       "description": "The language code (a BCP-47 language tag) of the localized listing to read or modify. For example, to select Austrian German, pass \"de-AT\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits/{editId}/listings/{language}",
+	//   "request": {
+	//     "$ref": "Listing"
+	//   },
+	//   "response": {
+	//     "$ref": "Listing"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.edits.testers.get":
+
+type EditsTestersGetCall struct {
+	s             *Service
+	packageNameid string
+	editId        string
+	track         string
+	opt_          map[string]interface{}
+}
+
+// Get:
+func (r *EditsTestersService) Get(packageNameid string, editId string, track string) *EditsTestersGetCall {
+	c := &EditsTestersGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.editId = editId
+	c.track = track
+	return c
+}
+
+func (c *EditsTestersGetCall) Do() (*Testers, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/testers/{track}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName": c.packageNameid,
+		"editId":      c.editId,
+		"track":       c.track,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *Testers
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "httpMethod": "GET",
+	//   "id": "androidpublisher.edits.testers.get",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "editId",
+	//     "track"
+	//   ],
+	//   "parameters": {
+	//     "editId": {
+	//       "description": "Unique identifier for this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "track": {
+	//       "enum": [
+	//         "alpha",
+	//         "beta",
+	//         "production",
+	//         "rollout"
+	//       ],
+	//       "enumDescriptions": [
+	//         "",
+	//         "",
+	//         "",
+	//         ""
+	//       ],
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits/{editId}/testers/{track}",
+	//   "response": {
+	//     "$ref": "Testers"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.edits.testers.patch":
+
+type EditsTestersPatchCall struct {
+	s             *Service
+	packageNameid string
+	editId        string
+	track         string
+	testers       *Testers
+	opt_          map[string]interface{}
+}
+
+// Patch:
+func (r *EditsTestersService) Patch(packageNameid string, editId string, track string, testers *Testers) *EditsTestersPatchCall {
+	c := &EditsTestersPatchCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.editId = editId
+	c.track = track
+	c.testers = testers
+	return c
+}
+
+func (c *EditsTestersPatchCall) Do() (*Testers, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testers)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/testers/{track}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("PATCH", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName": c.packageNameid,
+		"editId":      c.editId,
+		"track":       c.track,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *Testers
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "httpMethod": "PATCH",
+	//   "id": "androidpublisher.edits.testers.patch",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "editId",
+	//     "track"
+	//   ],
+	//   "parameters": {
+	//     "editId": {
+	//       "description": "Unique identifier for this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "track": {
+	//       "enum": [
+	//         "alpha",
+	//         "beta",
+	//         "production",
+	//         "rollout"
+	//       ],
+	//       "enumDescriptions": [
+	//         "",
+	//         "",
+	//         "",
+	//         ""
+	//       ],
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits/{editId}/testers/{track}",
+	//   "request": {
+	//     "$ref": "Testers"
+	//   },
+	//   "response": {
+	//     "$ref": "Testers"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.edits.testers.update":
+
+type EditsTestersUpdateCall struct {
+	s             *Service
+	packageNameid string
+	editId        string
+	track         string
+	testers       *Testers
+	opt_          map[string]interface{}
+}
+
+// Update:
+func (r *EditsTestersService) Update(packageNameid string, editId string, track string, testers *Testers) *EditsTestersUpdateCall {
+	c := &EditsTestersUpdateCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.editId = editId
+	c.track = track
+	c.testers = testers
+	return c
+}
+
+func (c *EditsTestersUpdateCall) Do() (*Testers, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testers)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/testers/{track}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("PUT", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName": c.packageNameid,
+		"editId":      c.editId,
+		"track":       c.track,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *Testers
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "httpMethod": "PUT",
+	//   "id": "androidpublisher.edits.testers.update",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "editId",
+	//     "track"
+	//   ],
+	//   "parameters": {
+	//     "editId": {
+	//       "description": "Unique identifier for this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "track": {
+	//       "enum": [
+	//         "alpha",
+	//         "beta",
+	//         "production",
+	//         "rollout"
+	//       ],
+	//       "enumDescriptions": [
+	//         "",
+	//         "",
+	//         "",
+	//         ""
+	//       ],
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits/{editId}/testers/{track}",
+	//   "request": {
+	//     "$ref": "Testers"
+	//   },
+	//   "response": {
+	//     "$ref": "Testers"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.edits.tracks.get":
+
+type EditsTracksGetCall struct {
+	s             *Service
+	packageNameid string
+	editId        string
+	track         string
+	opt_          map[string]interface{}
+}
+
+// Get: Fetches the track configuration for the specified track type.
+// Includes the APK version codes that are in this track.
+func (r *EditsTracksService) Get(packageNameid string, editId string, track string) *EditsTracksGetCall {
+	c := &EditsTracksGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.editId = editId
+	c.track = track
+	return c
+}
+
+func (c *EditsTracksGetCall) Do() (*Track, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/tracks/{track}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName": c.packageNameid,
+		"editId":      c.editId,
+		"track":       c.track,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *Track
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Fetches the track configuration for the specified track type. Includes the APK version codes that are in this track.",
+	//   "httpMethod": "GET",
+	//   "id": "androidpublisher.edits.tracks.get",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "editId",
+	//     "track"
+	//   ],
+	//   "parameters": {
+	//     "editId": {
+	//       "description": "Unique identifier for this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "track": {
+	//       "description": "The track type to read or modify.",
+	//       "enum": [
+	//         "alpha",
+	//         "beta",
+	//         "production",
+	//         "rollout"
+	//       ],
+	//       "enumDescriptions": [
+	//         "",
+	//         "",
+	//         "",
+	//         ""
+	//       ],
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits/{editId}/tracks/{track}",
+	//   "response": {
+	//     "$ref": "Track"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.edits.tracks.list":
+
+type EditsTracksListCall struct {
+	s             *Service
+	packageNameid string
+	editId        string
+	opt_          map[string]interface{}
+}
+
+// List: Lists all the track configurations for this edit.
+func (r *EditsTracksService) List(packageNameid string, editId string) *EditsTracksListCall {
+	c := &EditsTracksListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.editId = editId
+	return c
+}
+
+func (c *EditsTracksListCall) Do() (*TracksListResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/tracks")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName": c.packageNameid,
+		"editId":      c.editId,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *TracksListResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists all the track configurations for this edit.",
+	//   "httpMethod": "GET",
+	//   "id": "androidpublisher.edits.tracks.list",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "editId"
+	//   ],
+	//   "parameters": {
+	//     "editId": {
+	//       "description": "Unique identifier for this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits/{editId}/tracks",
+	//   "response": {
+	//     "$ref": "TracksListResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.edits.tracks.patch":
+
+type EditsTracksPatchCall struct {
+	s             *Service
+	packageNameid string
+	editId        string
+	track         string
+	track2        *Track
+	opt_          map[string]interface{}
+}
+
+// Patch: Updates the track configuration for the specified track type.
+// This method supports patch semantics.
+func (r *EditsTracksService) Patch(packageNameid string, editId string, track string, track2 *Track) *EditsTracksPatchCall {
+	c := &EditsTracksPatchCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.editId = editId
+	c.track = track
+	c.track2 = track2
+	return c
+}
+
+func (c *EditsTracksPatchCall) Do() (*Track, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.track2)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/tracks/{track}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("PATCH", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName": c.packageNameid,
+		"editId":      c.editId,
+		"track":       c.track,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *Track
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates the track configuration for the specified track type. This method supports patch semantics.",
+	//   "httpMethod": "PATCH",
+	//   "id": "androidpublisher.edits.tracks.patch",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "editId",
+	//     "track"
+	//   ],
+	//   "parameters": {
+	//     "editId": {
+	//       "description": "Unique identifier for this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "track": {
+	//       "description": "The track type to read or modify.",
+	//       "enum": [
+	//         "alpha",
+	//         "beta",
+	//         "production",
+	//         "rollout"
+	//       ],
+	//       "enumDescriptions": [
+	//         "",
+	//         "",
+	//         "",
+	//         ""
+	//       ],
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits/{editId}/tracks/{track}",
+	//   "request": {
+	//     "$ref": "Track"
+	//   },
+	//   "response": {
+	//     "$ref": "Track"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.edits.tracks.update":
+
+type EditsTracksUpdateCall struct {
+	s             *Service
+	packageNameid string
+	editId        string
+	track         string
+	track2        *Track
+	opt_          map[string]interface{}
+}
+
+// Update: Updates the track configuration for the specified track type.
+func (r *EditsTracksService) Update(packageNameid string, editId string, track string, track2 *Track) *EditsTracksUpdateCall {
+	c := &EditsTracksUpdateCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.editId = editId
+	c.track = track
+	c.track2 = track2
+	return c
+}
+
+func (c *EditsTracksUpdateCall) Do() (*Track, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.track2)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/tracks/{track}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("PUT", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName": c.packageNameid,
+		"editId":      c.editId,
+		"track":       c.track,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *Track
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates the track configuration for the specified track type.",
+	//   "httpMethod": "PUT",
+	//   "id": "androidpublisher.edits.tracks.update",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "editId",
+	//     "track"
+	//   ],
+	//   "parameters": {
+	//     "editId": {
+	//       "description": "Unique identifier for this edit.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "track": {
+	//       "description": "The track type to read or modify.",
+	//       "enum": [
+	//         "alpha",
+	//         "beta",
+	//         "production",
+	//         "rollout"
+	//       ],
+	//       "enumDescriptions": [
+	//         "",
+	//         "",
+	//         "",
+	//         ""
+	//       ],
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/edits/{editId}/tracks/{track}",
+	//   "request": {
+	//     "$ref": "Track"
+	//   },
+	//   "response": {
+	//     "$ref": "Track"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.inappproducts.batch":
+
+type InappproductsBatchCall struct {
+	s                         *Service
+	inappproductsbatchrequest *InappproductsBatchRequest
+	opt_                      map[string]interface{}
+}
+
+// Batch:
+func (r *InappproductsService) Batch(inappproductsbatchrequest *InappproductsBatchRequest) *InappproductsBatchCall {
+	c := &InappproductsBatchCall{s: r.s, opt_: make(map[string]interface{})}
+	c.inappproductsbatchrequest = inappproductsbatchrequest
+	return c
+}
+
+func (c *InappproductsBatchCall) Do() (*InappproductsBatchResponse, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.inappproductsbatchrequest)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "inappproducts/batch")
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *InappproductsBatchResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "httpMethod": "POST",
+	//   "id": "androidpublisher.inappproducts.batch",
+	//   "path": "inappproducts/batch",
+	//   "request": {
+	//     "$ref": "InappproductsBatchRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "InappproductsBatchResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.inappproducts.delete":
+
+type InappproductsDeleteCall struct {
+	s             *Service
+	packageNameid string
+	skuid         string
+	opt_          map[string]interface{}
+}
+
+// Delete: Delete an in-app product for an app.
+func (r *InappproductsService) Delete(packageNameid string, skuid string) *InappproductsDeleteCall {
+	c := &InappproductsDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.skuid = skuid
+	return c
+}
+
+func (c *InappproductsDeleteCall) Do() error {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/inappproducts/{sku}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName": c.packageNameid,
+		"sku":         c.skuid,
+	})
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return err
+	}
+	return nil
+	// {
+	//   "description": "Delete an in-app product for an app.",
+	//   "httpMethod": "DELETE",
+	//   "id": "androidpublisher.inappproducts.delete",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "sku"
+	//   ],
+	//   "parameters": {
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app with the in-app product; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "sku": {
+	//       "description": "Unique identifier for the in-app product.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/inappproducts/{sku}",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.inappproducts.get":
+
+type InappproductsGetCall struct {
+	s           *Service
+	packageName string
+	skuid       string
+	opt_        map[string]interface{}
+}
+
+// Get: Returns information about the in-app product specified.
+func (r *InappproductsService) Get(packageName string, skuid string) *InappproductsGetCall {
+	c := &InappproductsGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageName = packageName
+	c.skuid = skuid
+	return c
+}
+
+func (c *InappproductsGetCall) Do() (*InAppProduct, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/inappproducts/{sku}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName": c.packageName,
+		"sku":         c.skuid,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *InAppProduct
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Returns information about the in-app product specified.",
+	//   "httpMethod": "GET",
+	//   "id": "androidpublisher.inappproducts.get",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "sku"
+	//   ],
+	//   "parameters": {
+	//     "packageName": {
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "sku": {
+	//       "description": "Unique identifier for the in-app product.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/inappproducts/{sku}",
+	//   "response": {
+	//     "$ref": "InAppProduct"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.inappproducts.insert":
+
+type InappproductsInsertCall struct {
+	s             *Service
+	packageNameid string
+	inappproduct  *InAppProduct
+	opt_          map[string]interface{}
+}
+
+// Insert: Creates a new in-app product for an app.
+func (r *InappproductsService) Insert(packageNameid string, inappproduct *InAppProduct) *InappproductsInsertCall {
+	c := &InappproductsInsertCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.inappproduct = inappproduct
+	return c
+}
+
+// AutoConvertMissingPrices sets the optional parameter
+// "autoConvertMissingPrices": If true the prices for all regions
+// targeted by the parent app that don't have a price specified for this
+// in-app product will be auto converted to the target currency based on
+// the default price. Defaults to false.
+func (c *InappproductsInsertCall) AutoConvertMissingPrices(autoConvertMissingPrices bool) *InappproductsInsertCall {
+	c.opt_["autoConvertMissingPrices"] = autoConvertMissingPrices
+	return c
+}
+
+func (c *InappproductsInsertCall) Do() (*InAppProduct, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.inappproduct)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	if v, ok := c.opt_["autoConvertMissingPrices"]; ok {
+		params.Set("autoConvertMissingPrices", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/inappproducts")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName": c.packageNameid,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *InAppProduct
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Creates a new in-app product for an app.",
+	//   "httpMethod": "POST",
+	//   "id": "androidpublisher.inappproducts.insert",
+	//   "parameterOrder": [
+	//     "packageName"
+	//   ],
+	//   "parameters": {
+	//     "autoConvertMissingPrices": {
+	//       "description": "If true the prices for all regions targeted by the parent app that don't have a price specified for this in-app product will be auto converted to the target currency based on the default price. Defaults to false.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/inappproducts",
+	//   "request": {
+	//     "$ref": "InAppProduct"
+	//   },
+	//   "response": {
+	//     "$ref": "InAppProduct"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.inappproducts.list":
+
+type InappproductsListCall struct {
+	s             *Service
+	packageNameid string
+	opt_          map[string]interface{}
+}
+
+// List: List all the in-app products for an Android app, both
+// subscriptions and managed in-app products..
+func (r *InappproductsService) List(packageNameid string) *InappproductsListCall {
+	c := &InappproductsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults":
+func (c *InappproductsListCall) MaxResults(maxResults int64) *InappproductsListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// StartIndex sets the optional parameter "startIndex":
+func (c *InappproductsListCall) StartIndex(startIndex int64) *InappproductsListCall {
+	c.opt_["startIndex"] = startIndex
+	return c
+}
+
+// Token sets the optional parameter "token":
+func (c *InappproductsListCall) Token(token string) *InappproductsListCall {
+	c.opt_["token"] = token
+	return c
+}
+
+func (c *InappproductsListCall) Do() (*InappproductsListResponse, 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_["startIndex"]; ok {
+		params.Set("startIndex", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["token"]; ok {
+		params.Set("token", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/inappproducts")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName": c.packageNameid,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *InappproductsListResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "List all the in-app products for an Android app, both subscriptions and managed in-app products..",
+	//   "httpMethod": "GET",
+	//   "id": "androidpublisher.inappproducts.list",
+	//   "parameterOrder": [
+	//     "packageName"
+	//   ],
+	//   "parameters": {
+	//     "maxResults": {
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app with in-app products; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "startIndex": {
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "token": {
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/inappproducts",
+	//   "response": {
+	//     "$ref": "InappproductsListResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.inappproducts.patch":
+
+type InappproductsPatchCall struct {
+	s             *Service
+	packageNameid string
+	skuid         string
+	inappproduct  *InAppProduct
+	opt_          map[string]interface{}
+}
+
+// Patch: Updates the details of an in-app product. This method supports
+// patch semantics.
+func (r *InappproductsService) Patch(packageNameid string, skuid string, inappproduct *InAppProduct) *InappproductsPatchCall {
+	c := &InappproductsPatchCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.skuid = skuid
+	c.inappproduct = inappproduct
+	return c
+}
+
+// AutoConvertMissingPrices sets the optional parameter
+// "autoConvertMissingPrices": If true the prices for all regions
+// targeted by the parent app that don't have a price specified for this
+// in-app product will be auto converted to the target currency based on
+// the default price. Defaults to false.
+func (c *InappproductsPatchCall) AutoConvertMissingPrices(autoConvertMissingPrices bool) *InappproductsPatchCall {
+	c.opt_["autoConvertMissingPrices"] = autoConvertMissingPrices
+	return c
+}
+
+func (c *InappproductsPatchCall) Do() (*InAppProduct, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.inappproduct)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	if v, ok := c.opt_["autoConvertMissingPrices"]; ok {
+		params.Set("autoConvertMissingPrices", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/inappproducts/{sku}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("PATCH", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName": c.packageNameid,
+		"sku":         c.skuid,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *InAppProduct
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates the details of an in-app product. This method supports patch semantics.",
+	//   "httpMethod": "PATCH",
+	//   "id": "androidpublisher.inappproducts.patch",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "sku"
+	//   ],
+	//   "parameters": {
+	//     "autoConvertMissingPrices": {
+	//       "description": "If true the prices for all regions targeted by the parent app that don't have a price specified for this in-app product will be auto converted to the target currency based on the default price. Defaults to false.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app with the in-app product; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "sku": {
+	//       "description": "Unique identifier for the in-app product.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/inappproducts/{sku}",
+	//   "request": {
+	//     "$ref": "InAppProduct"
+	//   },
+	//   "response": {
+	//     "$ref": "InAppProduct"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.inappproducts.update":
+
+type InappproductsUpdateCall struct {
+	s             *Service
+	packageNameid string
+	skuid         string
+	inappproduct  *InAppProduct
+	opt_          map[string]interface{}
+}
+
+// Update: Updates the details of an in-app product.
+func (r *InappproductsService) Update(packageNameid string, skuid string, inappproduct *InAppProduct) *InappproductsUpdateCall {
+	c := &InappproductsUpdateCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageNameid = packageNameid
+	c.skuid = skuid
+	c.inappproduct = inappproduct
+	return c
+}
+
+// AutoConvertMissingPrices sets the optional parameter
+// "autoConvertMissingPrices": If true the prices for all regions
+// targeted by the parent app that don't have a price specified for this
+// in-app product will be auto converted to the target currency based on
+// the default price. Defaults to false.
+func (c *InappproductsUpdateCall) AutoConvertMissingPrices(autoConvertMissingPrices bool) *InappproductsUpdateCall {
+	c.opt_["autoConvertMissingPrices"] = autoConvertMissingPrices
+	return c
+}
+
+func (c *InappproductsUpdateCall) Do() (*InAppProduct, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.inappproduct)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	if v, ok := c.opt_["autoConvertMissingPrices"]; ok {
+		params.Set("autoConvertMissingPrices", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/inappproducts/{sku}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("PUT", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName": c.packageNameid,
+		"sku":         c.skuid,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *InAppProduct
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates the details of an in-app product.",
+	//   "httpMethod": "PUT",
+	//   "id": "androidpublisher.inappproducts.update",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "sku"
+	//   ],
+	//   "parameters": {
+	//     "autoConvertMissingPrices": {
+	//       "description": "If true the prices for all regions targeted by the parent app that don't have a price specified for this in-app product will be auto converted to the target currency based on the default price. Defaults to false.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     },
+	//     "packageName": {
+	//       "description": "Unique identifier for the Android app with the in-app product; for example, \"com.spiffygame\".",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "sku": {
+	//       "description": "Unique identifier for the in-app product.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/inappproducts/{sku}",
+	//   "request": {
+	//     "$ref": "InAppProduct"
+	//   },
+	//   "response": {
+	//     "$ref": "InAppProduct"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.purchases.products.get":
+
+type PurchasesProductsGetCall struct {
+	s           *Service
+	packageName string
+	productId   string
+	token       string
+	opt_        map[string]interface{}
+}
+
+// Get: Checks the purchase and consumption status of an inapp item.
+func (r *PurchasesProductsService) Get(packageName string, productId string, token string) *PurchasesProductsGetCall {
+	c := &PurchasesProductsGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageName = packageName
+	c.productId = productId
+	c.token = token
+	return c
+}
+
+func (c *PurchasesProductsGetCall) Do() (*ProductPurchase, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/purchases/products/{productId}/tokens/{token}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName": c.packageName,
+		"productId":   c.productId,
+		"token":       c.token,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *ProductPurchase
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Checks the purchase and consumption status of an inapp item.",
+	//   "httpMethod": "GET",
+	//   "id": "androidpublisher.purchases.products.get",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "productId",
+	//     "token"
+	//   ],
+	//   "parameters": {
+	//     "packageName": {
+	//       "description": "The package name of the application the inapp product was sold in (for example, 'com.some.thing').",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "productId": {
+	//       "description": "The inapp product SKU (for example, 'com.some.thing.inapp1').",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "token": {
+	//       "description": "The token provided to the user's device when the inapp product was purchased.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/purchases/products/{productId}/tokens/{token}",
+	//   "response": {
+	//     "$ref": "ProductPurchase"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.purchases.subscriptions.cancel":
+
+type PurchasesSubscriptionsCancelCall struct {
+	s              *Service
+	packageName    string
+	subscriptionId string
+	token          string
+	opt_           map[string]interface{}
+}
+
+// Cancel: Cancels a user's subscription purchase. The subscription
+// remains valid until its expiration time.
+func (r *PurchasesSubscriptionsService) Cancel(packageName string, subscriptionId string, token string) *PurchasesSubscriptionsCancelCall {
+	c := &PurchasesSubscriptionsCancelCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageName = packageName
+	c.subscriptionId = subscriptionId
+	c.token = token
+	return c
+}
+
+func (c *PurchasesSubscriptionsCancelCall) Do() error {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}:cancel")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName":    c.packageName,
+		"subscriptionId": c.subscriptionId,
+		"token":          c.token,
+	})
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return err
+	}
+	return nil
+	// {
+	//   "description": "Cancels a user's subscription purchase. The subscription remains valid until its expiration time.",
+	//   "httpMethod": "POST",
+	//   "id": "androidpublisher.purchases.subscriptions.cancel",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "subscriptionId",
+	//     "token"
+	//   ],
+	//   "parameters": {
+	//     "packageName": {
+	//       "description": "The package name of the application for which this subscription was purchased (for example, 'com.some.thing').",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "subscriptionId": {
+	//       "description": "The purchased subscription ID (for example, 'monthly001').",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "token": {
+	//       "description": "The token provided to the user's device when the subscription was purchased.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}:cancel",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
+
+// method id "androidpublisher.purchases.subscriptions.get":
+
+type PurchasesSubscriptionsGetCall struct {
+	s              *Service
+	packageName    string
+	subscriptionId string
+	token          string
+	opt_           map[string]interface{}
+}
+
+// Get: Checks whether a user's subscription purchase is valid and
+// returns its expiry time.
+func (r *PurchasesSubscriptionsService) Get(packageName string, subscriptionId string, token string) *PurchasesSubscriptionsGetCall {
+	c := &PurchasesSubscriptionsGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.packageName = packageName
+	c.subscriptionId = subscriptionId
+	c.token = token
+	return c
+}
+
+func (c *PurchasesSubscriptionsGetCall) Do() (*SubscriptionPurchase, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"packageName":    c.packageName,
+		"subscriptionId": c.subscriptionId,
+		"token":          c.token,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *SubscriptionPurchase
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Checks whether a user's subscription purchase is valid and returns its expiry time.",
+	//   "httpMethod": "GET",
+	//   "id": "androidpublisher.purchases.subscriptions.get",
+	//   "parameterOrder": [
+	//     "packageName",
+	//     "subscriptionId",
+	//     "token"
+	//   ],
+	//   "parameters": {
+	//     "packageName": {
+	//       "description": "The package name of the application for which this subscription was purchased (for example, 'com.some.thing').",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "subscriptionId": {
+	//       "description": "The purchased subscription ID (for example, 'monthly001').",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "token": {
+	//       "description": "The token provided to the user's device when the subscription was purchased.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}",
+	//   "response": {
+	//     "$ref": "SubscriptionPurchase"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/androidpublisher"
+	//   ]
+	// }
+
+}
diff --git a/appsactivity/v1/appsactivity-api.json b/appsactivity/v1/appsactivity-api.json
index aebcd71..5f84d28 100644
--- a/appsactivity/v1/appsactivity-api.json
+++ b/appsactivity/v1/appsactivity-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"C11OM5Qtr9122-scy_WeqND9D3o/Y1zmUbEebthNo2ekCQB1bBVQOfY\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/MmwdCrDlqhBi2D0-JqsndcBoC3M\"",
  "discoveryVersion": "v1",
  "id": "appsactivity:v1",
  "name": "appsactivity",
  "version": "v1",
+ "revision": "20140619",
  "title": "Google Apps Activity API",
  "description": "Provides a historical view of activity.",
  "ownerDomain": "google.com",
diff --git a/appstate/v1/appstate-api.json b/appstate/v1/appstate-api.json
index 378887c..f01cb54 100644
--- a/appstate/v1/appstate-api.json
+++ b/appstate/v1/appstate-api.json
@@ -1,11 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"5M1WkxnZyJhziV-cW1kdtwscs8E/EnSZa1SHLGZEekBcq4ZvbeJLWQE\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/51VhsU_3cNsKJAzqZ7PMeqX1MEY\"",
  "discoveryVersion": "v1",
  "id": "appstate:v1",
  "name": "appstate",
  "canonicalName": "App State",
  "version": "v1",
+ "revision": "20140812",
  "title": "Google App State API",
  "description": "The Google App State API.",
  "ownerDomain": "google.com",
diff --git a/audit/v1/audit-api.json b/audit/v1/audit-api.json
index fe976a0..d7e3af1 100644
--- a/audit/v1/audit-api.json
+++ b/audit/v1/audit-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/FnodQzLqRh_xHIkICK4PBBoHaLA\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/WETM6oPOB_u6tVJCuBP1DDIWlEg\"",
  "discoveryVersion": "v1",
  "id": "audit:v1",
  "name": "audit",
  "version": "v1",
+ "revision": "20130108",
  "title": "Enterprise Audit API",
  "description": "Lets you access user activities in your enterprise made through various applications.",
  "ownerDomain": "google.com",
diff --git a/autoscaler/v1beta2/autoscaler-api.json b/autoscaler/v1beta2/autoscaler-api.json
index 0e0d794..8842aaa 100644
--- a/autoscaler/v1beta2/autoscaler-api.json
+++ b/autoscaler/v1beta2/autoscaler-api.json
@@ -1,11 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/FBfZWLA1nh_aAuB5Tug73G1xJqs\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/FJuvjX0f1VGUeRzYl7v6jwJPstg\"",
  "discoveryVersion": "v1",
  "id": "autoscaler:v1beta2",
  "name": "autoscaler",
  "version": "v1beta2",
- "revision": "20140710",
+ "revision": "20140731",
  "title": "Google Compute Engine Autoscaler API",
  "description": "The Google Compute Engine Autoscaler API provides autoscaling for groups of Cloud VMs.",
  "ownerDomain": "google.com",
@@ -147,7 +147,18 @@
     },
     "cpuUtilization": {
      "$ref": "AutoscalingPolicyCpuUtilization",
-     "description": "Configuration parameters of CPU based autoscaling policy."
+     "description": "Exactly one utilization policy should be provided. Configuration parameters of CPU based autoscaling policy."
+    },
+    "customMetricUtilizations": {
+     "type": "array",
+     "description": "Configuration parameters of autoscaling based on custom metric.",
+     "items": {
+      "$ref": "AutoscalingPolicyCustomMetricUtilization"
+     }
+    },
+    "loadBalancingUtilization": {
+     "$ref": "AutoscalingPolicyLoadBalancingUtilization",
+     "description": "Configuration parameters of autoscaling based on load balancer."
     },
     "maxNumReplicas": {
      "type": "integer",
@@ -168,7 +179,35 @@
    "properties": {
     "utilizationTarget": {
      "type": "number",
-     "description": "The target utilization that the Autoscaler should maintain. Must be a float value between (0, 1]. If not defined, the default is 0.8.",
+     "description": "The target utilization that the Autoscaler should maintain. It is represented as a fraction of used cores. For example: 6 cores used in 8-core VM are represented here as 0.75. Must be a float value between (0, 1]. If not defined, the default is 0.8.",
+     "format": "double"
+    }
+   }
+  },
+  "AutoscalingPolicyCustomMetricUtilization": {
+   "id": "AutoscalingPolicyCustomMetricUtilization",
+   "type": "object",
+   "description": "Custom utilization metric policy.",
+   "properties": {
+    "metric": {
+     "type": "string",
+     "description": "Identifier of the metric. It should be a Cloud Monitoring metric. The metric can not have negative values. The metric should be an utilization metric (increasing number of VMs handling requests x times should reduce average value of the metric roughly x times). For example you could use: compute.googleapis.com/instance/network/received_bytes_count."
+    },
+    "utilizationTarget": {
+     "type": "number",
+     "description": "Target value of the metric which Autoscaler should maintain. Must be a positive value.",
+     "format": "double"
+    }
+   }
+  },
+  "AutoscalingPolicyLoadBalancingUtilization": {
+   "id": "AutoscalingPolicyLoadBalancingUtilization",
+   "type": "object",
+   "description": "Load balancing utilization policy.",
+   "properties": {
+    "utilizationTarget": {
+     "type": "number",
+     "description": "Fraction of backend capacity utilization (set in HTTP load balancing configuration) that Autoscaler should maintain. Must be a positive float value. If not defined, the default is 0.8. For example if your maxRatePerInstance capacity (in HTTP Load Balancing configuration) is set at 10 and you would like to keep number of instances such that each instance receives 7 QPS on average, set this to 0.7.",
      "format": "double"
     }
    }
diff --git a/autoscaler/v1beta2/autoscaler-gen.go b/autoscaler/v1beta2/autoscaler-gen.go
index d5057f2..ae9b23b 100644
--- a/autoscaler/v1beta2/autoscaler-gen.go
+++ b/autoscaler/v1beta2/autoscaler-gen.go
@@ -134,10 +134,18 @@
 	// seconds.
 	CoolDownPeriodSec int64 `json:"coolDownPeriodSec,omitempty"`
 
-	// CpuUtilization: Configuration parameters of CPU based autoscaling
-	// policy.
+	// CpuUtilization: Exactly one utilization policy should be provided.
+	// Configuration parameters of CPU based autoscaling policy.
 	CpuUtilization *AutoscalingPolicyCpuUtilization `json:"cpuUtilization,omitempty"`
 
+	// CustomMetricUtilizations: Configuration parameters of autoscaling
+	// based on custom metric.
+	CustomMetricUtilizations []*AutoscalingPolicyCustomMetricUtilization `json:"customMetricUtilizations,omitempty"`
+
+	// LoadBalancingUtilization: Configuration parameters of autoscaling
+	// based on load balancer.
+	LoadBalancingUtilization *AutoscalingPolicyLoadBalancingUtilization `json:"loadBalancingUtilization,omitempty"`
+
 	// MaxNumReplicas: The maximum number of replicas that the Autoscaler
 	// can scale up to.
 	MaxNumReplicas int64 `json:"maxNumReplicas,omitempty"`
@@ -149,8 +157,34 @@
 
 type AutoscalingPolicyCpuUtilization struct {
 	// UtilizationTarget: The target utilization that the Autoscaler should
-	// maintain. Must be a float value between (0, 1]. If not defined, the
-	// default is 0.8.
+	// maintain. It is represented as a fraction of used cores. For example:
+	// 6 cores used in 8-core VM are represented here as 0.75. Must be a
+	// float value between (0, 1]. If not defined, the default is 0.8.
+	UtilizationTarget float64 `json:"utilizationTarget,omitempty"`
+}
+
+type AutoscalingPolicyCustomMetricUtilization struct {
+	// Metric: Identifier of the metric. It should be a Cloud Monitoring
+	// metric. The metric can not have negative values. The metric should be
+	// an utilization metric (increasing number of VMs handling requests x
+	// times should reduce average value of the metric roughly x times). For
+	// example you could use:
+	// compute.googleapis.com/instance/network/received_bytes_count.
+	Metric string `json:"metric,omitempty"`
+
+	// UtilizationTarget: Target value of the metric which Autoscaler should
+	// maintain. Must be a positive value.
+	UtilizationTarget float64 `json:"utilizationTarget,omitempty"`
+}
+
+type AutoscalingPolicyLoadBalancingUtilization struct {
+	// UtilizationTarget: Fraction of backend capacity utilization (set in
+	// HTTP load balancing configuration) that Autoscaler should maintain.
+	// Must be a positive float value. If not defined, the default is 0.8.
+	// For example if your maxRatePerInstance capacity (in HTTP Load
+	// Balancing configuration) is set at 10 and you would like to keep
+	// number of instances such that each instance receives 7 QPS on
+	// average, set this to 0.7.
 	UtilizationTarget float64 `json:"utilizationTarget,omitempty"`
 }
 
diff --git a/bigquery/v2/bigquery-api.json b/bigquery/v2/bigquery-api.json
index 23c6ec3..66759d6 100644
--- a/bigquery/v2/bigquery-api.json
+++ b/bigquery/v2/bigquery-api.json
@@ -1,11 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/eoUh3ZfOfs136OrKu1zxAIy6CrA\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/Naei1N35n6IisOZs1QqGp-c-62k\"",
  "discoveryVersion": "v1",
  "id": "bigquery:v2",
  "name": "bigquery",
  "version": "v2",
- "revision": "20140715",
+ "revision": "20140808",
  "title": "BigQuery API",
  "description": "A data platform for customers to create, manage, share and query data.",
  "ownerDomain": "google.com",
diff --git a/blogger/v2/blogger-api.json b/blogger/v2/blogger-api.json
index 1a13594..c1a3dc9 100644
--- a/blogger/v2/blogger-api.json
+++ b/blogger/v2/blogger-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/7OUX8PWQu-_Ueqls9RjxxnFExMI\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/fNIxq7wwFumkovbnT-Go88X9GgY\"",
  "discoveryVersion": "v1",
  "id": "blogger:v2",
  "name": "blogger",
  "version": "v2",
+ "revision": "20140730",
  "title": "Blogger API",
  "description": "API for access to the data within Blogger.",
  "ownerDomain": "google.com",
diff --git a/blogger/v3/blogger-api.json b/blogger/v3/blogger-api.json
index 2cdf828..53cd9cf 100644
--- a/blogger/v3/blogger-api.json
+++ b/blogger/v3/blogger-api.json
@@ -1,11 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/BrZoer-JM4DM9kghr6CWDzq-goM\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/wcehTISyxJwwFY9tLAXuUlmng8s\"",
  "discoveryVersion": "v1",
  "id": "blogger:v3",
  "name": "blogger",
  "version": "v3",
- "revision": "20140711",
+ "revision": "20140730",
  "title": "Blogger API",
  "description": "API for access to the data within Blogger.",
  "ownerDomain": "google.com",
@@ -428,6 +428,10 @@
      "type": "string",
      "description": "The body content of this Page, in HTML."
     },
+    "etag": {
+     "type": "string",
+     "description": "Etag of the resource."
+    },
     "id": {
      "type": "string",
      "description": "The identifier for this resource."
@@ -567,6 +571,10 @@
      "type": "string",
      "description": "The JSON meta-data for the Post."
     },
+    "etag": {
+     "type": "string",
+     "description": "Etag of the resource."
+    },
     "id": {
      "type": "string",
      "description": "The identifier of this Post."
@@ -1629,6 +1637,66 @@
       "https://www.googleapis.com/auth/blogger"
      ]
     },
+    "publish": {
+     "id": "blogger.pages.publish",
+     "path": "blogs/{blogId}/pages/{pageId}/publish",
+     "httpMethod": "POST",
+     "description": "Publishes a draft page.",
+     "parameters": {
+      "blogId": {
+       "type": "string",
+       "description": "The ID of the blog.",
+       "required": true,
+       "location": "path"
+      },
+      "pageId": {
+       "type": "string",
+       "description": "The ID of the page.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "blogId",
+      "pageId"
+     ],
+     "response": {
+      "$ref": "Page"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/blogger"
+     ]
+    },
+    "revert": {
+     "id": "blogger.pages.revert",
+     "path": "blogs/{blogId}/pages/{pageId}/revert",
+     "httpMethod": "POST",
+     "description": "Revert a published or scheduled page to draft state.",
+     "parameters": {
+      "blogId": {
+       "type": "string",
+       "description": "The ID of the blog.",
+       "required": true,
+       "location": "path"
+      },
+      "pageId": {
+       "type": "string",
+       "description": "The ID of the page.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "blogId",
+      "pageId"
+     ],
+     "response": {
+      "$ref": "Page"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/blogger"
+     ]
+    },
     "update": {
      "id": "blogger.pages.update",
      "path": "blogs/{blogId}/pages/{pageId}",
diff --git a/blogger/v3/blogger-gen.go b/blogger/v3/blogger-gen.go
index cd6dc48..ce0d2f4 100644
--- a/blogger/v3/blogger-gen.go
+++ b/blogger/v3/blogger-gen.go
@@ -369,6 +369,9 @@
 	// Content: The body content of this Page, in HTML.
 	Content string `json:"content,omitempty"`
 
+	// Etag: Etag of the resource.
+	Etag string `json:"etag,omitempty"`
+
 	// Id: The identifier for this resource.
 	Id string `json:"id,omitempty"`
 
@@ -460,6 +463,9 @@
 	// CustomMetaData: The JSON meta-data for the Post.
 	CustomMetaData string `json:"customMetaData,omitempty"`
 
+	// Etag: Etag of the resource.
+	Etag string `json:"etag,omitempty"`
+
 	// Id: The identifier of this Post.
 	Id string `json:"id,omitempty"`
 
@@ -2498,6 +2504,156 @@
 
 }
 
+// method id "blogger.pages.publish":
+
+type PagesPublishCall struct {
+	s      *Service
+	blogId string
+	pageId string
+	opt_   map[string]interface{}
+}
+
+// Publish: Publishes a draft page.
+func (r *PagesService) Publish(blogId string, pageId string) *PagesPublishCall {
+	c := &PagesPublishCall{s: r.s, opt_: make(map[string]interface{})}
+	c.blogId = blogId
+	c.pageId = pageId
+	return c
+}
+
+func (c *PagesPublishCall) Do() (*Page, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/pages/{pageId}/publish")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"blogId": c.blogId,
+		"pageId": c.pageId,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *Page
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Publishes a draft page.",
+	//   "httpMethod": "POST",
+	//   "id": "blogger.pages.publish",
+	//   "parameterOrder": [
+	//     "blogId",
+	//     "pageId"
+	//   ],
+	//   "parameters": {
+	//     "blogId": {
+	//       "description": "The ID of the blog.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "pageId": {
+	//       "description": "The ID of the page.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "blogs/{blogId}/pages/{pageId}/publish",
+	//   "response": {
+	//     "$ref": "Page"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/blogger"
+	//   ]
+	// }
+
+}
+
+// method id "blogger.pages.revert":
+
+type PagesRevertCall struct {
+	s      *Service
+	blogId string
+	pageId string
+	opt_   map[string]interface{}
+}
+
+// Revert: Revert a published or scheduled page to draft state.
+func (r *PagesService) Revert(blogId string, pageId string) *PagesRevertCall {
+	c := &PagesRevertCall{s: r.s, opt_: make(map[string]interface{})}
+	c.blogId = blogId
+	c.pageId = pageId
+	return c
+}
+
+func (c *PagesRevertCall) Do() (*Page, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/pages/{pageId}/revert")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"blogId": c.blogId,
+		"pageId": c.pageId,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *Page
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Revert a published or scheduled page to draft state.",
+	//   "httpMethod": "POST",
+	//   "id": "blogger.pages.revert",
+	//   "parameterOrder": [
+	//     "blogId",
+	//     "pageId"
+	//   ],
+	//   "parameters": {
+	//     "blogId": {
+	//       "description": "The ID of the blog.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "pageId": {
+	//       "description": "The ID of the page.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "blogs/{blogId}/pages/{pageId}/revert",
+	//   "response": {
+	//     "$ref": "Page"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/blogger"
+	//   ]
+	// }
+
+}
+
 // method id "blogger.pages.update":
 
 type PagesUpdateCall struct {
diff --git a/books/v1/books-api.json b/books/v1/books-api.json
index 8c87879..ab9c18c 100644
--- a/books/v1/books-api.json
+++ b/books/v1/books-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"C11OM5Qtr9122-scy_WeqND9D3o/fOUT8ysj7UwsMfXC3MyxMbk09lM\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/XYINYydMW1yxY9sZ7pYYpIG24qI\"",
  "discoveryVersion": "v1",
  "id": "books:v1",
  "name": "books",
  "version": "v1",
+ "revision": "20140507",
  "title": "Books API",
  "description": "Lets you search for books and manage your Google Books library.",
  "ownerDomain": "google.com",
diff --git a/calendar/v3/calendar-api.json b/calendar/v3/calendar-api.json
index af02af6..ecc3c75 100644
--- a/calendar/v3/calendar-api.json
+++ b/calendar/v3/calendar-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"C11OM5Qtr9122-scy_WeqND9D3o/icy_kevyvyjgCKjN6s1gb_9TUZs\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/UIR_3EVSB6noa0orJD8b3VE4Hoo\"",
  "discoveryVersion": "v1",
  "id": "calendar:v3",
  "name": "calendar",
  "version": "v3",
+ "revision": "20140723",
  "title": "Calendar API",
  "description": "Lets you manipulate events and other calendar data.",
  "ownerDomain": "google.com",
diff --git a/cloudmonitoring/v2beta1/cloudmonitoring-api.json b/cloudmonitoring/v2beta1/cloudmonitoring-api.json
index 0c6ebaf..bb36cee 100644
--- a/cloudmonitoring/v2beta1/cloudmonitoring-api.json
+++ b/cloudmonitoring/v2beta1/cloudmonitoring-api.json
@@ -1,11 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/A-1sT-U5SnExq9BpO6mgnwTPLyk\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/Y8lWoeWRwexxTuK_qR4soNIViwU\"",
  "discoveryVersion": "v1",
  "id": "cloudmonitoring:v2beta1",
  "name": "cloudmonitoring",
+ "canonicalName": "Cloud Monitoring",
  "version": "v2beta1",
- "revision": "20140714",
+ "revision": "20140807",
  "title": "Cloud Monitoring API",
  "description": "API for accessing Google Cloud and API monitoring data.",
  "ownerDomain": "google.com",
@@ -14,7 +15,7 @@
   "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/eap/cloud-monitoring/v2beta1/",
+ "documentationLink": "https://developers.google.com/cloud-monitoring/",
  "protocol": "rest",
  "baseUrl": "https://www.googleapis.com/cloudmonitoring/v2beta1/projects/",
  "basePath": "/cloudmonitoring/v2beta1/projects/",
@@ -496,7 +497,7 @@
       },
       "metric": {
        "type": "string",
-       "description": "Metric names are protocol-free URLs as listed in the Supported Metrics page. For example, appengine.googleapis.com/http/server/response_count or compute.googleapis.com/instance/disk/read_ops_count.",
+       "description": "Metric names are protocol-free URLs as listed in the Supported Metrics page. For example, compute.googleapis.com/instance/disk/read_ops_count.",
        "required": true,
        "location": "path"
       },
@@ -572,7 +573,7 @@
       },
       "metric": {
        "type": "string",
-       "description": "Metric names are protocol-free URLs as listed in the Supported Metrics page. For example, appengine.googleapis.com/http/server/response_count or compute.googleapis.com/instance/disk/read_ops_count.",
+       "description": "Metric names are protocol-free URLs as listed in the Supported Metrics page. For example, compute.googleapis.com/instance/disk/read_ops_count.",
        "required": true,
        "location": "path"
       },
diff --git a/cloudmonitoring/v2beta1/cloudmonitoring-gen.go b/cloudmonitoring/v2beta1/cloudmonitoring-gen.go
index 954caa6..2d49dcc 100644
--- a/cloudmonitoring/v2beta1/cloudmonitoring-gen.go
+++ b/cloudmonitoring/v2beta1/cloudmonitoring-gen.go
@@ -1,6 +1,6 @@
 // Package cloudmonitoring provides access to the Cloud Monitoring API.
 //
-// See https://developers.google.com/cloud/eap/cloud-monitoring/v2beta1/
+// See https://developers.google.com/cloud-monitoring/
 //
 // Usage example:
 //
@@ -597,7 +597,7 @@
 	//       "type": "string"
 	//     },
 	//     "metric": {
-	//       "description": "Metric names are protocol-free URLs as listed in the Supported Metrics page. For example, appengine.googleapis.com/http/server/response_count or compute.googleapis.com/instance/disk/read_ops_count.",
+	//       "description": "Metric names are protocol-free URLs as listed in the Supported Metrics page. For example, compute.googleapis.com/instance/disk/read_ops_count.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -801,7 +801,7 @@
 	//       "type": "string"
 	//     },
 	//     "metric": {
-	//       "description": "Metric names are protocol-free URLs as listed in the Supported Metrics page. For example, appengine.googleapis.com/http/server/response_count or compute.googleapis.com/instance/disk/read_ops_count.",
+	//       "description": "Metric names are protocol-free URLs as listed in the Supported Metrics page. For example, compute.googleapis.com/instance/disk/read_ops_count.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
diff --git a/compute/v1/compute-api.json b/compute/v1/compute-api.json
index ec71edb..cc70a7a 100644
--- a/compute/v1/compute-api.json
+++ b/compute/v1/compute-api.json
@@ -1,11 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/Qrs2SriggaSYO28pp7DFm8wFPbo\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/_57RJ87-RejFO7u1YI3xEG-zluw\"",
  "discoveryVersion": "v1",
  "id": "compute:v1",
  "name": "compute",
  "version": "v1",
- "revision": "20140625",
+ "revision": "20140802",
  "title": "Compute Engine API",
  "description": "API for the Google Compute Engine service.",
  "ownerDomain": "google.com",
@@ -395,7 +395,7 @@
   "AttachedDiskInitializeParams": {
    "id": "AttachedDiskInitializeParams",
    "type": "object",
-   "description": "Initialization parameters for the new disk (Mutually exclusive with 'source', can currently only be specified on the boot disk).",
+   "description": "Initialization parameters for the new disk (input-only). Can only be specified on the boot disk or local SSDs. Mutually exclusive with 'source'.",
    "properties": {
     "diskName": {
      "type": "string",
@@ -444,7 +444,7 @@
     },
     "group": {
      "type": "string",
-     "description": "URL of a zonal Cloud Resource View resource. This resoure view defines the list of instances that serve traffic. Member virtual machine instances from each resource view must live in the same zone as the resource view itself."
+     "description": "URL of a zonal Cloud Resource View resource. This resource view defines the list of instances that serve traffic. Member virtual machine instances from each resource view must live in the same zone as the resource view itself. No two backends in a backend service are allowed to use same Resource View resource."
     },
     "maxRate": {
      "type": "integer",
@@ -515,6 +515,10 @@
      "description": "The TCP port to connect on the backend. The default value is 80.",
      "format": "int32"
     },
+    "portName": {
+     "type": "string",
+     "description": "Name of backend port. The same name should appear in the resource views referenced by this service. Required."
+    },
     "protocol": {
      "type": "string",
      "enum": [
@@ -1162,7 +1166,7 @@
     },
     "IPProtocol": {
      "type": "string",
-     "description": "The IP protocol to which this rule applies, valid options are 'TCP', 'UDP', 'ESP', 'AH' or 'SCTP'",
+     "description": "The IP protocol to which this rule applies, valid options are 'TCP', 'UDP', 'ESP', 'AH' or 'SCTP'.",
      "enum": [
       "AH",
       "ESP",
@@ -1203,7 +1207,7 @@
     },
     "portRange": {
      "type": "string",
-     "description": "Applicable only when 'IPProtocol' is 'TCP', 'UDP' or 'SCTP', only packets addressed to ports in the specified range will be forwarded to 'target'. If 'portRange' is left empty (default value), all ports are forwarded. Forwarding rules with the same [IPAddress, IPProtocol] pair must have disjoint port ranges. @pattern: \\d+(?:-\\d+)?"
+     "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."
     },
     "region": {
      "type": "string",
@@ -1398,7 +1402,7 @@
     },
     "hosts": {
      "type": "array",
-     "description": "The list of host patterns to match. They must be FQDN except that it may start with ?*.? or ?*-?. The ?*? acts like a glob and will match any string of atoms (separated by .?s and -?s) to the left.",
+     "description": "The list of host patterns to match. They must be valid hostnames except that they may start with *. or *-. The * acts like a glob and will match any string of atoms (separated by .s and -s) to the left.",
      "items": {
       "type": "string"
      }
@@ -1924,7 +1928,7 @@
    "properties": {
     "kind": {
      "type": "string",
-     "description": "Identifies what kind of resource this is. Value: the fixed string \"compute#license\".",
+     "description": "Type of resource.",
      "default": "compute#license"
     },
     "name": {
@@ -2678,7 +2682,7 @@
    "properties": {
     "paths": {
      "type": "array",
-     "description": "The list of path patterns to match. Each must start with ?/\" and the only place a \"*\" is allowed is at the end following a \"/\". The string fed to the path matcher does not include any text after the first \"?\" or \"#\", and those chars are not allowed here.",
+     "description": "The list of path patterns to match. Each must start with / and the only place a * is allowed is at the end following a /. The string fed to the path matcher does not include any text after the first ? or #, and those chars are not allowed here.",
      "items": {
       "type": "string"
      }
@@ -2909,7 +2913,8 @@
    "type": "object",
    "properties": {
     "group": {
-     "type": "string"
+     "type": "string",
+     "description": "A URI referencing one of the resource views listed in the backend service."
     }
    }
   },
diff --git a/compute/v1/compute-gen.go b/compute/v1/compute-gen.go
index 294df37..4b8f053 100644
--- a/compute/v1/compute-gen.go
+++ b/compute/v1/compute-gen.go
@@ -579,10 +579,11 @@
 	// is provided by the client when the resource is created.
 	Description string `json:"description,omitempty"`
 
-	// Group: URL of a zonal Cloud Resource View resource. This resoure view
-	// defines the list of instances that serve traffic. Member virtual
+	// Group: URL of a zonal Cloud Resource View resource. This resource
+	// view defines the list of instances that serve traffic. Member virtual
 	// machine instances from each resource view must live in the same zone
-	// as the resource view itself.
+	// as the resource view itself. No two backends in a backend service are
+	// allowed to use same Resource View resource.
 	Group string `json:"group,omitempty"`
 
 	// MaxRate: The max RPS of the group. Can be used with either balancing
@@ -641,6 +642,10 @@
 	// 80.
 	Port int64 `json:"port,omitempty"`
 
+	// PortName: Name of backend port. The same name should appear in the
+	// resource views referenced by this service. Required.
+	PortName string `json:"portName,omitempty"`
+
 	Protocol string `json:"protocol,omitempty"`
 
 	// SelfLink: Server defined URL for the resource (output only).
@@ -1034,7 +1039,7 @@
 	IPAddress string `json:"IPAddress,omitempty"`
 
 	// IPProtocol: The IP protocol to which this rule applies, valid options
-	// are 'TCP', 'UDP', 'ESP', 'AH' or 'SCTP'
+	// are 'TCP', 'UDP', 'ESP', 'AH' or 'SCTP'.
 	IPProtocol string `json:"IPProtocol,omitempty"`
 
 	// CreationTimestamp: Creation timestamp in RFC3339 text format (output
@@ -1062,7 +1067,6 @@
 	// 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 regional forwarding rule resides
@@ -1164,10 +1168,10 @@
 type HostRule struct {
 	Description string `json:"description,omitempty"`
 
-	// Hosts: The list of host patterns to match. They must be FQDN except
-	// that it may start with ?*.? or ?*-?. The ?*? acts like a glob and
-	// will match any string of atoms (separated by .?s and -?s) to the
-	// left.
+	// Hosts: The list of host patterns to match. They must be valid
+	// hostnames except that they may start with *. or *-. The * acts like a
+	// glob and will match any string of atoms (separated by .s and -s) to
+	// the left.
 	Hosts []string `json:"hosts,omitempty"`
 
 	// PathMatcher: The name of the PathMatcher to match the path portion of
@@ -1498,8 +1502,7 @@
 }
 
 type License struct {
-	// Kind: Identifies what kind of resource this is. Value: the fixed
-	// string "compute#license".
+	// Kind: Type of resource.
 	Kind string `json:"kind,omitempty"`
 
 	// Name: Name of the resource; provided by the client when the resource
@@ -1944,10 +1947,10 @@
 }
 
 type PathRule struct {
-	// Paths: The list of path patterns to match. Each must start with ?/"
-	// and the only place a "*" is allowed is at the end following a "/".
-	// The string fed to the path matcher does not include any text after
-	// the first "?" or "#", and those chars are not allowed here.
+	// Paths: The list of path patterns to match. Each must start with / and
+	// the only place a * is allowed is at the end following a /. The string
+	// fed to the path matcher does not include any text after the first ?
+	// or #, and those chars are not allowed here.
 	Paths []string `json:"paths,omitempty"`
 
 	// Service: The URL of the BackendService resource if this rule is
@@ -2054,6 +2057,8 @@
 }
 
 type ResourceGroupReference struct {
+	// Group: A URI referencing one of the resource views listed in the
+	// backend service.
 	Group string `json:"group,omitempty"`
 }
 
diff --git a/content/v2/content-api.json b/content/v2/content-api.json
index bd172eb..ea07fd4 100644
--- a/content/v2/content-api.json
+++ b/content/v2/content-api.json
@@ -1,12 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/-8w52eNC7sHUEf_7_5FxtsK7k78\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/VH4aAJWm6pYrUeX36N3yLBZe3nA\"",
  "discoveryVersion": "v1",
  "id": "content:v2",
  "name": "content",
  "canonicalName": "Shopping Content",
  "version": "v2",
- "revision": "20140718",
+ "revision": "20140813",
  "title": "Content API for Shopping",
  "description": "Manage product items, inventory, and Merchant Center accounts for Google Shopping.",
  "ownerDomain": "google.com",
@@ -95,7 +95,12 @@
     "id": {
      "type": "string",
      "description": "Merchant Center account ID.",
-     "format": "uint64"
+     "format": "uint64",
+     "annotations": {
+      "required": [
+       "content.accounts.update"
+      ]
+     }
     },
     "kind": {
      "type": "string",
@@ -148,228 +153,6 @@
     }
    }
   },
-  "AccountShipping": {
-   "id": "AccountShipping",
-   "type": "object",
-   "properties": {
-    "accountId": {
-     "type": "string",
-     "description": "The ID of the account to which these account shipping settings belong.",
-     "format": "uint64"
-    },
-    "carrierRates": {
-     "type": "array",
-     "description": "Carrier-based shipping calculations.",
-     "items": {
-      "$ref": "AccountShippingCarrierRate"
-     }
-    },
-    "kind": {
-     "type": "string",
-     "description": "Identifies what kind of resource this is. Value: the fixed string \"content#accountShipping\".",
-     "default": "content#accountShipping"
-    },
-    "locationGroups": {
-     "type": "array",
-     "description": "Location groups for shipping.",
-     "items": {
-      "$ref": "AccountShippingLocationGroup"
-     }
-    },
-    "rateTables": {
-     "type": "array",
-     "description": "Rate tables definitions.",
-     "items": {
-      "$ref": "AccountShippingRateTable"
-     }
-    },
-    "services": {
-     "type": "array",
-     "description": "Shipping services describing shipping fees calculation.",
-     "items": {
-      "$ref": "AccountShippingShippingService"
-     }
-    }
-   }
-  },
-  "AccountShippingCarrierRate": {
-   "id": "AccountShippingCarrierRate",
-   "type": "object",
-   "description": "A carrier-calculated shipping rate.",
-   "properties": {
-    "carrier": {
-     "type": "string",
-     "description": "The carrier that is responsible for the shipping, such as \"UPS\", \"FedEx\", or \"USPS\"."
-    },
-    "carrierService": {
-     "type": "string",
-     "description": "The carrier service, such as \"Ground\" or \"2Day\"."
-    },
-    "modifierFlatRate": {
-     "$ref": "Price",
-     "description": "Additive shipping rate modifier."
-    },
-    "modifierPercent": {
-     "type": "string",
-     "description": "Multiplicative shipping rate modifier in percent. Represented as a floating point number without the percentage character."
-    },
-    "name": {
-     "type": "string",
-     "description": "The name of the carrier rate."
-    },
-    "saleCountry": {
-     "type": "string",
-     "description": "Sale country for which this carrier rate is valid, represented as an ISO_3166-1 Alpha-2 code."
-    },
-    "shippingOrigin": {
-     "type": "string",
-     "description": "Shipping origin represented as a postal code."
-    }
-   }
-  },
-  "AccountShippingCondition": {
-   "id": "AccountShippingCondition",
-   "type": "object",
-   "properties": {
-    "deliveryLocationGroup": {
-     "type": "string",
-     "description": "Delivery location in terms of a location group name. A location group with this name must be specified among location groups."
-    },
-    "deliveryLocationId": {
-     "type": "string",
-     "description": "Delivery location in terms of a location ID. Can be used to represent administrative areas, smaller country subdivisions, or cities.",
-     "format": "int64"
-    },
-    "deliveryPostalCode": {
-     "type": "string",
-     "description": "Delivery location in terms of a postal code range."
-    },
-    "priceMax": {
-     "$ref": "Price",
-     "description": "Maximum shipping price. Forms an interval between the maximum of smaller prices (exclusive) and this price (inclusive)."
-    },
-    "shippingLabel": {
-     "type": "string",
-     "description": "Shipping label of the product. The products with the label are matched."
-    },
-    "weightMax": {
-     "$ref": "Weight",
-     "description": "Maximum shipping weight. Forms an interval between the maximum of smaller weight (exclusive) and this weight (inclusive)."
-    }
-   }
-  },
-  "AccountShippingLocationGroup": {
-   "id": "AccountShippingLocationGroup",
-   "type": "object",
-   "description": "A user-defined locations group in a given country. All the locations of the group must be of the same type.",
-   "properties": {
-    "country": {
-     "type": "string",
-     "description": "The country in which this location group is, represented as ISO_3166-1 Alpha-2 code."
-    },
-    "locationIds": {
-     "type": "array",
-     "description": "A location ID (also called criteria ID) representing administrative",
-     "items": {
-      "type": "string",
-      "format": "int64"
-     }
-    },
-    "name": {
-     "type": "string",
-     "description": "The name of the location group."
-    },
-    "postalCodes": {
-     "type": "array",
-     "description": "A postal code range, that can be either:  \n- A single postal code (e.g. 12345)\n- A postal code prefix followed by a star (e.g. 1234*)\n- A range of postal codes, separated by a dash (e.g. 12340-12359)\n- A range of postal codes prefixes (e.g. 1234*-1235*). Prefixes must be of the same length (e.g. 12*-2* is invalid).",
-     "items": {
-      "type": "string"
-     }
-    }
-   }
-  },
-  "AccountShippingRateTable": {
-   "id": "AccountShippingRateTable",
-   "type": "object",
-   "description": "A single or bi-dimensional table of shipping rates. Each dimension is defined in terms of consecutive price/weight ranges, delivery locations, or shipping labels.",
-   "properties": {
-    "contents": {
-     "type": "array",
-     "description": "One-dimensional table cells define one condition along the same dimension.! Bi-dimensional table cells use two dimension with respectively M and N distinct values and must contain exactly M * N cells with distinct conditions (for each possible value pairs).",
-     "items": {
-      "$ref": "AccountShippingRateTableCell"
-     }
-    },
-    "name": {
-     "type": "string",
-     "description": "The name of the rate table."
-    },
-    "saleCountry": {
-     "type": "string",
-     "description": "Sale country for which this table is valid, represented as an ISO_3166-1 Alpha-2 code."
-    }
-   }
-  },
-  "AccountShippingRateTableCell": {
-   "id": "AccountShippingRateTableCell",
-   "type": "object",
-   "properties": {
-    "condition": {
-     "$ref": "AccountShippingCondition",
-     "description": "Conditions for which the cell is valid. All cells in a table must use the same dimension or pair of dimensions among price, weight, shipping_label or delivery location. If the cell condition is not specified, it will act as a catch-all and match all the elements that are not matched by other cells in this dimension."
-    },
-    "rate": {
-     "$ref": "Price",
-     "description": "The rate applicable if the cell conditions are matched."
-    }
-   }
-  },
-  "AccountShippingShippingService": {
-   "id": "AccountShippingShippingService",
-   "type": "object",
-   "description": "Shipping services provided in a country.",
-   "properties": {
-    "active": {
-     "type": "boolean",
-     "description": "Whether the shipping service is available. Defaults to true if not specified."
-    },
-    "calculationMethod": {
-     "$ref": "AccountShippingShippingServiceCalculationMethod",
-     "description": "Calculation method for the \"simple\" case that needs no rules."
-    },
-    "name": {
-     "type": "string",
-     "description": "The name of this shipping service."
-    },
-    "saleCountry": {
-     "type": "string",
-     "description": "Sale country for which this service can be used, represented as an ISO_3166-1 Alpha-2 code."
-    }
-   }
-  },
-  "AccountShippingShippingServiceCalculationMethod": {
-   "id": "AccountShippingShippingServiceCalculationMethod",
-   "type": "object",
-   "description": "Shipping cost calculation method. Exactly one of the field is set.",
-   "properties": {
-    "carrierRate": {
-     "type": "string",
-     "description": "Name of the carrier rate to use for the calculation."
-    },
-    "flatRate": {
-     "$ref": "Price",
-     "description": "Fixed price shipping, represented as a floating point number associated with a currency."
-    },
-    "percentageRate": {
-     "type": "string",
-     "description": "Percentage of the price, represented as a floating point number without the percentage character."
-    },
-    "rateTable": {
-     "type": "string",
-     "description": "Name of the rate table to use for the calculation."
-    }
-   }
-  },
   "AccountStatus": {
    "id": "AccountStatus",
    "type": "object",
@@ -462,57 +245,6 @@
     }
    }
   },
-  "AccountTax": {
-   "id": "AccountTax",
-   "type": "object",
-   "properties": {
-    "accountId": {
-     "type": "string",
-     "description": "The ID of the account to which these account tax settings belong.",
-     "format": "uint64"
-    },
-    "kind": {
-     "type": "string",
-     "description": "Identifies what kind of resource this is. Value: the fixed string \"content#accountTax\".",
-     "default": "content#accountTax"
-    },
-    "rules": {
-     "type": "array",
-     "description": "Tax rules.",
-     "items": {
-      "$ref": "AccountTaxTaxRule"
-     }
-    }
-   }
-  },
-  "AccountTaxTaxRule": {
-   "id": "AccountTaxTaxRule",
-   "type": "object",
-   "description": "Tax calculation rule to apply in a state or province (USA only).",
-   "properties": {
-    "country": {
-     "type": "string",
-     "description": "Country code in which tax is applicable."
-    },
-    "locationId": {
-     "type": "string",
-     "description": "State (or province) is which the tax is applicable, described by its location id (also called criteria id).",
-     "format": "uint64"
-    },
-    "ratePercent": {
-     "type": "string",
-     "description": "Explicit tax rate in percent, represented as a floating point number without the percentage character. Must not be negative."
-    },
-    "shippingTaxed": {
-     "type": "boolean",
-     "description": "If true, shipping charges are also taxed."
-    },
-    "useGlobalRate": {
-     "type": "boolean",
-     "description": "Whether the tax rate is taken from a global tax table or specified explicitly."
-    }
-   }
-  },
   "AccountUser": {
    "id": "AccountUser",
    "type": "object",
@@ -736,11 +468,22 @@
     },
     "contentLanguage": {
      "type": "string",
-     "description": "The two-letter ISO 639-1 language of the items in the feed."
+     "description": "The two-letter ISO 639-1 language of the items in the feed.",
+     "annotations": {
+      "required": [
+       "content.datafeeds.insert"
+      ]
+     }
     },
     "contentType": {
      "type": "string",
-     "description": "The type of data feed."
+     "description": "The type of data feed.",
+     "annotations": {
+      "required": [
+       "content.datafeeds.insert",
+       "content.datafeeds.update"
+      ]
+     }
     },
     "fetchSchedule": {
      "$ref": "DatafeedFetchSchedule",
@@ -748,7 +491,13 @@
     },
     "fileName": {
      "type": "string",
-     "description": "The filename of the feed. All feeds must have a unique file name."
+     "description": "The filename of the feed. All feeds must have a unique file name.",
+     "annotations": {
+      "required": [
+       "content.datafeeds.insert",
+       "content.datafeeds.update"
+      ]
+     }
     },
     "format": {
      "$ref": "DatafeedFormat",
@@ -757,7 +506,12 @@
     "id": {
      "type": "string",
      "description": "The ID of the data feed.",
-     "format": "int64"
+     "format": "int64",
+     "annotations": {
+      "required": [
+       "content.datafeeds.update"
+      ]
+     }
     },
     "intendedDestinations": {
      "type": "array",
@@ -773,11 +527,22 @@
     },
     "name": {
      "type": "string",
-     "description": "A descriptive name of the data feed."
+     "description": "A descriptive name of the data feed.",
+     "annotations": {
+      "required": [
+       "content.datafeeds.insert"
+      ]
+     }
     },
     "targetCountry": {
      "type": "string",
-     "description": "The two-letter ISO 3166 country where the items in the feed will be included in the search index."
+     "description": "The two-letter ISO 3166 country where the items in the feed will be included in the search index.",
+     "annotations": {
+      "required": [
+       "content.datafeeds.insert",
+       "content.datafeeds.update"
+      ]
+     }
     }
    }
   },
@@ -927,73 +692,6 @@
     }
    }
   },
-  "DatafeedsBatchRequest": {
-   "id": "DatafeedsBatchRequest",
-   "type": "object",
-   "properties": {
-    "entrys": {
-     "type": "array",
-     "items": {
-      "$ref": "DatafeedsBatchRequestEntry"
-     }
-    }
-   }
-  },
-  "DatafeedsBatchRequestEntry": {
-   "id": "DatafeedsBatchRequestEntry",
-   "type": "object",
-   "properties": {
-    "batchId": {
-     "type": "integer",
-     "format": "uint32"
-    },
-    "datafeedsinsertrequest": {
-     "$ref": "DatafeedsInsertRequest"
-    },
-    "datafeedsupdaterequest": {
-     "$ref": "DatafeedsUpdateRequest"
-    },
-    "methodName": {
-     "type": "string"
-    }
-   }
-  },
-  "DatafeedsBatchResponse": {
-   "id": "DatafeedsBatchResponse",
-   "type": "object",
-   "properties": {
-    "entrys": {
-     "type": "array",
-     "items": {
-      "$ref": "DatafeedsBatchResponseEntry"
-     }
-    },
-    "kind": {
-     "type": "string",
-     "description": "Identifies what kind of resource this is. Value: the fixed string \"content#datafeedsBatchResponse\".",
-     "default": "content#datafeedsBatchResponse"
-    }
-   }
-  },
-  "DatafeedsBatchResponseEntry": {
-   "id": "DatafeedsBatchResponseEntry",
-   "type": "object",
-   "properties": {
-    "batchId": {
-     "type": "integer",
-     "format": "uint32"
-    },
-    "datafeedsgetresponse": {
-     "$ref": "DatafeedsGetResponse"
-    },
-    "datafeedsinsertresponse": {
-     "$ref": "DatafeedsInsertResponse"
-    },
-    "datafeedsupdateresponse": {
-     "$ref": "DatafeedsUpdateResponse"
-    }
-   }
-  },
   "DatafeedsCustomBatchRequest": {
    "id": "DatafeedsCustomBatchRequest",
    "type": "object",
@@ -1073,43 +771,6 @@
     }
    }
   },
-  "DatafeedsGetResponse": {
-   "id": "DatafeedsGetResponse",
-   "type": "object",
-   "properties": {
-    "kind": {
-     "type": "string",
-     "description": "Identifies what kind of resource this is. Value: the fixed string \"content#datafeedsGetResponse\".",
-     "default": "content#datafeedsGetResponse"
-    },
-    "resource": {
-     "$ref": "Datafeed"
-    }
-   }
-  },
-  "DatafeedsInsertRequest": {
-   "id": "DatafeedsInsertRequest",
-   "type": "object",
-   "properties": {
-    "resource": {
-     "$ref": "Datafeed"
-    }
-   }
-  },
-  "DatafeedsInsertResponse": {
-   "id": "DatafeedsInsertResponse",
-   "type": "object",
-   "properties": {
-    "kind": {
-     "type": "string",
-     "description": "Identifies what kind of resource this is. Value: the fixed string \"content#datafeedsInsertResponse\".",
-     "default": "content#datafeedsInsertResponse"
-    },
-    "resource": {
-     "$ref": "Datafeed"
-    }
-   }
-  },
   "DatafeedsListResponse": {
    "id": "DatafeedsListResponse",
    "type": "object",
@@ -1127,84 +788,6 @@
     }
    }
   },
-  "DatafeedsUpdateRequest": {
-   "id": "DatafeedsUpdateRequest",
-   "type": "object",
-   "properties": {
-    "resource": {
-     "$ref": "Datafeed"
-    }
-   }
-  },
-  "DatafeedsUpdateResponse": {
-   "id": "DatafeedsUpdateResponse",
-   "type": "object",
-   "properties": {
-    "kind": {
-     "type": "string",
-     "description": "Identifies what kind of resource this is. Value: the fixed string \"content#datafeedsUpdateResponse\".",
-     "default": "content#datafeedsUpdateResponse"
-    },
-    "resource": {
-     "$ref": "Datafeed"
-    }
-   }
-  },
-  "DatafeedstatusesBatchRequest": {
-   "id": "DatafeedstatusesBatchRequest",
-   "type": "object",
-   "properties": {
-    "entrys": {
-     "type": "array",
-     "items": {
-      "$ref": "DatafeedstatusesBatchRequestEntry"
-     }
-    }
-   }
-  },
-  "DatafeedstatusesBatchRequestEntry": {
-   "id": "DatafeedstatusesBatchRequestEntry",
-   "type": "object",
-   "properties": {
-    "batchId": {
-     "type": "integer",
-     "format": "uint32"
-    },
-    "methodName": {
-     "type": "string"
-    }
-   }
-  },
-  "DatafeedstatusesBatchResponse": {
-   "id": "DatafeedstatusesBatchResponse",
-   "type": "object",
-   "properties": {
-    "entrys": {
-     "type": "array",
-     "items": {
-      "$ref": "DatafeedstatusesBatchResponseEntry"
-     }
-    },
-    "kind": {
-     "type": "string",
-     "description": "Identifies what kind of resource this is. Value: the fixed string \"content#datafeedstatusesBatchResponse\".",
-     "default": "content#datafeedstatusesBatchResponse"
-    }
-   }
-  },
-  "DatafeedstatusesBatchResponseEntry": {
-   "id": "DatafeedstatusesBatchResponseEntry",
-   "type": "object",
-   "properties": {
-    "batchId": {
-     "type": "integer",
-     "format": "uint32"
-    },
-    "datafeedstatusesgetresponse": {
-     "$ref": "DatafeedstatusesGetResponse"
-    }
-   }
-  },
   "DatafeedstatusesCustomBatchRequest": {
    "id": "DatafeedstatusesCustomBatchRequest",
    "type": "object",
@@ -1280,20 +863,6 @@
     }
    }
   },
-  "DatafeedstatusesGetResponse": {
-   "id": "DatafeedstatusesGetResponse",
-   "type": "object",
-   "properties": {
-    "kind": {
-     "type": "string",
-     "description": "Identifies what kind of resource this is. Value: the fixed string \"content#datafeedstatusesGetResponse\".",
-     "default": "content#datafeedstatusesGetResponse"
-    },
-    "resource": {
-     "$ref": "DatafeedStatus"
-    }
-   }
-  },
   "DatafeedstatusesListResponse": {
    "id": "DatafeedstatusesListResponse",
    "type": "object",
@@ -2255,20 +1824,6 @@
      }
     }
    }
-  },
-  "Weight": {
-   "id": "Weight",
-   "type": "object",
-   "properties": {
-    "unit": {
-     "type": "string",
-     "description": "The unit of the weight."
-    },
-    "value": {
-     "type": "string",
-     "description": "The weight represented as a number."
-    }
-   }
   }
  },
  "resources": {
@@ -2484,45 +2039,6 @@
     }
    }
   },
-  "accountshipping": {
-   "methods": {
-    "patch": {
-     "id": "content.accountshipping.patch",
-     "path": "{merchantId}/accountshipping/{accountId}",
-     "httpMethod": "PATCH",
-     "description": "Updates the shipping settings of the account. This method supports patch semantics.",
-     "parameters": {
-      "accountId": {
-       "type": "string",
-       "description": "The ID of the account for which to get/update account shipping settings.",
-       "required": true,
-       "format": "uint64",
-       "location": "path"
-      },
-      "merchantId": {
-       "type": "string",
-       "description": "The ID of the managing account.",
-       "required": true,
-       "format": "uint64",
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "merchantId",
-      "accountId"
-     ],
-     "request": {
-      "$ref": "AccountShipping"
-     },
-     "response": {
-      "$ref": "AccountShipping"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/content"
-     ]
-    }
-   }
-  },
   "accountstatuses": {
    "methods": {
     "custombatch": {
@@ -2608,61 +2124,8 @@
     }
    }
   },
-  "accounttax": {
-   "methods": {
-    "patch": {
-     "id": "content.accounttax.patch",
-     "path": "{merchantId}/accounttax/{accountId}",
-     "httpMethod": "PATCH",
-     "description": "Updates the tax settings of the account. This method supports patch semantics.",
-     "parameters": {
-      "accountId": {
-       "type": "string",
-       "description": "The ID of the account for which to get/update account tax settings.",
-       "required": true,
-       "format": "uint64",
-       "location": "path"
-      },
-      "merchantId": {
-       "type": "string",
-       "description": "The ID of the managing account.",
-       "required": true,
-       "format": "uint64",
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "merchantId",
-      "accountId"
-     ],
-     "request": {
-      "$ref": "AccountTax"
-     },
-     "response": {
-      "$ref": "AccountTax"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/content"
-     ]
-    }
-   }
-  },
   "datafeeds": {
    "methods": {
-    "batch": {
-     "id": "content.datafeeds.batch",
-     "path": "datafeedsNativeBatch",
-     "httpMethod": "POST",
-     "request": {
-      "$ref": "DatafeedsBatchRequest"
-     },
-     "response": {
-      "$ref": "DatafeedsBatchResponse"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/content"
-     ]
-    },
     "custombatch": {
      "id": "content.datafeeds.custombatch",
      "path": "datafeeds/batch",
@@ -2853,20 +2316,6 @@
   },
   "datafeedstatuses": {
    "methods": {
-    "batch": {
-     "id": "content.datafeedstatuses.batch",
-     "path": "datafeedstatusesNativeBatch",
-     "httpMethod": "POST",
-     "request": {
-      "$ref": "DatafeedstatusesBatchRequest"
-     },
-     "response": {
-      "$ref": "DatafeedstatusesBatchResponse"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/content"
-     ]
-    },
     "custombatch": {
      "id": "content.datafeedstatuses.custombatch",
      "path": "datafeedstatuses/batch",
diff --git a/content/v2/content-gen.go b/content/v2/content-gen.go
index ae57049..e690346 100644
--- a/content/v2/content-gen.go
+++ b/content/v2/content-gen.go
@@ -51,9 +51,7 @@
 	}
 	s := &Service{client: client, BasePath: basePath}
 	s.Accounts = NewAccountsService(s)
-	s.Accountshipping = NewAccountshippingService(s)
 	s.Accountstatuses = NewAccountstatusesService(s)
-	s.Accounttax = NewAccounttaxService(s)
 	s.Datafeeds = NewDatafeedsService(s)
 	s.Datafeedstatuses = NewDatafeedstatusesService(s)
 	s.Inventory = NewInventoryService(s)
@@ -68,12 +66,8 @@
 
 	Accounts *AccountsService
 
-	Accountshipping *AccountshippingService
-
 	Accountstatuses *AccountstatusesService
 
-	Accounttax *AccounttaxService
-
 	Datafeeds *DatafeedsService
 
 	Datafeedstatuses *DatafeedstatusesService
@@ -94,15 +88,6 @@
 	s *Service
 }
 
-func NewAccountshippingService(s *Service) *AccountshippingService {
-	rs := &AccountshippingService{s: s}
-	return rs
-}
-
-type AccountshippingService struct {
-	s *Service
-}
-
 func NewAccountstatusesService(s *Service) *AccountstatusesService {
 	rs := &AccountstatusesService{s: s}
 	return rs
@@ -112,15 +97,6 @@
 	s *Service
 }
 
-func NewAccounttaxService(s *Service) *AccounttaxService {
-	rs := &AccounttaxService{s: s}
-	return rs
-}
-
-type AccounttaxService struct {
-	s *Service
-}
-
 func NewDatafeedsService(s *Service) *DatafeedsService {
 	rs := &DatafeedsService{s: s}
 	return rs
@@ -208,167 +184,6 @@
 	Status string `json:"status,omitempty"`
 }
 
-type AccountShipping struct {
-	// AccountId: The ID of the account to which these account shipping
-	// settings belong.
-	AccountId uint64 `json:"accountId,omitempty,string"`
-
-	// CarrierRates: Carrier-based shipping calculations.
-	CarrierRates []*AccountShippingCarrierRate `json:"carrierRates,omitempty"`
-
-	// Kind: Identifies what kind of resource this is. Value: the fixed
-	// string "content#accountShipping".
-	Kind string `json:"kind,omitempty"`
-
-	// LocationGroups: Location groups for shipping.
-	LocationGroups []*AccountShippingLocationGroup `json:"locationGroups,omitempty"`
-
-	// RateTables: Rate tables definitions.
-	RateTables []*AccountShippingRateTable `json:"rateTables,omitempty"`
-
-	// Services: Shipping services describing shipping fees calculation.
-	Services []*AccountShippingShippingService `json:"services,omitempty"`
-}
-
-type AccountShippingCarrierRate struct {
-	// Carrier: The carrier that is responsible for the shipping, such as
-	// "UPS", "FedEx", or "USPS".
-	Carrier string `json:"carrier,omitempty"`
-
-	// CarrierService: The carrier service, such as "Ground" or "2Day".
-	CarrierService string `json:"carrierService,omitempty"`
-
-	// ModifierFlatRate: Additive shipping rate modifier.
-	ModifierFlatRate *Price `json:"modifierFlatRate,omitempty"`
-
-	// ModifierPercent: Multiplicative shipping rate modifier in percent.
-	// Represented as a floating point number without the percentage
-	// character.
-	ModifierPercent string `json:"modifierPercent,omitempty"`
-
-	// Name: The name of the carrier rate.
-	Name string `json:"name,omitempty"`
-
-	// SaleCountry: Sale country for which this carrier rate is valid,
-	// represented as an ISO_3166-1 Alpha-2 code.
-	SaleCountry string `json:"saleCountry,omitempty"`
-
-	// ShippingOrigin: Shipping origin represented as a postal code.
-	ShippingOrigin string `json:"shippingOrigin,omitempty"`
-}
-
-type AccountShippingCondition struct {
-	// DeliveryLocationGroup: Delivery location in terms of a location group
-	// name. A location group with this name must be specified among
-	// location groups.
-	DeliveryLocationGroup string `json:"deliveryLocationGroup,omitempty"`
-
-	// DeliveryLocationId: Delivery location in terms of a location ID. Can
-	// be used to represent administrative areas, smaller country
-	// subdivisions, or cities.
-	DeliveryLocationId int64 `json:"deliveryLocationId,omitempty,string"`
-
-	// DeliveryPostalCode: Delivery location in terms of a postal code
-	// range.
-	DeliveryPostalCode string `json:"deliveryPostalCode,omitempty"`
-
-	// PriceMax: Maximum shipping price. Forms an interval between the
-	// maximum of smaller prices (exclusive) and this price (inclusive).
-	PriceMax *Price `json:"priceMax,omitempty"`
-
-	// ShippingLabel: Shipping label of the product. The products with the
-	// label are matched.
-	ShippingLabel string `json:"shippingLabel,omitempty"`
-
-	// WeightMax: Maximum shipping weight. Forms an interval between the
-	// maximum of smaller weight (exclusive) and this weight (inclusive).
-	WeightMax *Weight `json:"weightMax,omitempty"`
-}
-
-type AccountShippingLocationGroup struct {
-	// Country: The country in which this location group is, represented as
-	// ISO_3166-1 Alpha-2 code.
-	Country string `json:"country,omitempty"`
-
-	// LocationIds: A location ID (also called criteria ID) representing
-	// administrative
-	LocationIds googleapi.Int64s `json:"locationIds,omitempty"`
-
-	// Name: The name of the location group.
-	Name string `json:"name,omitempty"`
-
-	// PostalCodes: A postal code range, that can be either:
-	// - A single
-	// postal code (e.g. 12345)
-	// - A postal code prefix followed by a star
-	// (e.g. 1234*)
-	// - A range of postal codes, separated by a dash (e.g.
-	// 12340-12359)
-	// - A range of postal codes prefixes (e.g. 1234*-1235*).
-	// Prefixes must be of the same length (e.g. 12*-2* is invalid).
-	PostalCodes []string `json:"postalCodes,omitempty"`
-}
-
-type AccountShippingRateTable struct {
-	// Contents: One-dimensional table cells define one condition along the
-	// same dimension.! Bi-dimensional table cells use two dimension with
-	// respectively M and N distinct values and must contain exactly M * N
-	// cells with distinct conditions (for each possible value pairs).
-	Contents []*AccountShippingRateTableCell `json:"contents,omitempty"`
-
-	// Name: The name of the rate table.
-	Name string `json:"name,omitempty"`
-
-	// SaleCountry: Sale country for which this table is valid, represented
-	// as an ISO_3166-1 Alpha-2 code.
-	SaleCountry string `json:"saleCountry,omitempty"`
-}
-
-type AccountShippingRateTableCell struct {
-	// Condition: Conditions for which the cell is valid. All cells in a
-	// table must use the same dimension or pair of dimensions among price,
-	// weight, shipping_label or delivery location. If the cell condition is
-	// not specified, it will act as a catch-all and match all the elements
-	// that are not matched by other cells in this dimension.
-	Condition *AccountShippingCondition `json:"condition,omitempty"`
-
-	// Rate: The rate applicable if the cell conditions are matched.
-	Rate *Price `json:"rate,omitempty"`
-}
-
-type AccountShippingShippingService struct {
-	// Active: Whether the shipping service is available. Defaults to true
-	// if not specified.
-	Active bool `json:"active,omitempty"`
-
-	// CalculationMethod: Calculation method for the "simple" case that
-	// needs no rules.
-	CalculationMethod *AccountShippingShippingServiceCalculationMethod `json:"calculationMethod,omitempty"`
-
-	// Name: The name of this shipping service.
-	Name string `json:"name,omitempty"`
-
-	// SaleCountry: Sale country for which this service can be used,
-	// represented as an ISO_3166-1 Alpha-2 code.
-	SaleCountry string `json:"saleCountry,omitempty"`
-}
-
-type AccountShippingShippingServiceCalculationMethod struct {
-	// CarrierRate: Name of the carrier rate to use for the calculation.
-	CarrierRate string `json:"carrierRate,omitempty"`
-
-	// FlatRate: Fixed price shipping, represented as a floating point
-	// number associated with a currency.
-	FlatRate *Price `json:"flatRate,omitempty"`
-
-	// PercentageRate: Percentage of the price, represented as a floating
-	// point number without the percentage character.
-	PercentageRate string `json:"percentageRate,omitempty"`
-
-	// RateTable: Name of the rate table to use for the calculation.
-	RateTable string `json:"rateTable,omitempty"`
-}
-
 type AccountStatus struct {
 	// AccountId: The ID of the account for which the status is reported.
 	AccountId string `json:"accountId,omitempty"`
@@ -425,39 +240,6 @@
 	ValueOnLandingPage string `json:"valueOnLandingPage,omitempty"`
 }
 
-type AccountTax struct {
-	// AccountId: The ID of the account to which these account tax settings
-	// belong.
-	AccountId uint64 `json:"accountId,omitempty,string"`
-
-	// Kind: Identifies what kind of resource this is. Value: the fixed
-	// string "content#accountTax".
-	Kind string `json:"kind,omitempty"`
-
-	// Rules: Tax rules.
-	Rules []*AccountTaxTaxRule `json:"rules,omitempty"`
-}
-
-type AccountTaxTaxRule struct {
-	// Country: Country code in which tax is applicable.
-	Country string `json:"country,omitempty"`
-
-	// LocationId: State (or province) is which the tax is applicable,
-	// described by its location id (also called criteria id).
-	LocationId uint64 `json:"locationId,omitempty,string"`
-
-	// RatePercent: Explicit tax rate in percent, represented as a floating
-	// point number without the percentage character. Must not be negative.
-	RatePercent string `json:"ratePercent,omitempty"`
-
-	// ShippingTaxed: If true, shipping charges are also taxed.
-	ShippingTaxed bool `json:"shippingTaxed,omitempty"`
-
-	// UseGlobalRate: Whether the tax rate is taken from a global tax table
-	// or specified explicitly.
-	UseGlobalRate bool `json:"useGlobalRate,omitempty"`
-}
-
 type AccountUser struct {
 	// Admin: Whether user is an admin.
 	Admin bool `json:"admin,omitempty"`
@@ -706,38 +488,6 @@
 	Value string `json:"value,omitempty"`
 }
 
-type DatafeedsBatchRequest struct {
-	Entrys []*DatafeedsBatchRequestEntry `json:"entrys,omitempty"`
-}
-
-type DatafeedsBatchRequestEntry struct {
-	BatchId int64 `json:"batchId,omitempty"`
-
-	Datafeedsinsertrequest *DatafeedsInsertRequest `json:"datafeedsinsertrequest,omitempty"`
-
-	Datafeedsupdaterequest *DatafeedsUpdateRequest `json:"datafeedsupdaterequest,omitempty"`
-
-	MethodName string `json:"methodName,omitempty"`
-}
-
-type DatafeedsBatchResponse struct {
-	Entrys []*DatafeedsBatchResponseEntry `json:"entrys,omitempty"`
-
-	// Kind: Identifies what kind of resource this is. Value: the fixed
-	// string "content#datafeedsBatchResponse".
-	Kind string `json:"kind,omitempty"`
-}
-
-type DatafeedsBatchResponseEntry struct {
-	BatchId int64 `json:"batchId,omitempty"`
-
-	Datafeedsgetresponse *DatafeedsGetResponse `json:"datafeedsgetresponse,omitempty"`
-
-	Datafeedsinsertresponse *DatafeedsInsertResponse `json:"datafeedsinsertresponse,omitempty"`
-
-	Datafeedsupdateresponse *DatafeedsUpdateResponse `json:"datafeedsupdateresponse,omitempty"`
-}
-
 type DatafeedsCustomBatchRequest struct {
 	Entries []*DatafeedsCustomBatchRequestEntry `json:"entries,omitempty"`
 }
@@ -779,26 +529,6 @@
 	Errors *Errors `json:"errors,omitempty"`
 }
 
-type DatafeedsGetResponse struct {
-	// Kind: Identifies what kind of resource this is. Value: the fixed
-	// string "content#datafeedsGetResponse".
-	Kind string `json:"kind,omitempty"`
-
-	Resource *Datafeed `json:"resource,omitempty"`
-}
-
-type DatafeedsInsertRequest struct {
-	Resource *Datafeed `json:"resource,omitempty"`
-}
-
-type DatafeedsInsertResponse struct {
-	// Kind: Identifies what kind of resource this is. Value: the fixed
-	// string "content#datafeedsInsertResponse".
-	Kind string `json:"kind,omitempty"`
-
-	Resource *Datafeed `json:"resource,omitempty"`
-}
-
 type DatafeedsListResponse struct {
 	// Kind: Identifies what kind of resource this is. Value: the fixed
 	// string "content#datafeedsListResponse".
@@ -807,42 +537,6 @@
 	Resources []*Datafeed `json:"resources,omitempty"`
 }
 
-type DatafeedsUpdateRequest struct {
-	Resource *Datafeed `json:"resource,omitempty"`
-}
-
-type DatafeedsUpdateResponse struct {
-	// Kind: Identifies what kind of resource this is. Value: the fixed
-	// string "content#datafeedsUpdateResponse".
-	Kind string `json:"kind,omitempty"`
-
-	Resource *Datafeed `json:"resource,omitempty"`
-}
-
-type DatafeedstatusesBatchRequest struct {
-	Entrys []*DatafeedstatusesBatchRequestEntry `json:"entrys,omitempty"`
-}
-
-type DatafeedstatusesBatchRequestEntry struct {
-	BatchId int64 `json:"batchId,omitempty"`
-
-	MethodName string `json:"methodName,omitempty"`
-}
-
-type DatafeedstatusesBatchResponse struct {
-	Entrys []*DatafeedstatusesBatchResponseEntry `json:"entrys,omitempty"`
-
-	// Kind: Identifies what kind of resource this is. Value: the fixed
-	// string "content#datafeedstatusesBatchResponse".
-	Kind string `json:"kind,omitempty"`
-}
-
-type DatafeedstatusesBatchResponseEntry struct {
-	BatchId int64 `json:"batchId,omitempty"`
-
-	Datafeedstatusesgetresponse *DatafeedstatusesGetResponse `json:"datafeedstatusesgetresponse,omitempty"`
-}
-
 type DatafeedstatusesCustomBatchRequest struct {
 	Entries []*DatafeedstatusesCustomBatchRequestEntry `json:"entries,omitempty"`
 }
@@ -881,14 +575,6 @@
 	Errors *Errors `json:"errors,omitempty"`
 }
 
-type DatafeedstatusesGetResponse struct {
-	// Kind: Identifies what kind of resource this is. Value: the fixed
-	// string "content#datafeedstatusesGetResponse".
-	Kind string `json:"kind,omitempty"`
-
-	Resource *DatafeedStatus `json:"resource,omitempty"`
-}
-
 type DatafeedstatusesListResponse struct {
 	// Kind: Identifies what kind of resource this is. Value: the fixed
 	// string "content#datafeedstatusesListResponse".
@@ -1486,14 +1172,6 @@
 	Resources []*ProductStatus `json:"resources,omitempty"`
 }
 
-type Weight struct {
-	// Unit: The unit of the weight.
-	Unit string `json:"unit,omitempty"`
-
-	// Value: The weight represented as a number.
-	Value string `json:"value,omitempty"`
-}
-
 // method id "content.accounts.custombatch":
 
 type AccountsCustombatchCall struct {
@@ -2054,95 +1732,6 @@
 
 }
 
-// method id "content.accountshipping.patch":
-
-type AccountshippingPatchCall struct {
-	s               *Service
-	merchantId      uint64
-	accountId       uint64
-	accountshipping *AccountShipping
-	opt_            map[string]interface{}
-}
-
-// Patch: Updates the shipping settings of the account. This method
-// supports patch semantics.
-func (r *AccountshippingService) Patch(merchantId uint64, accountId uint64, accountshipping *AccountShipping) *AccountshippingPatchCall {
-	c := &AccountshippingPatchCall{s: r.s, opt_: make(map[string]interface{})}
-	c.merchantId = merchantId
-	c.accountId = accountId
-	c.accountshipping = accountshipping
-	return c
-}
-
-func (c *AccountshippingPatchCall) Do() (*AccountShipping, error) {
-	var body io.Reader = nil
-	body, err := googleapi.WithoutDataWrapper.JSONReader(c.accountshipping)
-	if err != nil {
-		return nil, err
-	}
-	ctype := "application/json"
-	params := make(url.Values)
-	params.Set("alt", "json")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{merchantId}/accountshipping/{accountId}")
-	urls += "?" + params.Encode()
-	req, _ := http.NewRequest("PATCH", urls, body)
-	googleapi.Expand(req.URL, map[string]string{
-		"merchantId": strconv.FormatUint(c.merchantId, 10),
-		"accountId":  strconv.FormatUint(c.accountId, 10),
-	})
-	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 googleapi.CloseBody(res)
-	if err := googleapi.CheckResponse(res); err != nil {
-		return nil, err
-	}
-	var ret *AccountShipping
-	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Updates the shipping settings of the account. This method supports patch semantics.",
-	//   "httpMethod": "PATCH",
-	//   "id": "content.accountshipping.patch",
-	//   "parameterOrder": [
-	//     "merchantId",
-	//     "accountId"
-	//   ],
-	//   "parameters": {
-	//     "accountId": {
-	//       "description": "The ID of the account for which to get/update account shipping settings.",
-	//       "format": "uint64",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "merchantId": {
-	//       "description": "The ID of the managing account.",
-	//       "format": "uint64",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "{merchantId}/accountshipping/{accountId}",
-	//   "request": {
-	//     "$ref": "AccountShipping"
-	//   },
-	//   "response": {
-	//     "$ref": "AccountShipping"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/content"
-	//   ]
-	// }
-
-}
-
 // method id "content.accountstatuses.custombatch":
 
 type AccountstatusesCustombatchCall struct {
@@ -2379,155 +1968,6 @@
 
 }
 
-// method id "content.accounttax.patch":
-
-type AccounttaxPatchCall struct {
-	s          *Service
-	merchantId uint64
-	accountId  uint64
-	accounttax *AccountTax
-	opt_       map[string]interface{}
-}
-
-// Patch: Updates the tax settings of the account. This method supports
-// patch semantics.
-func (r *AccounttaxService) Patch(merchantId uint64, accountId uint64, accounttax *AccountTax) *AccounttaxPatchCall {
-	c := &AccounttaxPatchCall{s: r.s, opt_: make(map[string]interface{})}
-	c.merchantId = merchantId
-	c.accountId = accountId
-	c.accounttax = accounttax
-	return c
-}
-
-func (c *AccounttaxPatchCall) Do() (*AccountTax, error) {
-	var body io.Reader = nil
-	body, err := googleapi.WithoutDataWrapper.JSONReader(c.accounttax)
-	if err != nil {
-		return nil, err
-	}
-	ctype := "application/json"
-	params := make(url.Values)
-	params.Set("alt", "json")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{merchantId}/accounttax/{accountId}")
-	urls += "?" + params.Encode()
-	req, _ := http.NewRequest("PATCH", urls, body)
-	googleapi.Expand(req.URL, map[string]string{
-		"merchantId": strconv.FormatUint(c.merchantId, 10),
-		"accountId":  strconv.FormatUint(c.accountId, 10),
-	})
-	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 googleapi.CloseBody(res)
-	if err := googleapi.CheckResponse(res); err != nil {
-		return nil, err
-	}
-	var ret *AccountTax
-	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Updates the tax settings of the account. This method supports patch semantics.",
-	//   "httpMethod": "PATCH",
-	//   "id": "content.accounttax.patch",
-	//   "parameterOrder": [
-	//     "merchantId",
-	//     "accountId"
-	//   ],
-	//   "parameters": {
-	//     "accountId": {
-	//       "description": "The ID of the account for which to get/update account tax settings.",
-	//       "format": "uint64",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "merchantId": {
-	//       "description": "The ID of the managing account.",
-	//       "format": "uint64",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "{merchantId}/accounttax/{accountId}",
-	//   "request": {
-	//     "$ref": "AccountTax"
-	//   },
-	//   "response": {
-	//     "$ref": "AccountTax"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/content"
-	//   ]
-	// }
-
-}
-
-// method id "content.datafeeds.batch":
-
-type DatafeedsBatchCall struct {
-	s                     *Service
-	datafeedsbatchrequest *DatafeedsBatchRequest
-	opt_                  map[string]interface{}
-}
-
-// Batch:
-func (r *DatafeedsService) Batch(datafeedsbatchrequest *DatafeedsBatchRequest) *DatafeedsBatchCall {
-	c := &DatafeedsBatchCall{s: r.s, opt_: make(map[string]interface{})}
-	c.datafeedsbatchrequest = datafeedsbatchrequest
-	return c
-}
-
-func (c *DatafeedsBatchCall) Do() (*DatafeedsBatchResponse, error) {
-	var body io.Reader = nil
-	body, err := googleapi.WithoutDataWrapper.JSONReader(c.datafeedsbatchrequest)
-	if err != nil {
-		return nil, err
-	}
-	ctype := "application/json"
-	params := make(url.Values)
-	params.Set("alt", "json")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "datafeedsNativeBatch")
-	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 googleapi.CloseBody(res)
-	if err := googleapi.CheckResponse(res); err != nil {
-		return nil, err
-	}
-	var ret *DatafeedsBatchResponse
-	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "httpMethod": "POST",
-	//   "id": "content.datafeeds.batch",
-	//   "path": "datafeedsNativeBatch",
-	//   "request": {
-	//     "$ref": "DatafeedsBatchRequest"
-	//   },
-	//   "response": {
-	//     "$ref": "DatafeedsBatchResponse"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/content"
-	//   ]
-	// }
-
-}
-
 // method id "content.datafeeds.custombatch":
 
 type DatafeedsCustombatchCall struct {
@@ -3045,66 +2485,6 @@
 
 }
 
-// method id "content.datafeedstatuses.batch":
-
-type DatafeedstatusesBatchCall struct {
-	s                            *Service
-	datafeedstatusesbatchrequest *DatafeedstatusesBatchRequest
-	opt_                         map[string]interface{}
-}
-
-// Batch:
-func (r *DatafeedstatusesService) Batch(datafeedstatusesbatchrequest *DatafeedstatusesBatchRequest) *DatafeedstatusesBatchCall {
-	c := &DatafeedstatusesBatchCall{s: r.s, opt_: make(map[string]interface{})}
-	c.datafeedstatusesbatchrequest = datafeedstatusesbatchrequest
-	return c
-}
-
-func (c *DatafeedstatusesBatchCall) Do() (*DatafeedstatusesBatchResponse, error) {
-	var body io.Reader = nil
-	body, err := googleapi.WithoutDataWrapper.JSONReader(c.datafeedstatusesbatchrequest)
-	if err != nil {
-		return nil, err
-	}
-	ctype := "application/json"
-	params := make(url.Values)
-	params.Set("alt", "json")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "datafeedstatusesNativeBatch")
-	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 googleapi.CloseBody(res)
-	if err := googleapi.CheckResponse(res); err != nil {
-		return nil, err
-	}
-	var ret *DatafeedstatusesBatchResponse
-	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "httpMethod": "POST",
-	//   "id": "content.datafeedstatuses.batch",
-	//   "path": "datafeedstatusesNativeBatch",
-	//   "request": {
-	//     "$ref": "DatafeedstatusesBatchRequest"
-	//   },
-	//   "response": {
-	//     "$ref": "DatafeedstatusesBatchResponse"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/content"
-	//   ]
-	// }
-
-}
-
 // method id "content.datafeedstatuses.custombatch":
 
 type DatafeedstatusesCustombatchCall struct {
diff --git a/coordinate/v1/coordinate-api.json b/coordinate/v1/coordinate-api.json
index 2e62a93..1fe565a 100644
--- a/coordinate/v1/coordinate-api.json
+++ b/coordinate/v1/coordinate-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/PS-rvsWcMt99OOrOfl1upLydS0Y\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/ckefd3M0PpbhIY5DVZQuUY4ElY0\"",
  "discoveryVersion": "v1",
  "id": "coordinate:v1",
  "name": "coordinate",
  "version": "v1",
+ "revision": "20131114",
  "title": "Google Maps Coordinate API",
  "description": "Lets you view and manage jobs in a Coordinate team.",
  "ownerDomain": "google.com",
diff --git a/customsearch/v1/customsearch-api.json b/customsearch/v1/customsearch-api.json
index 17c3f4f..ce5e279 100644
--- a/customsearch/v1/customsearch-api.json
+++ b/customsearch/v1/customsearch-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/5fAOCCT-EMDzKZ0hPKCYdJUAc9k\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/KsgpNVP8dzFmgPzAjDdH7uBJP_M\"",
  "discoveryVersion": "v1",
  "id": "customsearch:v1",
  "name": "customsearch",
  "version": "v1",
+ "revision": "20131205",
  "title": "CustomSearch API",
  "description": "Lets you search over a website or collection of websites",
  "ownerDomain": "google.com",
diff --git a/dfareporting/v1.1/dfareporting-api.json b/dfareporting/v1.1/dfareporting-api.json
index 26c52c1..08072fe 100644
--- a/dfareporting/v1.1/dfareporting-api.json
+++ b/dfareporting/v1.1/dfareporting-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/YdK1I3o4ZOUVUrD_2k7BkdHqzyQ\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/RGJYQuXi3YgpRZREcgoQjlfnboc\"",
  "discoveryVersion": "v1",
  "id": "dfareporting:v1.1",
  "name": "dfareporting",
  "version": "v1.1",
+ "revision": "20140707",
  "title": "DFA Reporting API",
  "description": "Lets you create, run and download reports.",
  "ownerDomain": "google.com",
diff --git a/dfareporting/v1.2/dfareporting-api.json b/dfareporting/v1.2/dfareporting-api.json
index 73b159a..cfc96b3 100644
--- a/dfareporting/v1.2/dfareporting-api.json
+++ b/dfareporting/v1.2/dfareporting-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/qvRmv3vpF4CuJWK6RzcX1h-stNI\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/1amb49JwT_FqETzV3JQHeAhJ7L0\"",
  "discoveryVersion": "v1",
  "id": "dfareporting:v1.2",
  "name": "dfareporting",
  "version": "v1.2",
+ "revision": "20140707",
  "title": "DFA Reporting API",
  "description": "Lets you create, run and download reports.",
  "ownerDomain": "google.com",
diff --git a/dfareporting/v1.3/dfareporting-api.json b/dfareporting/v1.3/dfareporting-api.json
index 2a192bf..d6ee5f8 100644
--- a/dfareporting/v1.3/dfareporting-api.json
+++ b/dfareporting/v1.3/dfareporting-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/bg8eKhQkwGnobYThDWedv2Ar2Io\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/Y51i-frukmpN-PZvbYEe_-r_A2o\"",
  "discoveryVersion": "v1",
  "id": "dfareporting:v1.3",
  "name": "dfareporting",
  "version": "v1.3",
+ "revision": "20140707",
  "title": "DFA Reporting API",
  "description": "Lets you create, run and download reports.",
  "ownerDomain": "google.com",
diff --git a/dfareporting/v1/dfareporting-api.json b/dfareporting/v1/dfareporting-api.json
index 5ffae72..53eb70f 100644
--- a/dfareporting/v1/dfareporting-api.json
+++ b/dfareporting/v1/dfareporting-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/Km2zbuxZrnAbsnnH2v5x6aMXpTA\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/v3B487vqAtVVaEae0GJRng5bHjc\"",
  "discoveryVersion": "v1",
  "id": "dfareporting:v1",
  "name": "dfareporting",
  "version": "v1",
+ "revision": "20140707",
  "title": "DFA Reporting API",
  "description": "Lets you create, run and download reports.",
  "ownerDomain": "google.com",
diff --git a/dns/v1beta1/dns-api.json b/dns/v1beta1/dns-api.json
index 83b3065..2c890cb 100644
--- a/dns/v1beta1/dns-api.json
+++ b/dns/v1beta1/dns-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/vvbATqxd_pTRqr3zlWrA5ydszy4\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/vCiVqbmmplZsFYYO1peGBVgoOI0\"",
  "discoveryVersion": "v1",
  "id": "dns:v1beta1",
  "name": "dns",
  "version": "v1beta1",
+ "revision": "20140612",
  "title": "Google Cloud DNS API",
  "description": "The Google Cloud DNS API provides services for configuring and serving authoritative DNS records.",
  "ownerDomain": "google.com",
diff --git a/doubleclickbidmanager/v1/doubleclickbidmanager-api.json b/doubleclickbidmanager/v1/doubleclickbidmanager-api.json
index dafb2fd..1b61095 100644
--- a/doubleclickbidmanager/v1/doubleclickbidmanager-api.json
+++ b/doubleclickbidmanager/v1/doubleclickbidmanager-api.json
@@ -1,11 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/cHDQkg0ZsK0EYoFanzGijdDo1Q4\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/Xt8yN3tZcmaa98PBixxfMwJ2TF0\"",
  "discoveryVersion": "v1",
  "id": "doubleclickbidmanager:v1",
  "name": "doubleclickbidmanager",
  "canonicalName": "DoubleClick Bid Manager",
  "version": "v1",
+ "revision": "20140213",
  "title": "DoubleClick Bid Manager API",
  "description": "API for viewing and managing your reports in DoubleClick Bid Manager.",
  "ownerDomain": "google.com",
diff --git a/doubleclicksearch/v2/doubleclicksearch-api.json b/doubleclicksearch/v2/doubleclicksearch-api.json
index aedccd7..b493977 100644
--- a/doubleclicksearch/v2/doubleclicksearch-api.json
+++ b/doubleclicksearch/v2/doubleclicksearch-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"C11OM5Qtr9122-scy_WeqND9D3o/zp5V0BNas4hRtoNpHYkQAWU2qnU\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/i9D0oXkqke1jTjj369HzfWEz2ig\"",
  "discoveryVersion": "v1",
  "id": "doubleclicksearch:v2",
  "name": "doubleclicksearch",
  "version": "v2",
+ "revision": "20140723",
  "title": "DoubleClick Search API",
  "description": "Report and modify your advertising data in DoubleClick Search (for example, campaigns, ad groups, keywords, and conversions).",
  "ownerDomain": "google.com",
diff --git a/drive/v1/drive-api.json b/drive/v1/drive-api.json
index 0911071..9a9de69 100644
--- a/drive/v1/drive-api.json
+++ b/drive/v1/drive-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"C11OM5Qtr9122-scy_WeqND9D3o/6W-lw1NgBdBwbbd63Z_uzUR9eJU\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/E9F7kr_CIUBLaX_abjaTqq2kNvw\"",
  "discoveryVersion": "v1",
  "id": "drive:v1",
  "name": "drive",
  "version": "v1",
+ "revision": "20140811",
  "title": "Drive API",
  "description": "The API to interact with Drive.",
  "ownerDomain": "google.com",
diff --git a/drive/v2/drive-api.json b/drive/v2/drive-api.json
index db1b5da..a76038d 100644
--- a/drive/v2/drive-api.json
+++ b/drive/v2/drive-api.json
@@ -1,11 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/Jr_9O66ndvAx3IBfHAhD2JQcRu8\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/zUJIqvQrUB5voAp2b0g24Yt-OQM\"",
  "discoveryVersion": "v1",
  "id": "drive:v2",
  "name": "drive",
  "version": "v2",
- "revision": "20140714",
+ "revision": "20140811",
  "title": "Drive API",
  "description": "The API to interact with Drive.",
  "ownerDomain": "google.com",
@@ -879,7 +879,7 @@
     },
     "appDataContents": {
      "type": "boolean",
-     "description": "Whether this file is in the appdata folder."
+     "description": "Whether this file is in the Application Data folder."
     },
     "copyable": {
      "type": "boolean",
diff --git a/drive/v2/drive-gen.go b/drive/v2/drive-gen.go
index 4e4e2cd..f04b608 100644
--- a/drive/v2/drive-gen.go
+++ b/drive/v2/drive-gen.go
@@ -761,7 +761,7 @@
 	// editor or viewer.
 	AlternateLink string `json:"alternateLink,omitempty"`
 
-	// AppDataContents: Whether this file is in the appdata folder.
+	// AppDataContents: Whether this file is in the Application Data folder.
 	AppDataContents bool `json:"appDataContents,omitempty"`
 
 	// Copyable: Whether the file can be copied by the current user.
diff --git a/freebase/v1-sandbox/freebase-api.json b/freebase/v1-sandbox/freebase-api.json
index 73d9304..39ffe65 100644
--- a/freebase/v1-sandbox/freebase-api.json
+++ b/freebase/v1-sandbox/freebase-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/U99ZyknsLQRi0oWob1lL-8fNevE\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/F1sPqyk_5RBrKZtymnqV7KySm1w\"",
  "discoveryVersion": "v1",
  "id": "freebase:v1-sandbox",
  "name": "freebase",
  "version": "v1-sandbox",
+ "revision": "20140418",
  "title": "Freebase Search",
  "description": "Find Freebase entities using textual queries and other constraints.",
  "ownerDomain": "google.com",
diff --git a/freebase/v1/freebase-api.json b/freebase/v1/freebase-api.json
index f2e45ac..1f689e4 100644
--- a/freebase/v1/freebase-api.json
+++ b/freebase/v1/freebase-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/jrWF9ZghWXSXmX56XJpkx2_G8NU\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/kTDiVESNLycoqIbveRofH5KPD08\"",
  "discoveryVersion": "v1",
  "id": "freebase:v1",
  "name": "freebase",
  "version": "v1",
+ "revision": "20140418",
  "title": "Freebase Search",
  "description": "Find Freebase entities using textual queries and other constraints.",
  "ownerDomain": "google.com",
diff --git a/freebase/v1sandbox/freebase-api.json b/freebase/v1sandbox/freebase-api.json
index 7904653..0a66c05 100644
--- a/freebase/v1sandbox/freebase-api.json
+++ b/freebase/v1sandbox/freebase-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/8YSaj7jxmSfjsRrYtwnK2dHVPrQ\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/qUWSNoThSKwLl9_oWjQhhUwoINQ\"",
  "discoveryVersion": "v1",
  "id": "freebase:v1sandbox",
  "name": "freebase",
  "version": "v1sandbox",
+ "revision": "20140418",
  "title": "Freebase Search",
  "description": "Find Freebase entities using textual queries and other constraints.",
  "ownerDomain": "google.com",
diff --git a/games/v1/games-api.json b/games/v1/games-api.json
index 9412056..ce6db9f 100644
--- a/games/v1/games-api.json
+++ b/games/v1/games-api.json
@@ -1,12 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/_A2ksHJbGyH-D3gN5hD5Jnh5u8Q\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/3jTVaifUosFx3s-Kahm54jf_5Xc\"",
  "discoveryVersion": "v1",
  "id": "games:v1",
  "name": "games",
  "canonicalName": "Games",
  "version": "v1",
- "revision": "20140715",
+ "revision": "20140812",
  "title": "Google Play Game Services API",
  "description": "The API for Google Play Game Services.",
  "ownerDomain": "google.com",
@@ -2473,6 +2473,10 @@
      "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}"
+    },
+    "signature": {
+     "type": "string",
+     "description": "Signature Values will contain URI-safe characters as defined by section 2.3 of RFC 3986."
     }
    }
   },
diff --git a/games/v1/games-gen.go b/games/v1/games-gen.go
index 59271d6..ff0cf27 100644
--- a/games/v1/games-gen.go
+++ b/games/v1/games-gen.go
@@ -2107,6 +2107,10 @@
 	// contain no more than 64 URI-safe characters as defined by section 2.3
 	// of RFC 3986.
 	ScoreTag string `json:"scoreTag,omitempty"`
+
+	// Signature: Signature Values will contain URI-safe characters as
+	// defined by section 2.3 of RFC 3986.
+	Signature string `json:"signature,omitempty"`
 }
 
 type Snapshot struct {
diff --git a/gamesmanagement/v1management/gamesmanagement-api.json b/gamesmanagement/v1management/gamesmanagement-api.json
index 35b4bf9..064e6bf 100644
--- a/gamesmanagement/v1management/gamesmanagement-api.json
+++ b/gamesmanagement/v1management/gamesmanagement-api.json
@@ -1,12 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/hfDvVsF96fSD9DnS1-5f8mTALPw\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/BanI0cB-S-GlyPA5-tX5iPnbc7Y\"",
  "discoveryVersion": "v1",
  "id": "gamesManagement:v1management",
  "name": "gamesManagement",
  "canonicalName": "Games Management",
  "version": "v1management",
- "revision": "20140715",
+ "revision": "20140812",
  "title": "Google Play Game Services Management API",
  "description": "The Management API for Google Play Game Services.",
  "ownerDomain": "google.com",
diff --git a/gan/v1beta1/gan-api.json b/gan/v1beta1/gan-api.json
index 2772e6a..a66341c 100644
--- a/gan/v1beta1/gan-api.json
+++ b/gan/v1beta1/gan-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/0f7uRmJraUnv6U9LmngxWGiEMV0\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/sUp2RhXMaDQQQ4TJDISV0wjpOdU\"",
  "discoveryVersion": "v1",
  "id": "gan:v1beta1",
  "name": "gan",
  "version": "v1beta1",
+ "revision": "20130205",
  "title": "Google Affiliate Network API",
  "description": "Lets you have programmatic access to your Google Affiliate Network data.",
  "ownerDomain": "google.com",
diff --git a/genomics/v1beta/genomics-api.json b/genomics/v1beta/genomics-api.json
index bc1a37b..b5d1b5d 100644
--- a/genomics/v1beta/genomics-api.json
+++ b/genomics/v1beta/genomics-api.json
@@ -1,11 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/BweQJBumCL7AJ7M5gEGXXlPajUY\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/SUDnX6OXhxdKPeYmymDZoBwpT40\"",
  "discoveryVersion": "v1",
  "id": "genomics:v1beta",
  "name": "genomics",
  "version": "v1beta",
- "revision": "20140717",
+ "revision": "20140811",
  "title": "Genomics API",
  "description": "Provides access to Genomics data.",
  "ownerDomain": "google.com",
@@ -140,7 +140,7 @@
     },
     "phaseset": {
      "type": "string",
-     "description": "If this field is present, this variant call's genotype ordering implies the phase of the bases and is consistent with any other variant calls on the same contig which have the same phaseset value. When importing data from VCF, if the genotype data was phased but no phase set was specified this field will be set to \"DEFAULT_PHASESET\"."
+     "description": "If this field is present, this variant call's genotype ordering implies the phase of the bases and is consistent with any other variant calls on the same contig which have the same phaseset value. When importing data from VCF, if the genotype data was phased but no phase set was specified this field will be set to \"*\"."
     }
    }
   },
@@ -197,6 +197,23 @@
     }
    }
   },
+  "CoverageBucket": {
+   "id": "CoverageBucket",
+   "type": "object",
+   "description": "A bucket over which read coverage has been precomputed. A bucket corresponds to a specific range of the reference sequence.",
+   "externalTypeName": "cloud.genomics.readstore.CoverageBucket",
+   "properties": {
+    "meanCoverage": {
+     "type": "number",
+     "description": "The average number of reads which are aligned to each individual reference base in this bucket.",
+     "format": "float"
+    },
+    "range": {
+     "$ref": "GenomicRange",
+     "description": "The genomic coordinate range spanned by this bucket."
+    }
+   }
+  },
   "Dataset": {
    "id": "Dataset",
    "type": "object",
@@ -363,6 +380,28 @@
     }
    }
   },
+  "GenomicRange": {
+   "id": "GenomicRange",
+   "type": "object",
+   "description": "An inclusive, exclusive genomic coordinate range over a reference sequence.",
+   "externalTypeName": "cloud.genomics.readstore.GenomicRange",
+   "properties": {
+    "sequenceEnd": {
+     "type": "string",
+     "description": "The end position of the range on the reference, 1-based exclusive. If specified, sequenceName must also be specified.",
+     "format": "uint64"
+    },
+    "sequenceName": {
+     "type": "string",
+     "description": "The reference sequence name, for example \"chr1\", \"1\", or \"chrX\"."
+    },
+    "sequenceStart": {
+     "type": "string",
+     "description": "The start position of the range on the reference, 1-based inclusive. If specified, sequenceName must also be specified.",
+     "format": "uint64"
+    }
+   }
+  },
   "GetVariantsSummaryResponse": {
    "id": "GetVariantsSummaryResponse",
    "type": "object",
@@ -378,6 +417,7 @@
     },
     "metadata": {
      "type": "array",
+     "description": "The metadata associated with this dataset.",
      "items": {
       "$ref": "Metadata"
      }
@@ -414,7 +454,11 @@
     },
     "fileUri": {
      "type": "string",
-     "description": "The file URI that this data was imported from."
+     "description": "[Deprecated] This field is deprecated and will no longer be populated. Please use filename instead."
+    },
+    "filename": {
+     "type": "string",
+     "description": "The name of the file from which this data was imported."
     },
     "headers": {
      "type": "array",
@@ -550,6 +594,7 @@
      "type": "string",
      "description": "The status of this job.",
      "enum": [
+      "canceled",
       "failure",
       "new",
       "pending",
@@ -563,6 +608,7 @@
       "",
       "",
       "",
+      "",
       ""
      ]
     },
@@ -575,6 +621,29 @@
     }
    }
   },
+  "ListCoverageBucketsResponse": {
+   "id": "ListCoverageBucketsResponse",
+   "type": "object",
+   "externalTypeName": "cloud.genomics.readstore.ListCoverageBucketsResponse",
+   "properties": {
+    "bucketWidth": {
+     "type": "string",
+     "description": "The length of each coverage bucket in base pairs. Note that buckets at the end of a reference sequence may be shorter. This value is omitted if the bucket width is infinity (the default behaviour, with no range or target_bucket_width).",
+     "format": "uint64"
+    },
+    "coverageBuckets": {
+     "type": "array",
+     "description": "The coverage buckets. The list of buckets is sparse; a bucket with 0 overlapping reads is not returned. A bucket never crosses more than one reference sequence. Each bucket has width bucket_width, unless its end is is the end of the reference sequence.",
+     "items": {
+      "$ref": "CoverageBucket"
+     }
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "The continuation token, which is used to page through large result sets. Provide this value in a subsequent request to return the next page of results. This field will be empty if there aren't any additional results."
+    }
+   }
+  },
   "ListDatasetsResponse": {
    "id": "ListDatasetsResponse",
    "type": "object",
@@ -629,7 +698,23 @@
     },
     "type": {
      "type": "string",
-     "description": "The type of data. Possible types include: Integer, Float, Flag, Character, and String."
+     "description": "The type of data. Possible types include: Integer, Float, Flag, Character, and String.",
+     "enum": [
+      "character",
+      "flag",
+      "float",
+      "integer",
+      "string",
+      "unknownType"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      "",
+      "",
+      "",
+      ""
+     ]
     },
     "value": {
      "type": "string",
@@ -806,11 +891,6 @@
    "description": "A Readset is a collection of Reads.",
    "externalTypeName": "cloud.genomics.readstore.Readset",
    "properties": {
-    "created": {
-     "type": "string",
-     "description": "The date this readset was created, in milliseconds from the epoch.",
-     "format": "int64"
-    },
     "datasetId": {
      "type": "string",
      "description": "The ID of the dataset this readset belongs to."
@@ -829,11 +909,6 @@
     "name": {
      "type": "string",
      "description": "The readset name, typically this is the sample name."
-    },
-    "readCount": {
-     "type": "string",
-     "description": "The number of reads in this readset.",
-     "format": "uint64"
     }
    }
   },
@@ -952,6 +1027,7 @@
      "items": {
       "type": "string",
       "enum": [
+       "canceled",
        "failure",
        "new",
        "pending",
@@ -965,6 +1041,7 @@
        "",
        "",
        "",
+       "",
        ""
       ]
      }
@@ -1199,6 +1276,11 @@
      "type": "string",
      "description": "The ID of the dataset this variant belongs to."
     },
+    "end": {
+     "type": "string",
+     "description": "The end position (1-based) of this variant. This corresponds to the first base after the last base in the reference allele. So, the length of the reference allele is (end - position). This is useful for variants that don't explicitly give alternate bases, for example large deletions.",
+     "format": "int64"
+    },
     "id": {
      "type": "string",
      "description": "The Google generated ID of the variant, immutable."
@@ -1525,6 +1607,29 @@
       "https://www.googleapis.com/auth/genomics"
      ]
     },
+    "undelete": {
+     "id": "genomics.datasets.undelete",
+     "path": "datasets/{datasetId}/undelete",
+     "httpMethod": "POST",
+     "description": "Undeletes a dataset by restoring a dataset which was deleted via this API. This operation is only possible for a week after the deletion occurred.",
+     "parameters": {
+      "datasetId": {
+       "type": "string",
+       "description": "The ID of the dataset to be undeleted.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "datasetId"
+     ],
+     "response": {
+      "$ref": "Dataset"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/genomics"
+     ]
+    },
     "update": {
      "id": "genomics.datasets.update",
      "path": "datasets/{datasetId}",
@@ -1579,6 +1684,26 @@
   },
   "jobs": {
    "methods": {
+    "cancel": {
+     "id": "genomics.jobs.cancel",
+     "path": "jobs/{jobId}/cancel",
+     "httpMethod": "POST",
+     "description": "Cancels a job by ID. Note that it is possible for partial results to be generated and stored for cancelled jobs.",
+     "parameters": {
+      "jobId": {
+       "type": "string",
+       "description": "Required. The ID of the job.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "jobId"
+     ],
+     "scopes": [
+      "https://www.googleapis.com/auth/genomics"
+     ]
+    },
     "get": {
      "id": "genomics.jobs.get",
      "path": "jobs/{jobId}",
@@ -1587,7 +1712,7 @@
      "parameters": {
       "jobId": {
        "type": "string",
-       "description": "The ID of the job.",
+       "description": "Required. The ID of the job.",
        "required": true,
        "location": "path"
       }
@@ -1613,7 +1738,11 @@
      },
      "response": {
       "$ref": "SearchJobsResponse"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/genomics",
+      "https://www.googleapis.com/auth/genomics.readonly"
+     ]
     }
    }
   },
@@ -1783,6 +1912,71 @@
       "https://www.googleapis.com/auth/genomics"
      ]
     }
+   },
+   "resources": {
+    "coveragebuckets": {
+     "methods": {
+      "list": {
+       "id": "genomics.readsets.coveragebuckets.list",
+       "path": "readsets/{readsetId}/coveragebuckets",
+       "httpMethod": "GET",
+       "description": "Lists fixed width coverage buckets for a readset, each of which correspond to a range of a reference sequence. Each bucket summarizes coverage information across its corresponding genomic range. Coverage is defined as the number of reads which are aligned to a given base in the reference sequence. Coverage buckets are available at various bucket widths, enabling various coverage \"zoom levels\". The caller must have READ permissions for the target readset.",
+       "parameters": {
+        "maxResults": {
+         "type": "string",
+         "description": "The maximum number of results to return in a single page. If unspecified, defaults to 1024. The maximum value is 2048.",
+         "default": "1024",
+         "format": "uint64",
+         "location": "query"
+        },
+        "pageToken": {
+         "type": "string",
+         "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.",
+         "location": "query"
+        },
+        "range.sequenceEnd": {
+         "type": "string",
+         "description": "The end position of the range on the reference, 1-based exclusive. If specified, sequenceName must also be specified.",
+         "format": "uint64",
+         "location": "query"
+        },
+        "range.sequenceName": {
+         "type": "string",
+         "description": "The reference sequence name, for example \"chr1\", \"1\", or \"chrX\".",
+         "location": "query"
+        },
+        "range.sequenceStart": {
+         "type": "string",
+         "description": "The start position of the range on the reference, 1-based inclusive. If specified, sequenceName must also be specified.",
+         "format": "uint64",
+         "location": "query"
+        },
+        "readsetId": {
+         "type": "string",
+         "description": "Required. The ID of the readset over which coverage is requested.",
+         "required": true,
+         "location": "path"
+        },
+        "targetBucketWidth": {
+         "type": "string",
+         "description": "The desired width of each reported coverage bucket in base pairs. This will be rounded down to the nearest precomputed bucket width; the value of which is returned as bucket_width in the response. Defaults to infinity (each bucket spans an entire reference sequence) or the length of the target range, if specified. The smallest precomputed bucket_width is currently 2048 base pairs; this is subject to change.",
+         "format": "uint64",
+         "location": "query"
+        }
+       },
+       "parameterOrder": [
+        "readsetId"
+       ],
+       "response": {
+        "$ref": "ListCoverageBucketsResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/genomics",
+        "https://www.googleapis.com/auth/genomics.readonly"
+       ]
+      }
+     }
+    }
    }
   },
   "variants": {
diff --git a/genomics/v1beta/genomics-gen.go b/genomics/v1beta/genomics-gen.go
index a6d201b..425c776 100644
--- a/genomics/v1beta/genomics-gen.go
+++ b/genomics/v1beta/genomics-gen.go
@@ -159,11 +159,23 @@
 
 func NewReadsetsService(s *Service) *ReadsetsService {
 	rs := &ReadsetsService{s: s}
+	rs.Coveragebuckets = NewReadsetsCoveragebucketsService(s)
 	return rs
 }
 
 type ReadsetsService struct {
 	s *Service
+
+	Coveragebuckets *ReadsetsCoveragebucketsService
+}
+
+func NewReadsetsCoveragebucketsService(s *Service) *ReadsetsCoveragebucketsService {
+	rs := &ReadsetsCoveragebucketsService{s: s}
+	return rs
+}
+
+type ReadsetsCoveragebucketsService struct {
+	s *Service
 }
 
 func NewVariantsService(s *Service) *VariantsService {
@@ -212,8 +224,7 @@
 	// ordering implies the phase of the bases and is consistent with any
 	// other variant calls on the same contig which have the same phaseset
 	// value. When importing data from VCF, if the genotype data was phased
-	// but no phase set was specified this field will be set to
-	// "DEFAULT_PHASESET".
+	// but no phase set was specified this field will be set to "*".
 	Phaseset string `json:"phaseset,omitempty"`
 }
 
@@ -244,6 +255,15 @@
 	UpperBound int64 `json:"upperBound,omitempty,string"`
 }
 
+type CoverageBucket struct {
+	// MeanCoverage: The average number of reads which are aligned to each
+	// individual reference base in this bucket.
+	MeanCoverage float64 `json:"meanCoverage,omitempty"`
+
+	// Range: The genomic coordinate range spanned by this bucket.
+	Range *GenomicRange `json:"range,omitempty"`
+}
+
 type Dataset struct {
 	// Id: The Google generated ID of the dataset, immutable.
 	Id string `json:"id,omitempty"`
@@ -352,11 +372,26 @@
 	JobId string `json:"jobId,omitempty"`
 }
 
+type GenomicRange struct {
+	// SequenceEnd: The end position of the range on the reference, 1-based
+	// exclusive. If specified, sequenceName must also be specified.
+	SequenceEnd uint64 `json:"sequenceEnd,omitempty,string"`
+
+	// SequenceName: The reference sequence name, for example "chr1", "1",
+	// or "chrX".
+	SequenceName string `json:"sequenceName,omitempty"`
+
+	// SequenceStart: The start position of the range on the reference,
+	// 1-based inclusive. If specified, sequenceName must also be specified.
+	SequenceStart uint64 `json:"sequenceStart,omitempty,string"`
+}
+
 type GetVariantsSummaryResponse struct {
 	// ContigBounds: A list of all contigs used by the variants in a dataset
 	// with associated coordinate upper bounds for each one.
 	ContigBounds []*ContigBound `json:"contigBounds,omitempty"`
 
+	// Metadata: The metadata associated with this dataset.
 	Metadata []*Metadata `json:"metadata,omitempty"`
 }
 
@@ -372,9 +407,13 @@
 	// Comments: (@CO) One-line text comments.
 	Comments []string `json:"comments,omitempty"`
 
-	// FileUri: The file URI that this data was imported from.
+	// FileUri: [Deprecated] This field is deprecated and will no longer be
+	// populated. Please use filename instead.
 	FileUri string `json:"fileUri,omitempty"`
 
+	// Filename: The name of the file from which this data was imported.
+	Filename string `json:"filename,omitempty"`
+
 	// Headers: (@HD) The header line.
 	Headers []*Header `json:"headers,omitempty"`
 
@@ -449,6 +488,26 @@
 	Warnings []string `json:"warnings,omitempty"`
 }
 
+type ListCoverageBucketsResponse struct {
+	// BucketWidth: The length of each coverage bucket in base pairs. Note
+	// that buckets at the end of a reference sequence may be shorter. This
+	// value is omitted if the bucket width is infinity (the default
+	// behaviour, with no range or target_bucket_width).
+	BucketWidth uint64 `json:"bucketWidth,omitempty,string"`
+
+	// CoverageBuckets: The coverage buckets. The list of buckets is sparse;
+	// a bucket with 0 overlapping reads is not returned. A bucket never
+	// crosses more than one reference sequence. Each bucket has width
+	// bucket_width, unless its end is is the end of the reference sequence.
+	CoverageBuckets []*CoverageBucket `json:"coverageBuckets,omitempty"`
+
+	// NextPageToken: The continuation token, which is used to page through
+	// large result sets. Provide this value in a subsequent request to
+	// return the next page of results. This field will be empty if there
+	// aren't any additional results.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+}
+
 type ListDatasetsResponse struct {
 	// Datasets: The list of matching Datasets.
 	Datasets []*Dataset `json:"datasets,omitempty"`
@@ -611,10 +670,6 @@
 }
 
 type Readset struct {
-	// Created: The date this readset was created, in milliseconds from the
-	// epoch.
-	Created int64 `json:"created,omitempty,string"`
-
 	// DatasetId: The ID of the dataset this readset belongs to.
 	DatasetId string `json:"datasetId,omitempty"`
 
@@ -627,9 +682,6 @@
 
 	// Name: The readset name, typically this is the sample name.
 	Name string `json:"name,omitempty"`
-
-	// ReadCount: The number of reads in this readset.
-	ReadCount uint64 `json:"readCount,omitempty,string"`
 }
 
 type ReferenceSequence struct {
@@ -865,6 +917,13 @@
 	// DatasetId: The ID of the dataset this variant belongs to.
 	DatasetId string `json:"datasetId,omitempty"`
 
+	// End: The end position (1-based) of this variant. This corresponds to
+	// the first base after the last base in the reference allele. So, the
+	// length of the reference allele is (end - position). This is useful
+	// for variants that don't explicitly give alternate bases, for example
+	// large deletions.
+	End int64 `json:"end,omitempty,string"`
+
 	// Id: The Google generated ID of the variant, immutable.
 	Id string `json:"id,omitempty"`
 
@@ -1756,6 +1815,73 @@
 
 }
 
+// method id "genomics.datasets.undelete":
+
+type DatasetsUndeleteCall struct {
+	s         *Service
+	datasetId string
+	opt_      map[string]interface{}
+}
+
+// Undelete: Undeletes a dataset by restoring a dataset which was
+// deleted via this API. This operation is only possible for a week
+// after the deletion occurred.
+func (r *DatasetsService) Undelete(datasetId string) *DatasetsUndeleteCall {
+	c := &DatasetsUndeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.datasetId = datasetId
+	return c
+}
+
+func (c *DatasetsUndeleteCall) Do() (*Dataset, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "datasets/{datasetId}/undelete")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"datasetId": c.datasetId,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *Dataset
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Undeletes a dataset by restoring a dataset which was deleted via this API. This operation is only possible for a week after the deletion occurred.",
+	//   "httpMethod": "POST",
+	//   "id": "genomics.datasets.undelete",
+	//   "parameterOrder": [
+	//     "datasetId"
+	//   ],
+	//   "parameters": {
+	//     "datasetId": {
+	//       "description": "The ID of the dataset to be undeleted.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "datasets/{datasetId}/undelete",
+	//   "response": {
+	//     "$ref": "Dataset"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/genomics"
+	//   ]
+	// }
+
+}
+
 // method id "genomics.datasets.update":
 
 type DatasetsUpdateCall struct {
@@ -1895,6 +2021,65 @@
 
 }
 
+// method id "genomics.jobs.cancel":
+
+type JobsCancelCall struct {
+	s     *Service
+	jobId string
+	opt_  map[string]interface{}
+}
+
+// Cancel: Cancels a job by ID. Note that it is possible for partial
+// results to be generated and stored for cancelled jobs.
+func (r *JobsService) Cancel(jobId string) *JobsCancelCall {
+	c := &JobsCancelCall{s: r.s, opt_: make(map[string]interface{})}
+	c.jobId = jobId
+	return c
+}
+
+func (c *JobsCancelCall) Do() error {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "jobs/{jobId}/cancel")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"jobId": c.jobId,
+	})
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return err
+	}
+	return nil
+	// {
+	//   "description": "Cancels a job by ID. Note that it is possible for partial results to be generated and stored for cancelled jobs.",
+	//   "httpMethod": "POST",
+	//   "id": "genomics.jobs.cancel",
+	//   "parameterOrder": [
+	//     "jobId"
+	//   ],
+	//   "parameters": {
+	//     "jobId": {
+	//       "description": "Required. The ID of the job.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "jobs/{jobId}/cancel",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/genomics"
+	//   ]
+	// }
+
+}
+
 // method id "genomics.jobs.get":
 
 type JobsGetCall struct {
@@ -1943,7 +2128,7 @@
 	//   ],
 	//   "parameters": {
 	//     "jobId": {
-	//       "description": "The ID of the job.",
+	//       "description": "Required. The ID of the job.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
@@ -2014,7 +2199,11 @@
 	//   },
 	//   "response": {
 	//     "$ref": "SearchJobsResponse"
-	//   }
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/genomics",
+	//     "https://www.googleapis.com/auth/genomics.readonly"
+	//   ]
 	// }
 
 }
@@ -2560,6 +2749,184 @@
 
 }
 
+// method id "genomics.readsets.coveragebuckets.list":
+
+type ReadsetsCoveragebucketsListCall struct {
+	s         *Service
+	readsetId string
+	opt_      map[string]interface{}
+}
+
+// List: Lists fixed width coverage buckets for a readset, each of which
+// correspond to a range of a reference sequence. Each bucket summarizes
+// coverage information across its corresponding genomic range. Coverage
+// is defined as the number of reads which are aligned to a given base
+// in the reference sequence. Coverage buckets are available at various
+// bucket widths, enabling various coverage "zoom levels". The caller
+// must have READ permissions for the target readset.
+func (r *ReadsetsCoveragebucketsService) List(readsetId string) *ReadsetsCoveragebucketsListCall {
+	c := &ReadsetsCoveragebucketsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.readsetId = readsetId
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of results to return in a single page. If unspecified,
+// defaults to 1024. The maximum value is 2048.
+func (c *ReadsetsCoveragebucketsListCall) MaxResults(maxResults uint64) *ReadsetsCoveragebucketsListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": The continuation
+// token, which is used to page through large result sets. To get the
+// next page of results, set this parameter to the value of
+// "nextPageToken" from the previous response.
+func (c *ReadsetsCoveragebucketsListCall) PageToken(pageToken string) *ReadsetsCoveragebucketsListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+// RangeSequenceEnd sets the optional parameter "range.sequenceEnd": The
+// end position of the range on the reference, 1-based exclusive. If
+// specified, sequenceName must also be specified.
+func (c *ReadsetsCoveragebucketsListCall) RangeSequenceEnd(rangeSequenceEnd uint64) *ReadsetsCoveragebucketsListCall {
+	c.opt_["range.sequenceEnd"] = rangeSequenceEnd
+	return c
+}
+
+// RangeSequenceName sets the optional parameter "range.sequenceName":
+// The reference sequence name, for example "chr1", "1", or "chrX".
+func (c *ReadsetsCoveragebucketsListCall) RangeSequenceName(rangeSequenceName string) *ReadsetsCoveragebucketsListCall {
+	c.opt_["range.sequenceName"] = rangeSequenceName
+	return c
+}
+
+// RangeSequenceStart sets the optional parameter "range.sequenceStart":
+// The start position of the range on the reference, 1-based inclusive.
+// If specified, sequenceName must also be specified.
+func (c *ReadsetsCoveragebucketsListCall) RangeSequenceStart(rangeSequenceStart uint64) *ReadsetsCoveragebucketsListCall {
+	c.opt_["range.sequenceStart"] = rangeSequenceStart
+	return c
+}
+
+// TargetBucketWidth sets the optional parameter "targetBucketWidth":
+// The desired width of each reported coverage bucket in base pairs.
+// This will be rounded down to the nearest precomputed bucket width;
+// the value of which is returned as bucket_width in the response.
+// Defaults to infinity (each bucket spans an entire reference sequence)
+// or the length of the target range, if specified. The smallest
+// precomputed bucket_width is currently 2048 base pairs; this is
+// subject to change.
+func (c *ReadsetsCoveragebucketsListCall) TargetBucketWidth(targetBucketWidth uint64) *ReadsetsCoveragebucketsListCall {
+	c.opt_["targetBucketWidth"] = targetBucketWidth
+	return c
+}
+
+func (c *ReadsetsCoveragebucketsListCall) Do() (*ListCoverageBucketsResponse, 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))
+	}
+	if v, ok := c.opt_["range.sequenceEnd"]; ok {
+		params.Set("range.sequenceEnd", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["range.sequenceName"]; ok {
+		params.Set("range.sequenceName", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["range.sequenceStart"]; ok {
+		params.Set("range.sequenceStart", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["targetBucketWidth"]; ok {
+		params.Set("targetBucketWidth", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "readsets/{readsetId}/coveragebuckets")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"readsetId": c.readsetId,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *ListCoverageBucketsResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists fixed width coverage buckets for a readset, each of which correspond to a range of a reference sequence. Each bucket summarizes coverage information across its corresponding genomic range. Coverage is defined as the number of reads which are aligned to a given base in the reference sequence. Coverage buckets are available at various bucket widths, enabling various coverage \"zoom levels\". The caller must have READ permissions for the target readset.",
+	//   "httpMethod": "GET",
+	//   "id": "genomics.readsets.coveragebuckets.list",
+	//   "parameterOrder": [
+	//     "readsetId"
+	//   ],
+	//   "parameters": {
+	//     "maxResults": {
+	//       "default": "1024",
+	//       "description": "The maximum number of results to return in a single page. If unspecified, defaults to 1024. The maximum value is 2048.",
+	//       "format": "uint64",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "pageToken": {
+	//       "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "range.sequenceEnd": {
+	//       "description": "The end position of the range on the reference, 1-based exclusive. If specified, sequenceName must also be specified.",
+	//       "format": "uint64",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "range.sequenceName": {
+	//       "description": "The reference sequence name, for example \"chr1\", \"1\", or \"chrX\".",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "range.sequenceStart": {
+	//       "description": "The start position of the range on the reference, 1-based inclusive. If specified, sequenceName must also be specified.",
+	//       "format": "uint64",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "readsetId": {
+	//       "description": "Required. The ID of the readset over which coverage is requested.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "targetBucketWidth": {
+	//       "description": "The desired width of each reported coverage bucket in base pairs. This will be rounded down to the nearest precomputed bucket width; the value of which is returned as bucket_width in the response. Defaults to infinity (each bucket spans an entire reference sequence) or the length of the target range, if specified. The smallest precomputed bucket_width is currently 2048 base pairs; this is subject to change.",
+	//       "format": "uint64",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "readsets/{readsetId}/coveragebuckets",
+	//   "response": {
+	//     "$ref": "ListCoverageBucketsResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/genomics",
+	//     "https://www.googleapis.com/auth/genomics.readonly"
+	//   ]
+	// }
+
+}
+
 // method id "genomics.variants.create":
 
 type VariantsCreateCall struct {
diff --git a/gmail/v1/gmail-api.json b/gmail/v1/gmail-api.json
index b569a95..6b0a6c1 100644
--- a/gmail/v1/gmail-api.json
+++ b/gmail/v1/gmail-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"C11OM5Qtr9122-scy_WeqND9D3o/vaKGq_E3WHXDvRNTWPgS67682B8\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/t6pewSAzwcj9YSpbIObjW2xJOGE\"",
  "discoveryVersion": "v1",
  "id": "gmail:v1",
  "name": "gmail",
  "version": "v1",
+ "revision": "20140728",
  "title": "Gmail API",
  "description": "The Gmail REST API.",
  "ownerDomain": "google.com",
@@ -336,7 +337,7 @@
     },
     "raw": {
      "type": "string",
-     "description": "The entire email message in an RFC 2822 formatted string. Returned in messages.get and drafts.get responses when the format=RAW parameter is supplied.",
+     "description": "The entire email message in an RFC 2822 formatted and URL-safe base64 encoded string. Returned in messages.get and drafts.get responses when the format=RAW parameter is supplied.",
      "format": "byte",
      "annotations": {
       "required": [
diff --git a/gmail/v1/gmail-gen.go b/gmail/v1/gmail-gen.go
index 28073f7..2a57a60 100644
--- a/gmail/v1/gmail-gen.go
+++ b/gmail/v1/gmail-gen.go
@@ -261,9 +261,9 @@
 	// Payload: The parsed email structure in the message parts.
 	Payload *MessagePart `json:"payload,omitempty"`
 
-	// Raw: The entire email message in an RFC 2822 formatted string.
-	// Returned in messages.get and drafts.get responses when the format=RAW
-	// parameter is supplied.
+	// Raw: The entire email message in an RFC 2822 formatted and URL-safe
+	// base64 encoded string. Returned in messages.get and drafts.get
+	// responses when the format=RAW parameter is supplied.
 	Raw string `json:"raw,omitempty"`
 
 	// SizeEstimate: Estimated size in bytes of the message.
diff --git a/groupsmigration/v1/groupsmigration-api.json b/groupsmigration/v1/groupsmigration-api.json
index 6afdc32..81211bf 100644
--- a/groupsmigration/v1/groupsmigration-api.json
+++ b/groupsmigration/v1/groupsmigration-api.json
@@ -1,11 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/BJXZBhUL6VndsB8q_Dgu-kIvzFE\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/uMvgRqCygYBIh2d3lXb4f8cUWOw\"",
  "discoveryVersion": "v1",
  "id": "groupsmigration:v1",
  "name": "groupsmigration",
  "canonicalName": "Groups Migration",
  "version": "v1",
+ "revision": "20140416",
  "title": "Groups Migration API",
  "description": "Groups Migration Api.",
  "ownerDomain": "google.com",
diff --git a/groupssettings/v1/groupssettings-api.json b/groupssettings/v1/groupssettings-api.json
index 0bf2245..b8143c5 100644
--- a/groupssettings/v1/groupssettings-api.json
+++ b/groupssettings/v1/groupssettings-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/jwIJIppaaUqSDha_itkGyYVYL5s\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/-WzKihq8ROq_FQdrGtr_UG9N-4Y\"",
  "discoveryVersion": "v1",
  "id": "groupssettings:v1",
  "name": "groupssettings",
  "version": "v1",
+ "revision": "20140428",
  "title": "Groups Settings API",
  "description": "Lets you manage permission levels and related settings of a group.",
  "ownerDomain": "google.com",
diff --git a/identitytoolkit/v3/identitytoolkit-api.json b/identitytoolkit/v3/identitytoolkit-api.json
index 2947672..4121e78 100644
--- a/identitytoolkit/v3/identitytoolkit-api.json
+++ b/identitytoolkit/v3/identitytoolkit-api.json
@@ -1,11 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"C11OM5Qtr9122-scy_WeqND9D3o/vyykkTYdybKkqslsgtBDhFzxmkE\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/3Q4T5rCRWv05dybb5cUgUxFbyZs\"",
  "discoveryVersion": "v1",
  "id": "identitytoolkit:v3",
  "name": "identitytoolkit",
  "canonicalName": "Identity Toolkit",
  "version": "v3",
+ "revision": "20140717",
  "title": "Google Identity Toolkit API",
  "description": "Help the third party sites to implement federated login.",
  "ownerDomain": "google.com",
@@ -76,6 +77,10 @@
      "type": "string",
      "description": "The URI used by the IDP to authenticate the user."
     },
+    "forExistingProvider": {
+     "type": "boolean",
+     "description": "True if the authUri is for user's existing provider."
+    },
     "kind": {
      "type": "string",
      "description": "The fixed string identitytoolkit#CreateAuthUriResponse\".",
@@ -85,13 +90,6 @@
      "type": "string",
      "description": "The provider ID of the auth URI."
     },
-    "providers": {
-     "type": "array",
-     "description": "Existing IDP's for the user.",
-     "items": {
-      "type": "string"
-     }
-    },
     "registered": {
      "type": "boolean",
      "description": "Whether the user is registered if the identifier is an email."
@@ -350,22 +348,27 @@
    "description": "Request to upload user account in batch.",
    "properties": {
     "hashAlgorithm": {
-     "type": "string"
+     "type": "string",
+     "description": "The password hash algorithm."
     },
     "memoryCost": {
      "type": "integer",
+     "description": "Memory cost for hash calculation. Used by scrypt similar algorithms.",
      "format": "int32"
     },
     "rounds": {
      "type": "integer",
+     "description": "Rounds for hash calculation. Used by scrypt and similar algorithms.",
      "format": "int32"
     },
     "saltSeparator": {
      "type": "string",
+     "description": "The salt separator.",
      "format": "byte"
     },
     "signerKey": {
      "type": "string",
+     "description": "The key for to hash the password.",
      "format": "byte"
     },
     "users": {
diff --git a/identitytoolkit/v3/identitytoolkit-gen.go b/identitytoolkit/v3/identitytoolkit-gen.go
index e745ebf..b563365 100644
--- a/identitytoolkit/v3/identitytoolkit-gen.go
+++ b/identitytoolkit/v3/identitytoolkit-gen.go
@@ -68,15 +68,16 @@
 	// AuthUri: The URI used by the IDP to authenticate the user.
 	AuthUri string `json:"authUri,omitempty"`
 
+	// ForExistingProvider: True if the authUri is for user's existing
+	// provider.
+	ForExistingProvider bool `json:"forExistingProvider,omitempty"`
+
 	// Kind: The fixed string identitytoolkit#CreateAuthUriResponse".
 	Kind string `json:"kind,omitempty"`
 
 	// ProviderId: The provider ID of the auth URI.
 	ProviderId string `json:"providerId,omitempty"`
 
-	// Providers: Existing IDP's for the user.
-	Providers []string `json:"providers,omitempty"`
-
 	// Registered: Whether the user is registered if the identifier is an
 	// email.
 	Registered bool `json:"registered,omitempty"`
@@ -224,14 +225,21 @@
 }
 
 type IdentitytoolkitRelyingpartyUploadAccountRequest struct {
+	// HashAlgorithm: The password hash algorithm.
 	HashAlgorithm string `json:"hashAlgorithm,omitempty"`
 
+	// MemoryCost: Memory cost for hash calculation. Used by scrypt similar
+	// algorithms.
 	MemoryCost int64 `json:"memoryCost,omitempty"`
 
+	// Rounds: Rounds for hash calculation. Used by scrypt and similar
+	// algorithms.
 	Rounds int64 `json:"rounds,omitempty"`
 
+	// SaltSeparator: The salt separator.
 	SaltSeparator string `json:"saltSeparator,omitempty"`
 
+	// SignerKey: The key for to hash the password.
 	SignerKey string `json:"signerKey,omitempty"`
 
 	// Users: The account info to be stored.
diff --git a/licensing/v1/licensing-api.json b/licensing/v1/licensing-api.json
index f79b03b..caaa60c 100644
--- a/licensing/v1/licensing-api.json
+++ b/licensing/v1/licensing-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/i7ROTyL5fTp9c4DP_LXJg5raK-k\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/5nv4m0pBrnwpGqw9jwk2yynQNrg\"",
  "discoveryVersion": "v1",
  "id": "licensing:v1",
  "name": "licensing",
  "version": "v1",
+ "revision": "20140122",
  "title": "Enterprise License Manager API",
  "description": "Licensing API to view and manage license for your domain.",
  "ownerDomain": "google.com",
diff --git a/manager/v1beta2/manager-api.json b/manager/v1beta2/manager-api.json
index ad207b8..5d88406 100644
--- a/manager/v1beta2/manager-api.json
+++ b/manager/v1beta2/manager-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"C11OM5Qtr9122-scy_WeqND9D3o/n3eb2bmyX34OZf53pclKt-XBvTE\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/AkKfj_VobDSmBnmnOhpr3xrQcUQ\"",
  "discoveryVersion": "v1",
  "id": "manager:v1beta2",
  "name": "manager",
  "version": "v1beta2",
+ "revision": "20140728",
  "title": "Deployment Manager API",
  "description": "The Deployment Manager API allows users to declaratively configure, deploy and run complex solutions on the Google Cloud Platform.",
  "ownerDomain": "google.com",
diff --git a/mapsengine/exp2/mapsengine-api.json b/mapsengine/exp2/mapsengine-api.json
new file mode 100644
index 0000000..2f66c06
--- /dev/null
+++ b/mapsengine/exp2/mapsengine-api.json
@@ -0,0 +1,4706 @@
+{
+ "kind": "discovery#restDescription",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/YwkP_6eOsFAw4QqUU221sLh94K8\"",
+ "discoveryVersion": "v1",
+ "id": "mapsengine:exp2",
+ "name": "mapsengine",
+ "canonicalName": "Maps Engine",
+ "version": "exp2",
+ "revision": "20140813",
+ "title": "Google Maps Engine API",
+ "description": "The Google Maps Engine API allows developers to store and query geospatial vector and raster data.",
+ "ownerDomain": "google.com",
+ "ownerName": "Google",
+ "icons": {
+  "x16": "http://www.google.com/images/icons/product/maps_engine-16.png",
+  "x32": "http://www.google.com/images/icons/product/maps_engine-32.png"
+ },
+ "documentationLink": "https://developers.google.com/maps-engine/",
+ "protocol": "rest",
+ "baseUrl": "https://www.googleapis.com/mapsengine/exp2/",
+ "basePath": "/mapsengine/exp2/",
+ "rootUrl": "https://www.googleapis.com/",
+ "servicePath": "mapsengine/exp2/",
+ "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/mapsengine": {
+     "description": "View and manage your Google Maps Engine data"
+    },
+    "https://www.googleapis.com/auth/mapsengine.readonly": {
+     "description": "View your Google Maps Engine data"
+    }
+   }
+  }
+ },
+ "schemas": {
+  "AcquisitionTime": {
+   "id": "AcquisitionTime",
+   "type": "object",
+   "description": "Acquisition time represents acquired time of a raster.",
+   "properties": {
+    "end": {
+     "type": "string",
+     "description": "The end time if acquisition time is a range. The value is an RFC 3339 formatted date-time value (1970-01-01T00:00:00Z).",
+     "format": "date-time"
+    },
+    "precision": {
+     "type": "string",
+     "description": "The precision of acquisition time.",
+     "enum": [
+      "day",
+      "hour",
+      "minute",
+      "month",
+      "second",
+      "year"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      "",
+      "",
+      "",
+      ""
+     ]
+    },
+    "start": {
+     "type": "string",
+     "description": "The acquisition time, or start time if acquisition time is a range. The value is an RFC 3339 formatted date-time value (1970-01-01T00:00:00Z).",
+     "format": "date-time"
+    }
+   }
+  },
+  "Asset": {
+   "id": "Asset",
+   "type": "object",
+   "description": "An asset is any Google Maps Engine resource that has a globally unique ID. Assets include maps, layers, vector tables, raster collections, and rasters. Projects and features are not considered assets.\n\nMore detailed information about an asset can be obtained by querying the asset's particular endpoint.",
+   "properties": {
+    "bbox": {
+     "type": "array",
+     "description": "A rectangular bounding box which contains all of the data in this asset. The numbers represent latitude and longitude in decimal degrees.",
+     "items": {
+      "type": "number",
+      "format": "double"
+     }
+    },
+    "creationTime": {
+     "type": "string",
+     "description": "The creation time of this asset. The value is an RFC 3339-formatted date-time value (for example, 1970-01-01T00:00:00Z).",
+     "format": "date-time"
+    },
+    "description": {
+     "type": "string",
+     "description": "The asset's description."
+    },
+    "etag": {
+     "type": "string",
+     "description": "The ETag, used to refer to the current version of the asset."
+    },
+    "id": {
+     "type": "string",
+     "description": "The asset's globally unique ID."
+    },
+    "lastModifiedTime": {
+     "type": "string",
+     "description": "The last modified time of this asset. The value is an RFC 3339-formatted date-time value (for example, 1970-01-01T00:00:00Z).",
+     "format": "date-time"
+    },
+    "name": {
+     "type": "string",
+     "description": "The asset's name."
+    },
+    "projectId": {
+     "type": "string",
+     "description": "The ID of the project to which the asset belongs."
+    },
+    "resource": {
+     "type": "string",
+     "description": "The URL to query to retrieve the asset's complete object. The assets endpoint only returns high-level information about a resource."
+    },
+    "tags": {
+     "type": "array",
+     "description": "An array of text strings, with each string representing a tag. More information about tags can be found in the Tagging data article of the Maps Engine help center.",
+     "items": {
+      "type": "string"
+     }
+    },
+    "type": {
+     "type": "string",
+     "description": "The type of asset.",
+     "enum": [
+      "layer",
+      "map",
+      "raster",
+      "rasterCollection",
+      "table"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      "",
+      "",
+      ""
+     ]
+    }
+   }
+  },
+  "AssetsListResponse": {
+   "id": "AssetsListResponse",
+   "type": "object",
+   "description": "The response returned by a call to resources.List.",
+   "properties": {
+    "assets": {
+     "type": "array",
+     "description": "Assets returned.",
+     "items": {
+      "$ref": "Asset"
+     }
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "Next page token.",
+     "format": "byte"
+    }
+   }
+  },
+  "Border": {
+   "id": "Border",
+   "type": "object",
+   "description": "Border in line style. Both color and width are required.",
+   "properties": {
+    "color": {
+     "type": "string",
+     "description": "Color of the border.",
+     "annotations": {
+      "required": [
+       "mapsengine.layers.create",
+       "mapsengine.layers.patch"
+      ]
+     }
+    },
+    "opacity": {
+     "type": "number",
+     "description": "Opacity of the border.",
+     "format": "double"
+    },
+    "width": {
+     "type": "number",
+     "description": "Width of the border, in pixels.",
+     "format": "double",
+     "annotations": {
+      "required": [
+       "mapsengine.layers.create",
+       "mapsengine.layers.patch"
+      ]
+     }
+    }
+   }
+  },
+  "Color": {
+   "id": "Color",
+   "type": "object",
+   "description": "Basic color used in styling.",
+   "properties": {
+    "color": {
+     "type": "string",
+     "description": "The CSS style color, can be in format of \"red\" or \"#7733EE\".",
+     "annotations": {
+      "required": [
+       "mapsengine.layers.create",
+       "mapsengine.layers.patch"
+      ]
+     }
+    },
+    "opacity": {
+     "type": "number",
+     "description": "Opacity ranges from 0 to 1, inclusive. If not provided, default to 1.",
+     "format": "double"
+    }
+   }
+  },
+  "Datasource": {
+   "id": "Datasource",
+   "type": "object",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "The ID of a datasource."
+    }
+   }
+  },
+  "Datasources": {
+   "id": "Datasources",
+   "type": "array",
+   "items": {
+    "$ref": "Datasource"
+   }
+  },
+  "DisplayRule": {
+   "id": "DisplayRule",
+   "type": "object",
+   "description": "A display rule of the vector style.",
+   "properties": {
+    "filters": {
+     "type": "array",
+     "description": "This display rule will only be applied to features that match all of the filters here. If filters is empty, then the rule applies to all features.",
+     "items": {
+      "$ref": "Filter"
+     }
+    },
+    "lineOptions": {
+     "$ref": "LineStyle",
+     "description": "Style applied to lines. Required for LineString Geometry."
+    },
+    "name": {
+     "type": "string",
+     "description": "Display rule name. Name is not unique and cannot be used for identification purpose."
+    },
+    "pointOptions": {
+     "$ref": "PointStyle",
+     "description": "Style applied to points. Required for Point Geometry."
+    },
+    "polygonOptions": {
+     "$ref": "PolygonStyle",
+     "description": "Style applied to polygons. Required for Polygon Geometry."
+    },
+    "zoomLevels": {
+     "$ref": "ZoomLevels",
+     "description": "The zoom levels that this display rule apply.",
+     "annotations": {
+      "required": [
+       "mapsengine.layers.create",
+       "mapsengine.layers.patch"
+      ]
+     }
+    }
+   }
+  },
+  "Feature": {
+   "id": "Feature",
+   "type": "object",
+   "description": "A feature within a table.",
+   "properties": {
+    "geometry": {
+     "$ref": "GeoJsonGeometry",
+     "description": "The geometry member of this Feature."
+    },
+    "properties": {
+     "$ref": "GeoJsonProperties",
+     "description": "Key/value pairs of this Feature."
+    },
+    "type": {
+     "type": "string",
+     "description": "Identifies this object as a feature.",
+     "default": "Feature"
+    }
+   }
+  },
+  "FeatureInfo": {
+   "id": "FeatureInfo",
+   "type": "object",
+   "description": "A feature info contains information about individual feature.",
+   "properties": {
+    "content": {
+     "type": "string",
+     "description": "HTML template of the info window. If not provided, a default template with all attributes will be generated."
+    }
+   }
+  },
+  "FeaturesBatchDeleteRequest": {
+   "id": "FeaturesBatchDeleteRequest",
+   "type": "object",
+   "description": "The request sent to features.BatchDelete.",
+   "properties": {
+    "gx_ids": {
+     "type": "array",
+     "items": {
+      "type": "string"
+     }
+    },
+    "primaryKeys": {
+     "type": "array",
+     "items": {
+      "type": "string"
+     }
+    }
+   }
+  },
+  "FeaturesBatchInsertRequest": {
+   "id": "FeaturesBatchInsertRequest",
+   "type": "object",
+   "description": "The request sent to features.Insert.",
+   "properties": {
+    "allowNormalization": {
+     "type": "boolean",
+     "description": "If true, the server will normalize feature geometries. It is assumed that the South Pole is exterior to any polygons given. See here for a list of normalizations. If false, the all feature geometries must be given already normalized. The points in all LinearRings must be listed in counter-clockwise order, and LinearRings may not intersect."
+    },
+    "features": {
+     "type": "array",
+     "items": {
+      "$ref": "Feature"
+     }
+    }
+   }
+  },
+  "FeaturesBatchPatchRequest": {
+   "id": "FeaturesBatchPatchRequest",
+   "type": "object",
+   "description": "The request sent to features.BatchPatch.",
+   "properties": {
+    "allowNormalization": {
+     "type": "boolean",
+     "description": "If true, the server will normalize feature geometries. It is assumed that the South Pole is exterior to any polygons given. See here for a list of normalizations. If false, the all feature geometries must be given already normalized. The points in all LinearRings must be listed in counter-clockwise order, and LinearRings may not intersect."
+    },
+    "features": {
+     "type": "array",
+     "items": {
+      "$ref": "Feature"
+     }
+    }
+   }
+  },
+  "FeaturesListResponse": {
+   "id": "FeaturesListResponse",
+   "type": "object",
+   "description": "The response returned by a call to features.List.",
+   "properties": {
+    "allowedQueriesPerSecond": {
+     "type": "number",
+     "description": "An indicator of the maximum rate at which queries may be made, if all queries were as expensive as this query.",
+     "format": "double"
+    },
+    "features": {
+     "type": "array",
+     "description": "Resources returned.",
+     "items": {
+      "$ref": "Feature"
+     }
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "Next page token."
+    },
+    "schema": {
+     "$ref": "Schema",
+     "description": "The feature schema."
+    },
+    "type": {
+     "type": "string",
+     "default": "FeatureCollection"
+    }
+   }
+  },
+  "File": {
+   "id": "File",
+   "type": "object",
+   "description": "A single File, which is a component of an Asset.",
+   "properties": {
+    "filename": {
+     "type": "string",
+     "description": "The name of the file.",
+     "annotations": {
+      "required": [
+       "mapsengine.rasters.upload",
+       "mapsengine.tables.upload"
+      ]
+     }
+    },
+    "size": {
+     "type": "string",
+     "description": "The size of the file in bytes.",
+     "format": "int64"
+    },
+    "uploadStatus": {
+     "type": "string",
+     "description": "The upload status of the file.",
+     "enum": [
+      "canceled",
+      "complete",
+      "failed",
+      "inProgress"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      "",
+      ""
+     ]
+    }
+   }
+  },
+  "Filter": {
+   "id": "Filter",
+   "type": "object",
+   "description": "Conditions for filtering features.",
+   "properties": {
+    "column": {
+     "type": "string",
+     "description": "The column name to filter on.",
+     "annotations": {
+      "required": [
+       "mapsengine.layers.create",
+       "mapsengine.layers.patch"
+      ]
+     }
+    },
+    "operator": {
+     "type": "string",
+     "description": "Operation used to evaluate the filter.",
+     "enum": [
+      "!=",
+      "\u003c",
+      "\u003c=",
+      "==",
+      "\u003e",
+      "\u003e=",
+      "contains",
+      "endsWith",
+      "startsWith"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      "",
+      "",
+      "",
+      "",
+      "",
+      "",
+      ""
+     ],
+     "annotations": {
+      "required": [
+       "mapsengine.layers.create",
+       "mapsengine.layers.patch"
+      ]
+     }
+    },
+    "value": {
+     "type": "any",
+     "description": "Value to be evaluated against attribute.",
+     "annotations": {
+      "required": [
+       "mapsengine.layers.create",
+       "mapsengine.layers.patch"
+      ]
+     }
+    }
+   }
+  },
+  "GeoJsonGeometry": {
+   "id": "GeoJsonGeometry",
+   "type": "object",
+   "variant": {
+    "discriminant": "type",
+    "map": [
+     {
+      "type_value": "GeometryCollection",
+      "$ref": "GeoJsonGeometryCollection"
+     },
+     {
+      "type_value": "LineString",
+      "$ref": "GeoJsonLineString"
+     },
+     {
+      "type_value": "MultiLineString",
+      "$ref": "GeoJsonMultiLineString"
+     },
+     {
+      "type_value": "MultiPoint",
+      "$ref": "GeoJsonMultiPoint"
+     },
+     {
+      "type_value": "MultiPolygon",
+      "$ref": "GeoJsonMultiPolygon"
+     },
+     {
+      "type_value": "Point",
+      "$ref": "GeoJsonPoint"
+     },
+     {
+      "type_value": "Polygon",
+      "$ref": "GeoJsonPolygon"
+     }
+    ]
+   }
+  },
+  "GeoJsonGeometryCollection": {
+   "id": "GeoJsonGeometryCollection",
+   "type": "object",
+   "description": "A heterogenous collection of GeoJsonGeometry objects.",
+   "properties": {
+    "geometries": {
+     "type": "array",
+     "description": "An array of geometry objects. There must be at least 2 different types of geometries in the array.",
+     "items": {
+      "$ref": "GeoJsonGeometry"
+     }
+    },
+    "type": {
+     "type": "string",
+     "description": "Identifies this object as a GeoJsonGeometryCollection.",
+     "enum": [
+      "GeometryCollection"
+     ],
+     "enumDescriptions": [
+      ""
+     ]
+    }
+   }
+  },
+  "GeoJsonLineString": {
+   "id": "GeoJsonLineString",
+   "type": "object",
+   "properties": {
+    "coordinates": {
+     "type": "array",
+     "description": "An array of two or more positions, representing a line.",
+     "items": {
+      "$ref": "GeoJsonPosition"
+     }
+    },
+    "type": {
+     "type": "string",
+     "description": "Identifies this object as a GeoJsonLineString.",
+     "enum": [
+      "LineString"
+     ],
+     "enumDescriptions": [
+      ""
+     ]
+    }
+   }
+  },
+  "GeoJsonMultiLineString": {
+   "id": "GeoJsonMultiLineString",
+   "type": "object",
+   "description": "Multi Line String",
+   "properties": {
+    "coordinates": {
+     "type": "array",
+     "description": "An array of at least two GeoJsonLineString coordinate arrays.",
+     "items": {
+      "type": "array",
+      "items": {
+       "$ref": "GeoJsonPosition"
+      }
+     }
+    },
+    "type": {
+     "type": "string",
+     "description": "Identifies this object as a GeoJsonMultiLineString.",
+     "enum": [
+      "MultiLineString"
+     ],
+     "enumDescriptions": [
+      ""
+     ]
+    }
+   }
+  },
+  "GeoJsonMultiPoint": {
+   "id": "GeoJsonMultiPoint",
+   "type": "object",
+   "properties": {
+    "coordinates": {
+     "type": "array",
+     "description": "An array of at least two GeoJsonPoint coordinate arrays.",
+     "items": {
+      "$ref": "GeoJsonPosition"
+     }
+    },
+    "type": {
+     "type": "string",
+     "description": "Identifies this object as a GeoJsonMultiPoint.",
+     "enum": [
+      "MultiPoint"
+     ],
+     "enumDescriptions": [
+      ""
+     ]
+    }
+   }
+  },
+  "GeoJsonMultiPolygon": {
+   "id": "GeoJsonMultiPolygon",
+   "type": "object",
+   "properties": {
+    "coordinates": {
+     "type": "array",
+     "description": "An array of at least two GeoJsonPolygon coordinate arrays.",
+     "items": {
+      "type": "array",
+      "items": {
+       "type": "array",
+       "items": {
+        "$ref": "GeoJsonPosition"
+       }
+      }
+     }
+    },
+    "type": {
+     "type": "string",
+     "description": "Identifies this object as a GeoJsonMultiPolygon.",
+     "enum": [
+      "MultiPolygon"
+     ],
+     "enumDescriptions": [
+      ""
+     ]
+    }
+   }
+  },
+  "GeoJsonPoint": {
+   "id": "GeoJsonPoint",
+   "type": "object",
+   "properties": {
+    "coordinates": {
+     "$ref": "GeoJsonPosition",
+     "description": "A single GeoJsonPosition, specifying the location of the point."
+    },
+    "type": {
+     "type": "string",
+     "description": "Identifies this object as a GeoJsonPoint.",
+     "enum": [
+      "Point"
+     ],
+     "enumDescriptions": [
+      ""
+     ]
+    }
+   }
+  },
+  "GeoJsonPolygon": {
+   "id": "GeoJsonPolygon",
+   "type": "object",
+   "properties": {
+    "coordinates": {
+     "type": "array",
+     "description": "An array of LinearRings. A LinearRing is a GeoJsonLineString which is closed (that is, the first and last GeoJsonPositions are equal), and which contains at least four GeoJsonPositions. For polygons with multiple rings, the first LinearRing is the exterior ring, and any subsequent rings are interior rings (that is, holes).",
+     "items": {
+      "type": "array",
+      "items": {
+       "$ref": "GeoJsonPosition"
+      }
+     }
+    },
+    "type": {
+     "type": "string",
+     "description": "Identifies this object as a GeoJsonPolygon.",
+     "enum": [
+      "Polygon"
+     ],
+     "enumDescriptions": [
+      ""
+     ]
+    }
+   }
+  },
+  "GeoJsonPosition": {
+   "id": "GeoJsonPosition",
+   "type": "array",
+   "description": "A position represents a geographical position as an array containing a longitude and a latitude, and optionally an altitude, in that order. All Geometry objects make use of positions to represent geometries as nested arrays. The structure of the array is governed by the type of the geometry.",
+   "items": {
+    "type": "number",
+    "format": "double"
+   }
+  },
+  "GeoJsonProperties": {
+   "id": "GeoJsonProperties",
+   "type": "object",
+   "description": "The properties associated with a feature.",
+   "additionalProperties": {
+    "type": "any",
+    "description": "An arbitrary key-value pair. The key must be the name of a column in the table's schema, and the type of the value must correspond to the type specified in the schema."
+   }
+  },
+  "Icon": {
+   "id": "Icon",
+   "type": "object",
+   "description": "An icon is a user-uploaded image that can be used to style point geometries.",
+   "properties": {
+    "description": {
+     "type": "string",
+     "description": "The description of this Icon, supplied by the author."
+    },
+    "id": {
+     "type": "string",
+     "description": "An ID used to refer to this Icon."
+    },
+    "name": {
+     "type": "string",
+     "description": "The name of this Icon, supplied by the author.",
+     "annotations": {
+      "required": [
+       "mapsengine.projects.icons.create"
+      ]
+     }
+    }
+   }
+  },
+  "IconStyle": {
+   "id": "IconStyle",
+   "type": "object",
+   "description": "Style for icon, this is part of point style.",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "Custom icon id."
+    },
+    "name": {
+     "type": "string",
+     "description": "Stock icon name. To use a stock icon, prefix it with 'gx_'. See Stock icon names for valid icon names. For example, to specify small_red, set name to 'gx_small_red'."
+    },
+    "scaledShape": {
+     "$ref": "ScaledShape",
+     "description": "A scalable shape."
+    },
+    "scalingFunction": {
+     "$ref": "ScalingFunction",
+     "description": "The function used to scale shapes. Required when a scaledShape is specified."
+    }
+   }
+  },
+  "IconsListResponse": {
+   "id": "IconsListResponse",
+   "type": "object",
+   "description": "The response returned by a call to icons.List.",
+   "properties": {
+    "icons": {
+     "type": "array",
+     "description": "Resources returned.",
+     "items": {
+      "$ref": "Icon"
+     }
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "Next page token."
+    }
+   }
+  },
+  "LabelStyle": {
+   "id": "LabelStyle",
+   "type": "object",
+   "description": "Text label style.",
+   "properties": {
+    "color": {
+     "type": "string",
+     "description": "Color of the text. If not provided, default to black."
+    },
+    "column": {
+     "type": "string",
+     "description": "The column value of the feature to be displayed.",
+     "annotations": {
+      "required": [
+       "mapsengine.layers.create",
+       "mapsengine.layers.patch"
+      ]
+     }
+    },
+    "fontStyle": {
+     "type": "string",
+     "description": "Font style of the label, defaults to 'normal'.",
+     "enum": [
+      "italic",
+      "normal"
+     ],
+     "enumDescriptions": [
+      "",
+      ""
+     ]
+    },
+    "fontWeight": {
+     "type": "string",
+     "description": "Font weight of the label, defaults to 'normal'.",
+     "enum": [
+      "bold",
+      "normal"
+     ],
+     "enumDescriptions": [
+      "",
+      ""
+     ]
+    },
+    "opacity": {
+     "type": "number",
+     "description": "Opacity of the text.",
+     "format": "double"
+    },
+    "outline": {
+     "$ref": "Color",
+     "description": "Outline color of the text."
+    },
+    "size": {
+     "type": "number",
+     "description": "Font size of the label, in pixels. 8 \u003c= size \u003c= 15. If not provided, a default size will be provided.",
+     "format": "double"
+    }
+   }
+  },
+  "LatLngBox": {
+   "id": "LatLngBox",
+   "type": "array",
+   "description": "A rectangular geographic bounds.",
+   "items": {
+    "type": "number",
+    "format": "double"
+   }
+  },
+  "Layer": {
+   "id": "Layer",
+   "type": "object",
+   "description": "A Layer combines multiple datasources, with styling information, for presentation on a map.",
+   "properties": {
+    "bbox": {
+     "type": "array",
+     "description": "A rectangular bounding box which contains all of the data in this Layer. The numbers represent latitude and longitude in decimal degrees.",
+     "items": {
+      "type": "number",
+      "format": "double"
+     }
+    },
+    "creationTime": {
+     "type": "string",
+     "description": "The creation time of this layer. The value is an RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z).",
+     "format": "date-time"
+    },
+    "datasourceType": {
+     "type": "string",
+     "description": "The type of the datasources used to build this Layer.",
+     "enum": [
+      "image",
+      "table"
+     ],
+     "enumDescriptions": [
+      "",
+      ""
+     ],
+     "annotations": {
+      "required": [
+       "mapsengine.layers.create"
+      ]
+     }
+    },
+    "datasources": {
+     "$ref": "Datasources",
+     "description": "An array of datasources used to build this Layer. If datasourceType is \"image\", then each element in this array is a reference to an Image or RasterCollection. If datasourceType is \"table\" then each element in this array is a reference to a Vector Table."
+    },
+    "description": {
+     "type": "string",
+     "description": "The description of this Layer, supplied by the author."
+    },
+    "draftAccessList": {
+     "type": "string",
+     "description": "Deprecated: The name of an access list of the Map Editor type. The user on whose behalf the request is being sent must be an editor on that access list. Read About access lists in the Google Maps Engine help center for more information."
+    },
+    "etag": {
+     "type": "string",
+     "description": "The ETag, used to refer to the current version of the asset."
+    },
+    "id": {
+     "type": "string",
+     "description": "A globally unique ID, used to refer to this Layer."
+    },
+    "lastModifiedTime": {
+     "type": "string",
+     "description": "The last modified time of this layer. The value is an RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z).",
+     "format": "date-time"
+    },
+    "name": {
+     "type": "string",
+     "description": "The name of this Layer, supplied by the author.",
+     "annotations": {
+      "required": [
+       "mapsengine.layers.create"
+      ]
+     }
+    },
+    "processingStatus": {
+     "type": "string",
+     "description": "The processing status of this layer.",
+     "enum": [
+      "complete",
+      "failed",
+      "notReady",
+      "processing",
+      "ready"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      "",
+      "",
+      ""
+     ]
+    },
+    "projectId": {
+     "type": "string",
+     "description": "The ID of the project that this Layer is in.",
+     "annotations": {
+      "required": [
+       "mapsengine.layers.create"
+      ]
+     }
+    },
+    "publishedAccessList": {
+     "type": "string",
+     "description": "Deprecated: The access list to whom view permissions are granted. The value must be the name of a Maps Engine access list of the Map Viewer type, and the user must be a viewer on that list. Read About access lists in the Google Maps Engine help center for more information."
+    },
+    "style": {
+     "$ref": "VectorStyle",
+     "description": "The Styling information for a vector layer."
+    },
+    "tags": {
+     "$ref": "Tags",
+     "description": "Tags of this Layer."
+    }
+   }
+  },
+  "LayersListResponse": {
+   "id": "LayersListResponse",
+   "type": "object",
+   "description": "The response returned by a call to layers.List.",
+   "properties": {
+    "layers": {
+     "type": "array",
+     "description": "Resources returned.",
+     "items": {
+      "$ref": "Layer"
+     }
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "Next page token.",
+     "format": "byte"
+    }
+   }
+  },
+  "LineStyle": {
+   "id": "LineStyle",
+   "type": "object",
+   "description": "Style for lines.",
+   "properties": {
+    "border": {
+     "$ref": "Border",
+     "description": "Border of the line. 0 \u003c border.width \u003c= 5."
+    },
+    "dash": {
+     "type": "array",
+     "description": "Dash defines the pattern of the line, the values are pixel lengths of alternating dash and gap. If dash is not provided, then it means a solid line. Dash can contain up to 10 values and must contain even number of values.",
+     "items": {
+      "type": "number",
+      "format": "double"
+     }
+    },
+    "label": {
+     "$ref": "LabelStyle",
+     "description": "Label style for the line."
+    },
+    "stroke": {
+     "type": "object",
+     "description": "Stroke of the line.",
+     "properties": {
+      "color": {
+       "type": "string",
+       "description": "Color of the line.",
+       "annotations": {
+        "required": [
+         "mapsengine.layers.create",
+         "mapsengine.layers.patch"
+        ]
+       }
+      },
+      "opacity": {
+       "type": "number",
+       "description": "Opacity of the line.",
+       "format": "double"
+      },
+      "width": {
+       "type": "number",
+       "description": "Width of the line, in pixels. 0 \u003c= width \u003c= 10. If width is set to 0, the line will be invisible.",
+       "format": "double",
+       "annotations": {
+        "required": [
+         "mapsengine.layers.create",
+         "mapsengine.layers.patch"
+        ]
+       }
+      }
+     }
+    }
+   }
+  },
+  "Map": {
+   "id": "Map",
+   "type": "object",
+   "description": "A Map is a collection of Layers, optionally contained within folders.",
+   "properties": {
+    "bbox": {
+     "type": "array",
+     "description": "A rectangular bounding box which contains all of the data in this Map. The numbers represent latitude and longitude in decimal degrees.",
+     "items": {
+      "type": "number",
+      "format": "double"
+     }
+    },
+    "contents": {
+     "$ref": "MapContents",
+     "description": "The contents of this Map."
+    },
+    "creationTime": {
+     "type": "string",
+     "description": "The creation time of this map. The value is an RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z).",
+     "format": "date-time"
+    },
+    "defaultViewport": {
+     "$ref": "LatLngBox",
+     "description": "An array of four numbers (west, south, east, north) which defines the rectangular bounding box of the default viewport. The numbers represent latitude and longitude in decimal degrees."
+    },
+    "description": {
+     "type": "string",
+     "description": "The description of this Map, supplied by the author."
+    },
+    "draftAccessList": {
+     "type": "string",
+     "description": "Deprecated: The name of an access list of the Map Editor type. The user on whose behalf the request is being sent must be an editor on that access list. Read About access lists in the Google Maps Engine help center for more information."
+    },
+    "etag": {
+     "type": "string",
+     "description": "The ETag, used to refer to the current version of the asset."
+    },
+    "id": {
+     "type": "string",
+     "description": "A globally unique ID, used to refer to this Map."
+    },
+    "lastModifiedTime": {
+     "type": "string",
+     "description": "The last modified time of this map. The value is an RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z).",
+     "format": "date-time"
+    },
+    "name": {
+     "type": "string",
+     "description": "The name of this Map, supplied by the author.",
+     "annotations": {
+      "required": [
+       "mapsengine.maps.create"
+      ]
+     }
+    },
+    "processingStatus": {
+     "type": "string",
+     "description": "The processing status of this map. Map processing is automatically started once a map becomes ready for processing.",
+     "enum": [
+      "complete",
+      "failed",
+      "notReady",
+      "processing",
+      "ready"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      "",
+      "",
+      ""
+     ]
+    },
+    "projectId": {
+     "type": "string",
+     "description": "The ID of the project that this Map is in.",
+     "annotations": {
+      "required": [
+       "mapsengine.maps.create"
+      ]
+     }
+    },
+    "publishedAccessList": {
+     "type": "string",
+     "description": "Deprecated: The access list to whom view permissions are granted. The value must be the name of a Maps Engine access list of the Map Viewer type, and the user must be a viewer on that list. Read About access lists in the Google Maps Engine help center for more information."
+    },
+    "publishingStatus": {
+     "type": "string",
+     "description": "The publishing status of this map.",
+     "enum": [
+      "notPublished",
+      "published"
+     ],
+     "enumDescriptions": [
+      "",
+      ""
+     ]
+    },
+    "tags": {
+     "$ref": "Tags",
+     "description": "Tags of this Map."
+    },
+    "versions": {
+     "type": "array",
+     "description": "Deprecated: An array containing the available versions of this Map. Currently may only contain \"published\". The publishingStatus field should be used instead.",
+     "items": {
+      "type": "string",
+      "default": "published"
+     }
+    }
+   }
+  },
+  "MapContents": {
+   "id": "MapContents",
+   "type": "array",
+   "items": {
+    "$ref": "MapItem"
+   }
+  },
+  "MapFolder": {
+   "id": "MapFolder",
+   "type": "object",
+   "properties": {
+    "contents": {
+     "type": "array",
+     "items": {
+      "$ref": "MapItem"
+     }
+    },
+    "defaultViewport": {
+     "type": "array",
+     "description": "An array of four numbers (west, south, east, north) which defines the rectangular bounding box of the default viewport. The numbers represent latitude and longitude in decimal degrees.",
+     "items": {
+      "type": "number",
+      "format": "double"
+     }
+    },
+    "expandable": {
+     "type": "boolean",
+     "description": "The expandability setting of this MapFolder. If true, the folder can be expanded."
+    },
+    "key": {
+     "type": "string",
+     "description": "A user defined alias for this MapFolder, specific to this Map."
+    },
+    "name": {
+     "type": "string",
+     "description": "The name of this MapFolder.",
+     "annotations": {
+      "required": [
+       "mapsengine.maps.create",
+       "mapsengine.maps.patch"
+      ]
+     }
+    },
+    "type": {
+     "type": "string",
+     "description": "Identifies this object as a MapFolder.",
+     "enum": [
+      "folder"
+     ],
+     "enumDescriptions": [
+      ""
+     ],
+     "annotations": {
+      "required": [
+       "mapsengine.maps.create",
+       "mapsengine.maps.patch"
+      ]
+     }
+    },
+    "visibility": {
+     "type": "string",
+     "description": "The visibility setting of this MapFolder. One of \"defaultOn\" or \"defaultOff\"."
+    }
+   }
+  },
+  "MapItem": {
+   "id": "MapItem",
+   "type": "object",
+   "variant": {
+    "discriminant": "type",
+    "map": [
+     {
+      "type_value": "folder",
+      "$ref": "MapFolder"
+     },
+     {
+      "type_value": "kmlLink",
+      "$ref": "MapKmlLink"
+     },
+     {
+      "type_value": "layer",
+      "$ref": "MapLayer"
+     }
+    ]
+   }
+  },
+  "MapKmlLink": {
+   "id": "MapKmlLink",
+   "type": "object",
+   "properties": {
+    "defaultViewport": {
+     "type": "array",
+     "description": "An array of four numbers (west, south, east, north) which defines the rectangular bounding box of the default viewport. The numbers represent latitude and longitude in decimal degrees.",
+     "items": {
+      "type": "number",
+      "format": "double"
+     }
+    },
+    "kmlUrl": {
+     "type": "string",
+     "description": "The URL to the KML file represented by this MapKmlLink.",
+     "annotations": {
+      "required": [
+       "mapsengine.maps.create",
+       "mapsengine.maps.patch"
+      ]
+     }
+    },
+    "name": {
+     "type": "string",
+     "description": "The name of this MapKmlLink.",
+     "annotations": {
+      "required": [
+       "mapsengine.maps.create",
+       "mapsengine.maps.patch"
+      ]
+     }
+    },
+    "type": {
+     "type": "string",
+     "description": "Identifies this object as a MapKmlLink.",
+     "enum": [
+      "kmlLink"
+     ],
+     "enumDescriptions": [
+      ""
+     ],
+     "annotations": {
+      "required": [
+       "mapsengine.maps.create",
+       "mapsengine.maps.patch"
+      ]
+     }
+    },
+    "visibility": {
+     "type": "string",
+     "description": "The visibility setting of this MapKmlLink. One of \"defaultOn\" or \"defaultOff\"."
+    }
+   }
+  },
+  "MapLayer": {
+   "id": "MapLayer",
+   "type": "object",
+   "properties": {
+    "defaultViewport": {
+     "type": "array",
+     "description": "An array of four numbers (west, south, east, north) which defines the rectangular bounding box of the default viewport. The numbers represent latitude and longitude in decimal degrees.",
+     "items": {
+      "type": "number",
+      "format": "double"
+     }
+    },
+    "id": {
+     "type": "string",
+     "description": "The ID of this MapLayer. This ID can be used to request more details about the layer.",
+     "annotations": {
+      "required": [
+       "mapsengine.maps.create",
+       "mapsengine.maps.patch"
+      ]
+     }
+    },
+    "key": {
+     "type": "string",
+     "description": "A user defined alias for this MapLayer, specific to this Map."
+    },
+    "name": {
+     "type": "string",
+     "description": "The name of this MapLayer."
+    },
+    "type": {
+     "type": "string",
+     "description": "Identifies this object as a MapLayer.",
+     "enum": [
+      "layer"
+     ],
+     "enumDescriptions": [
+      ""
+     ],
+     "annotations": {
+      "required": [
+       "mapsengine.maps.create",
+       "mapsengine.maps.patch"
+      ]
+     }
+    },
+    "visibility": {
+     "type": "string",
+     "description": "The visibility setting of this MapLayer. One of \"defaultOn\" or \"defaultOff\"."
+    }
+   }
+  },
+  "MapsListResponse": {
+   "id": "MapsListResponse",
+   "type": "object",
+   "description": "The response returned by a call to maps.List.",
+   "properties": {
+    "maps": {
+     "type": "array",
+     "description": "Resources returned.",
+     "items": {
+      "$ref": "Map"
+     }
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "Next page token.",
+     "format": "byte"
+    }
+   }
+  },
+  "Parent": {
+   "id": "Parent",
+   "type": "object",
+   "description": "A list of the parents of an asset.",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "The ID of this parent."
+    }
+   }
+  },
+  "ParentsListResponse": {
+   "id": "ParentsListResponse",
+   "type": "object",
+   "description": "The response returned by a call to parents.List.",
+   "properties": {
+    "nextPageToken": {
+     "type": "string",
+     "description": "Next page token."
+    },
+    "parents": {
+     "type": "array",
+     "description": "The parent assets.",
+     "items": {
+      "$ref": "Parent"
+     }
+    }
+   }
+  },
+  "Permission": {
+   "id": "Permission",
+   "type": "object",
+   "properties": {
+    "discoverable": {
+     "type": "boolean",
+     "description": "True if asset is listed and is searchable by the public."
+    },
+    "emailAddress": {
+     "type": "string",
+     "description": "The email address of the user this permission refers to."
+    },
+    "id": {
+     "type": "string",
+     "description": "The ID of the permission. When making a mapsengine.permissions.batchInsert request, the id or emailAddress fields must be specified. If both id and emailAddress are provided they must be consistent."
+    },
+    "role": {
+     "type": "string",
+     "description": "The primary role for this user.",
+     "enum": [
+      "owner",
+      "reader",
+      "viewer",
+      "writer"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      "",
+      ""
+     ]
+    },
+    "type": {
+     "type": "string",
+     "description": "The account type. Allowed values are:",
+     "enum": [
+      "anyone",
+      "group",
+      "user"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      ""
+     ]
+    }
+   }
+  },
+  "PermissionsBatchInsertRequest": {
+   "id": "PermissionsBatchInsertRequest",
+   "type": "object",
+   "description": "The request sent to mapsengine.permissions.batchInsert.",
+   "properties": {
+    "permissions": {
+     "type": "array",
+     "description": "The permissions to be added.",
+     "items": {
+      "$ref": "Permission"
+     }
+    }
+   }
+  },
+  "PermissionsBatchInsertResponse": {
+   "id": "PermissionsBatchInsertResponse",
+   "type": "object",
+   "description": "The response returned by a call to mapsengine.permissions.batchInsert."
+  },
+  "PermissionsGetIdForEmailResponse": {
+   "id": "PermissionsGetIdForEmailResponse",
+   "type": "object",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "The permission ID."
+    }
+   }
+  },
+  "PermissionsListResponse": {
+   "id": "PermissionsListResponse",
+   "type": "object",
+   "properties": {
+    "permissions": {
+     "type": "array",
+     "description": "The set of permissions associated with this asset.",
+     "items": {
+      "$ref": "Permission"
+     }
+    }
+   }
+  },
+  "PointStyle": {
+   "id": "PointStyle",
+   "type": "object",
+   "description": "Style for points.",
+   "properties": {
+    "icon": {
+     "$ref": "IconStyle",
+     "description": "Icon for the point; if it isn't null, exactly one of 'name', 'id' or 'scaledShape' must be set.",
+     "annotations": {
+      "required": [
+       "mapsengine.layers.create",
+       "mapsengine.layers.patch"
+      ]
+     }
+    },
+    "label": {
+     "$ref": "LabelStyle",
+     "description": "Label style for the point."
+    }
+   }
+  },
+  "PolygonStyle": {
+   "id": "PolygonStyle",
+   "type": "object",
+   "description": "Style for polygons.",
+   "properties": {
+    "fill": {
+     "$ref": "Color",
+     "description": "Fill color of the polygon. If not provided, the polygon will be transparent and not visible if there is no border."
+    },
+    "stroke": {
+     "$ref": "Border",
+     "description": "Border of the polygon. 0 \u003c border.width \u003c= 10."
+    }
+   }
+  },
+  "ProcessResponse": {
+   "id": "ProcessResponse",
+   "type": "object",
+   "description": "The response returned by a call to any asset's Process method."
+  },
+  "Project": {
+   "id": "Project",
+   "type": "object",
+   "description": "A project groups a collection of resources.",
+   "properties": {
+    "id": {
+     "type": "string",
+     "description": "An ID used to refer to this project."
+    },
+    "name": {
+     "type": "string",
+     "description": "A user provided name for this project."
+    }
+   }
+  },
+  "ProjectsListResponse": {
+   "id": "ProjectsListResponse",
+   "type": "object",
+   "description": "The response returned by a call to projects.List.",
+   "properties": {
+    "projects": {
+     "type": "array",
+     "description": "Projects returned.",
+     "items": {
+      "$ref": "Project"
+     }
+    }
+   }
+  },
+  "PublishResponse": {
+   "id": "PublishResponse",
+   "type": "object",
+   "description": "The response returned by a call to any asset's Publish method."
+  },
+  "Raster": {
+   "id": "Raster",
+   "type": "object",
+   "description": "A geo-referenced raster.",
+   "properties": {
+    "acquisitionTime": {
+     "$ref": "AcquisitionTime",
+     "description": "The acquisition time of this Raster."
+    },
+    "attribution": {
+     "type": "string",
+     "description": "The name of the attribution to be used for this Raster."
+    },
+    "bbox": {
+     "type": "array",
+     "description": "A rectangular bounding box which contains all of the data in this Raster. The numbers represent latitudes and longitudes in decimal degrees.",
+     "items": {
+      "type": "number",
+      "format": "double"
+     }
+    },
+    "creationTime": {
+     "type": "string",
+     "description": "The creation time of this raster. The value is an RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z).",
+     "format": "date-time"
+    },
+    "description": {
+     "type": "string",
+     "description": "The description of this Raster, supplied by the author."
+    },
+    "draftAccessList": {
+     "type": "string",
+     "description": "Deprecated: The name of an access list of the Map Editor type. The user on whose behalf the request is being sent must be an editor on that access list. Read About access lists in the Google Maps Engine help center for more information."
+    },
+    "etag": {
+     "type": "string",
+     "description": "The ETag, used to refer to the current version of the asset."
+    },
+    "files": {
+     "type": "array",
+     "description": "The files associated with this Raster.",
+     "items": {
+      "$ref": "File"
+     },
+     "annotations": {
+      "required": [
+       "mapsengine.rasters.upload"
+      ]
+     }
+    },
+    "id": {
+     "type": "string",
+     "description": "A globally unique ID, used to refer to this Raster."
+    },
+    "lastModifiedTime": {
+     "type": "string",
+     "description": "The last modified time of this raster. The value is an RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z).",
+     "format": "date-time"
+    },
+    "maskType": {
+     "type": "string",
+     "description": "The mask processing type of this Raster.",
+     "default": "autoMask",
+     "enum": [
+      "alphaChannelMask",
+      "autoMask",
+      "imageMask",
+      "noMask"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      "",
+      ""
+     ]
+    },
+    "name": {
+     "type": "string",
+     "description": "The name of this Raster, supplied by the author.",
+     "annotations": {
+      "required": [
+       "mapsengine.rasters.upload"
+      ]
+     }
+    },
+    "processingStatus": {
+     "type": "string",
+     "description": "The processing status of this Raster.",
+     "enum": [
+      "complete",
+      "failed",
+      "notReady",
+      "processing",
+      "ready"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      "",
+      "",
+      ""
+     ]
+    },
+    "projectId": {
+     "type": "string",
+     "description": "The ID of the project that this Raster is in.",
+     "annotations": {
+      "required": [
+       "mapsengine.rasters.upload"
+      ]
+     }
+    },
+    "rasterType": {
+     "type": "string",
+     "description": "The type of this Raster. Always \"image\" today.",
+     "enum": [
+      "image"
+     ],
+     "enumDescriptions": [
+      ""
+     ],
+     "annotations": {
+      "required": [
+       "mapsengine.rasters.upload"
+      ]
+     }
+    },
+    "tags": {
+     "$ref": "Tags",
+     "description": "Tags of this Raster."
+    }
+   }
+  },
+  "RasterCollection": {
+   "id": "RasterCollection",
+   "type": "object",
+   "description": "A raster collection groups multiple Raster resources for inclusion in a Layer.",
+   "properties": {
+    "attribution": {
+     "type": "string",
+     "description": "The name of the attribution to be used for this RasterCollection."
+    },
+    "bbox": {
+     "type": "array",
+     "description": "A rectangular bounding box which contains all of the data in this RasterCollection. The numbers represent latitude and longitude in decimal degrees.",
+     "items": {
+      "type": "number",
+      "format": "double"
+     }
+    },
+    "creationTime": {
+     "type": "string",
+     "description": "The creation time of this RasterCollection. The value is an RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z).",
+     "format": "date-time"
+    },
+    "description": {
+     "type": "string",
+     "description": "The description of this RasterCollection, supplied by the author."
+    },
+    "draftAccessList": {
+     "type": "string",
+     "description": "Deprecated: The name of an access list of the Map Editor type. The user on whose behalf the request is being sent must be an editor on that access list. Read About access lists in the Google Maps Engine help center for more information."
+    },
+    "etag": {
+     "type": "string",
+     "description": "The ETag, used to refer to the current version of the asset."
+    },
+    "id": {
+     "type": "string",
+     "description": "A globally unique ID, used to refer to this RasterCollection."
+    },
+    "lastModifiedTime": {
+     "type": "string",
+     "description": "The last modified time of this RasterCollection. The value is an RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z).",
+     "format": "date-time"
+    },
+    "mosaic": {
+     "type": "boolean",
+     "description": "True if this RasterCollection is a mosaic.",
+     "annotations": {
+      "required": [
+       "mapsengine.rasterCollections.create"
+      ]
+     }
+    },
+    "name": {
+     "type": "string",
+     "description": "The name of this RasterCollection, supplied by the author.",
+     "annotations": {
+      "required": [
+       "mapsengine.rasterCollections.create"
+      ]
+     }
+    },
+    "processingStatus": {
+     "type": "string",
+     "description": "The processing status of this RasterCollection.",
+     "enum": [
+      "complete",
+      "failed",
+      "notReady",
+      "processing",
+      "ready"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      "",
+      "",
+      ""
+     ]
+    },
+    "projectId": {
+     "type": "string",
+     "description": "The ID of the project that this RasterCollection is in.",
+     "annotations": {
+      "required": [
+       "mapsengine.rasterCollections.create"
+      ]
+     }
+    },
+    "rasterType": {
+     "type": "string",
+     "description": "The type of rasters contained within this RasterCollection.",
+     "enum": [
+      "image"
+     ],
+     "enumDescriptions": [
+      ""
+     ],
+     "annotations": {
+      "required": [
+       "mapsengine.rasterCollections.create"
+      ]
+     }
+    },
+    "tags": {
+     "$ref": "Tags",
+     "description": "Tags of this RasterCollection."
+    }
+   }
+  },
+  "RasterCollectionsListResponse": {
+   "id": "RasterCollectionsListResponse",
+   "type": "object",
+   "description": "The response returned by a call to raster_collections.List.",
+   "properties": {
+    "nextPageToken": {
+     "type": "string",
+     "description": "Next page token.",
+     "format": "byte"
+    },
+    "rasterCollections": {
+     "type": "array",
+     "description": "Resources returned.",
+     "items": {
+      "$ref": "RasterCollection"
+     }
+    }
+   }
+  },
+  "RasterCollectionsRaster": {
+   "id": "RasterCollectionsRaster",
+   "type": "object",
+   "description": "A raster resource.",
+   "properties": {
+    "bbox": {
+     "type": "array",
+     "description": "A rectangular bounding box which contains all of the data in this Raster. The numbers represent latitudes and longitudes in decimal degrees.",
+     "items": {
+      "type": "number",
+      "format": "double"
+     }
+    },
+    "creationTime": {
+     "type": "string",
+     "description": "The creation time of this raster. The value is an RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z).",
+     "format": "date-time"
+    },
+    "description": {
+     "type": "string",
+     "description": "The description of this Raster, supplied by the author."
+    },
+    "id": {
+     "type": "string",
+     "description": "A globally unique ID, used to refer to this Raster."
+    },
+    "lastModifiedTime": {
+     "type": "string",
+     "description": "The last modified time of this raster. The value is an RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z).",
+     "format": "date-time"
+    },
+    "name": {
+     "type": "string",
+     "description": "The name of this Raster, supplied by the author."
+    },
+    "projectId": {
+     "type": "string",
+     "description": "The ID of the project that this Raster is in."
+    },
+    "rasterType": {
+     "type": "string",
+     "description": "The type of this Raster. Always \"image\" today.",
+     "default": "image"
+    },
+    "tags": {
+     "type": "array",
+     "description": "Tags of this Raster.",
+     "items": {
+      "type": "string"
+     }
+    }
+   }
+  },
+  "RasterCollectionsRasterBatchDeleteRequest": {
+   "id": "RasterCollectionsRasterBatchDeleteRequest",
+   "type": "object",
+   "description": "The request sent to rasterCollections.Rasters.BatchDelete.",
+   "properties": {
+    "ids": {
+     "type": "array",
+     "description": "An array of Raster asset IDs to be removed from this RasterCollection.",
+     "items": {
+      "type": "string"
+     }
+    }
+   }
+  },
+  "RasterCollectionsRastersBatchDeleteResponse": {
+   "id": "RasterCollectionsRastersBatchDeleteResponse",
+   "type": "object",
+   "description": "The response returned by a call to rasterCollections.rasters.batchDelete."
+  },
+  "RasterCollectionsRastersBatchInsertRequest": {
+   "id": "RasterCollectionsRastersBatchInsertRequest",
+   "type": "object",
+   "description": "The request sent to rasterCollections.Rasters.BatchInsert.",
+   "properties": {
+    "ids": {
+     "type": "array",
+     "description": "An array of Raster asset IDs to be added to this RasterCollection.",
+     "items": {
+      "type": "string"
+     }
+    }
+   }
+  },
+  "RasterCollectionsRastersBatchInsertResponse": {
+   "id": "RasterCollectionsRastersBatchInsertResponse",
+   "type": "object",
+   "description": "The response returned by a call to rasterCollections.rasters.batchInsert."
+  },
+  "RasterCollectionsRastersListResponse": {
+   "id": "RasterCollectionsRastersListResponse",
+   "type": "object",
+   "description": "The response returned by a call to rasterCollections.rasters.List.",
+   "properties": {
+    "nextPageToken": {
+     "type": "string",
+     "description": "Next page token."
+    },
+    "rasters": {
+     "type": "array",
+     "description": "Resources returned.",
+     "items": {
+      "$ref": "RasterCollectionsRaster"
+     }
+    }
+   }
+  },
+  "RastersListResponse": {
+   "id": "RastersListResponse",
+   "type": "object",
+   "description": "The response returned by a call to rasters.List.",
+   "properties": {
+    "nextPageToken": {
+     "type": "string",
+     "description": "Next page token."
+    },
+    "rasters": {
+     "type": "array",
+     "description": "Resources returned.",
+     "items": {
+      "$ref": "Raster"
+     }
+    }
+   }
+  },
+  "ScaledShape": {
+   "id": "ScaledShape",
+   "type": "object",
+   "description": "Parameters for styling points as scaled shapes.",
+   "properties": {
+    "border": {
+     "$ref": "Border",
+     "description": "Border color/width of the shape. If not specified the shape won't have a border."
+    },
+    "fill": {
+     "$ref": "Color",
+     "description": "The fill color of the shape. If not specified the shape will be transparent (although the borders may not be)."
+    },
+    "shape": {
+     "type": "string",
+     "description": "Name of the shape.",
+     "enum": [
+      "circle"
+     ],
+     "enumDescriptions": [
+      ""
+     ],
+     "annotations": {
+      "required": [
+       "mapsengine.layers.create",
+       "mapsengine.layers.patch"
+      ]
+     }
+    }
+   }
+  },
+  "ScalingFunction": {
+   "id": "ScalingFunction",
+   "type": "object",
+   "description": "Parameters for scaling scaled shapes.",
+   "properties": {
+    "column": {
+     "type": "string",
+     "description": "Name of the numeric column used to scale a shape.",
+     "annotations": {
+      "required": [
+       "mapsengine.layers.create",
+       "mapsengine.layers.patch"
+      ]
+     }
+    },
+    "scalingType": {
+     "type": "string",
+     "description": "The type of scaling function to use. Defaults to SQRT. Currently only linear and square root scaling are supported.",
+     "enum": [
+      "linear",
+      "sqrt"
+     ],
+     "enumDescriptions": [
+      "",
+      ""
+     ]
+    },
+    "sizeRange": {
+     "$ref": "SizeRange",
+     "description": "The range of shape sizes, in pixels. For circles, the size corresponds to the diameter.",
+     "annotations": {
+      "required": [
+       "mapsengine.layers.create",
+       "mapsengine.layers.patch"
+      ]
+     }
+    },
+    "valueRange": {
+     "$ref": "ValueRange",
+     "description": "The range of values to display across the size range.",
+     "annotations": {
+      "required": [
+       "mapsengine.layers.create",
+       "mapsengine.layers.patch"
+      ]
+     }
+    }
+   }
+  },
+  "Schema": {
+   "id": "Schema",
+   "type": "object",
+   "description": "A schema indicating the properties which may be associated with features within a Table, and the types of those properties.",
+   "properties": {
+    "columns": {
+     "type": "array",
+     "description": "An array of column objects. The first object in the array must be named geometry and be of type points, lineStrings, polygons, or mixedGeometry.",
+     "items": {
+      "$ref": "TableColumn"
+     },
+     "annotations": {
+      "required": [
+       "mapsengine.tables.create"
+      ]
+     }
+    },
+    "primaryGeometry": {
+     "type": "string",
+     "description": "The name of the column that contains a feature's geometry. This field can be omitted during table create; Google Maps Engine supports only a single geometry column, which must be named geometry and be the first object in the columns array."
+    },
+    "primaryKey": {
+     "type": "string",
+     "description": "The name of the column that contains the unique identifier of a Feature."
+    }
+   }
+  },
+  "SizeRange": {
+   "id": "SizeRange",
+   "type": "object",
+   "description": "Scaled shape size range in pixels. For circles, size corresponds to diameter.",
+   "properties": {
+    "max": {
+     "type": "number",
+     "description": "Maximum size, in pixels.",
+     "format": "double",
+     "annotations": {
+      "required": [
+       "mapsengine.layers.create",
+       "mapsengine.layers.patch"
+      ]
+     }
+    },
+    "min": {
+     "type": "number",
+     "description": "Minimum size, in pixels.",
+     "format": "double",
+     "annotations": {
+      "required": [
+       "mapsengine.layers.create",
+       "mapsengine.layers.patch"
+      ]
+     }
+    }
+   }
+  },
+  "Table": {
+   "id": "Table",
+   "type": "object",
+   "description": "A collection of geographic features, and associated metadata.",
+   "properties": {
+    "bbox": {
+     "type": "array",
+     "description": "A rectangular bounding box which contains all of the data in this table. The numbers represent latitude and longitude in decimal degrees.",
+     "items": {
+      "type": "number",
+      "format": "double"
+     }
+    },
+    "creationTime": {
+     "type": "string",
+     "description": "The creation time of this table. The value is an RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z).",
+     "format": "date-time"
+    },
+    "description": {
+     "type": "string",
+     "description": "The description of this table, supplied by the author."
+    },
+    "draftAccessList": {
+     "type": "string",
+     "description": "Deprecated: The name of an access list of the Map Editor type. The user on whose behalf the request is being sent must be an editor on that access list. Read About access lists in the Google Maps Engine help center for more information."
+    },
+    "etag": {
+     "type": "string",
+     "description": "The ETag, used to refer to the current version of the asset."
+    },
+    "files": {
+     "type": "array",
+     "description": "The files associated with this table.",
+     "items": {
+      "$ref": "File"
+     },
+     "annotations": {
+      "required": [
+       "mapsengine.tables.upload"
+      ]
+     }
+    },
+    "id": {
+     "type": "string",
+     "description": "A globally unique ID, used to refer to this table."
+    },
+    "lastModifiedTime": {
+     "type": "string",
+     "description": "The last modified time of this table. The value is an RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z).",
+     "format": "date-time"
+    },
+    "name": {
+     "type": "string",
+     "description": "The name of this table, supplied by the author.",
+     "annotations": {
+      "required": [
+       "mapsengine.tables.create",
+       "mapsengine.tables.upload"
+      ]
+     }
+    },
+    "processingStatus": {
+     "type": "string",
+     "description": "The processing status of this table.",
+     "enum": [
+      "complete",
+      "failed",
+      "notReady",
+      "processing",
+      "ready"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      "",
+      "",
+      ""
+     ]
+    },
+    "projectId": {
+     "type": "string",
+     "description": "The ID of the project to which the table belongs.",
+     "annotations": {
+      "required": [
+       "mapsengine.tables.create",
+       "mapsengine.tables.upload"
+      ]
+     }
+    },
+    "publishedAccessList": {
+     "type": "string",
+     "description": "Deprecated: The access list to whom view permissions are granted. The value must be the name of a Maps Engine access list of the Map Viewer type, and the user must be a viewer on that list. Read About access lists in the Google Maps Engine help center for more information."
+    },
+    "schema": {
+     "$ref": "Schema",
+     "description": "The schema for this table."
+    },
+    "sourceEncoding": {
+     "type": "string",
+     "description": "Encoding of the uploaded files. Valid values include UTF-8, CP1251, ISO 8859-1, and Shift_JIS.",
+     "default": "UTF-8"
+    },
+    "tags": {
+     "$ref": "Tags",
+     "description": "An array of text strings, with each string representing a tag. More information about tags can be found in the Tagging data article of the Maps Engine help center."
+    }
+   }
+  },
+  "TableColumn": {
+   "id": "TableColumn",
+   "type": "object",
+   "properties": {
+    "name": {
+     "type": "string",
+     "description": "The column name."
+    },
+    "type": {
+     "type": "string",
+     "description": "The type of data stored in this column.",
+     "enum": [
+      "datetime",
+      "double",
+      "integer",
+      "lineStrings",
+      "mixedGeometry",
+      "points",
+      "polygons",
+      "string"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      "",
+      "",
+      "",
+      "",
+      "",
+      ""
+     ]
+    }
+   }
+  },
+  "TablesListResponse": {
+   "id": "TablesListResponse",
+   "type": "object",
+   "description": "The response returned by a call to tables.List.",
+   "properties": {
+    "nextPageToken": {
+     "type": "string",
+     "description": "Next page token.",
+     "format": "byte"
+    },
+    "tables": {
+     "type": "array",
+     "description": "Resources returned.",
+     "items": {
+      "$ref": "Table"
+     }
+    }
+   }
+  },
+  "Tags": {
+   "id": "Tags",
+   "type": "array",
+   "items": {
+    "type": "string"
+   }
+  },
+  "ValueRange": {
+   "id": "ValueRange",
+   "type": "object",
+   "description": "Range of values used for scaling shapes. The min/max values will be drawn as shapes with the min/max size.",
+   "properties": {
+    "max": {
+     "type": "number",
+     "description": "Maximum value.",
+     "format": "double",
+     "annotations": {
+      "required": [
+       "mapsengine.layers.create",
+       "mapsengine.layers.patch"
+      ]
+     }
+    },
+    "min": {
+     "type": "number",
+     "description": "Minimum value.",
+     "format": "double",
+     "annotations": {
+      "required": [
+       "mapsengine.layers.create",
+       "mapsengine.layers.patch"
+      ]
+     }
+    }
+   }
+  },
+  "VectorStyle": {
+   "id": "VectorStyle",
+   "type": "object",
+   "description": "A vector style contains styling information for vector layer.",
+   "properties": {
+    "displayRules": {
+     "type": "array",
+     "items": {
+      "$ref": "DisplayRule"
+     }
+    },
+    "featureInfo": {
+     "$ref": "FeatureInfo",
+     "description": "Individual feature info, this is called Info Window in Maps Engine UI. If not provided, a default template with all attributes will be generated."
+    },
+    "type": {
+     "type": "string",
+     "description": "The type of the vector style. Currently, only displayRule is supported.",
+     "enum": [
+      "displayRule"
+     ],
+     "enumDescriptions": [
+      ""
+     ],
+     "annotations": {
+      "required": [
+       "mapsengine.layers.create",
+       "mapsengine.layers.patch"
+      ]
+     }
+    }
+   }
+  },
+  "ZoomLevels": {
+   "id": "ZoomLevels",
+   "type": "object",
+   "description": "Zoom level range. Zoom levels are restricted between 0 and 24, inclusive.",
+   "properties": {
+    "max": {
+     "type": "integer",
+     "description": "Maximum zoom level.",
+     "format": "int32",
+     "annotations": {
+      "required": [
+       "mapsengine.layers.create",
+       "mapsengine.layers.patch"
+      ]
+     }
+    },
+    "min": {
+     "type": "integer",
+     "description": "Minimum zoom level.",
+     "format": "int32",
+     "annotations": {
+      "required": [
+       "mapsengine.layers.create",
+       "mapsengine.layers.patch"
+      ]
+     }
+    }
+   }
+  }
+ },
+ "resources": {
+  "assets": {
+   "methods": {
+    "get": {
+     "id": "mapsengine.assets.get",
+     "path": "assets/{id}",
+     "httpMethod": "GET",
+     "description": "Return metadata for a particular asset.",
+     "parameters": {
+      "id": {
+       "type": "string",
+       "description": "The ID of the asset.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "id"
+     ],
+     "response": {
+      "$ref": "Asset"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine",
+      "https://www.googleapis.com/auth/mapsengine.readonly"
+     ]
+    },
+    "list": {
+     "id": "mapsengine.assets.list",
+     "path": "assets",
+     "httpMethod": "GET",
+     "description": "Return all assets readable by the current user.",
+     "parameters": {
+      "bbox": {
+       "type": "string",
+       "description": "A bounding box, expressed as \"west,south,east,north\". If set, only assets which intersect this bounding box will be returned.",
+       "location": "query"
+      },
+      "createdAfter": {
+       "type": "string",
+       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or after this time.",
+       "format": "date-time",
+       "location": "query"
+      },
+      "createdBefore": {
+       "type": "string",
+       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or before this time.",
+       "format": "date-time",
+       "location": "query"
+      },
+      "creatorEmail": {
+       "type": "string",
+       "description": "An email address representing a user. Returned assets that have been created by the user associated with the provided email address.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "The maximum number of items to include in a single response page. The maximum supported value is 100.",
+       "format": "uint32",
+       "location": "query"
+      },
+      "modifiedAfter": {
+       "type": "string",
+       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or after this time.",
+       "format": "date-time",
+       "location": "query"
+      },
+      "modifiedBefore": {
+       "type": "string",
+       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or before this time.",
+       "format": "date-time",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.",
+       "location": "query"
+      },
+      "projectId": {
+       "type": "string",
+       "description": "The ID of a Maps Engine project, used to filter the response. To list all available projects with their IDs, send a Projects: list request. You can also find your project ID as the value of the DashboardPlace:cid URL parameter when signed in to mapsengine.google.com.",
+       "location": "query"
+      },
+      "role": {
+       "type": "string",
+       "description": "The role parameter indicates that the response should only contain assets where the current user has the specified level of access.",
+       "enum": [
+        "owner",
+        "reader",
+        "writer"
+       ],
+       "enumDescriptions": [
+        "The user can read, write and administer the asset.",
+        "The user can read the asset.",
+        "The user can read and write the asset."
+       ],
+       "location": "query"
+      },
+      "tags": {
+       "type": "string",
+       "description": "A comma separated list of tags. Returned assets will contain all the tags from the list.",
+       "location": "query"
+      },
+      "type": {
+       "type": "string",
+       "description": "An asset type restriction. If set, only resources of this type will be returned.",
+       "enum": [
+        "layer",
+        "map",
+        "rasterCollection",
+        "table"
+       ],
+       "enumDescriptions": [
+        "Return layers.",
+        "Return maps.",
+        "Return raster collections.",
+        "Return tables."
+       ],
+       "location": "query"
+      }
+     },
+     "response": {
+      "$ref": "AssetsListResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine",
+      "https://www.googleapis.com/auth/mapsengine.readonly"
+     ]
+    }
+   },
+   "resources": {
+    "parents": {
+     "methods": {
+      "list": {
+       "id": "mapsengine.assets.parents.list",
+       "path": "assets/{id}/parents",
+       "httpMethod": "GET",
+       "description": "Return all parent ids of the specified asset.",
+       "parameters": {
+        "id": {
+         "type": "string",
+         "description": "The ID of the asset whose parents will be listed.",
+         "required": true,
+         "location": "path"
+        },
+        "maxResults": {
+         "type": "integer",
+         "description": "The maximum number of items to include in a single response page. The maximum supported value is 50.",
+         "format": "uint32",
+         "location": "query"
+        },
+        "pageToken": {
+         "type": "string",
+         "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.",
+         "location": "query"
+        }
+       },
+       "parameterOrder": [
+        "id"
+       ],
+       "response": {
+        "$ref": "ParentsListResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/mapsengine",
+        "https://www.googleapis.com/auth/mapsengine.readonly"
+       ]
+      }
+     }
+    },
+    "permissions": {
+     "methods": {
+      "getIdForEmail": {
+       "id": "mapsengine.assets.permissions.getIdForEmail",
+       "path": "permissionids/{email}",
+       "httpMethod": "GET",
+       "description": "Return permission ID given an email address.",
+       "parameters": {
+        "email": {
+         "type": "string",
+         "description": "The email address to be translated into permission ID.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "email"
+       ],
+       "response": {
+        "$ref": "PermissionsGetIdForEmailResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/mapsengine",
+        "https://www.googleapis.com/auth/mapsengine.readonly"
+       ]
+      },
+      "list": {
+       "id": "mapsengine.assets.permissions.list",
+       "path": "assets/{id}/permissions",
+       "httpMethod": "GET",
+       "description": "Return all of the permissions for the specified asset.",
+       "parameters": {
+        "id": {
+         "type": "string",
+         "description": "The ID of the asset whose permissions will be listed.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "id"
+       ],
+       "response": {
+        "$ref": "PermissionsListResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/mapsengine",
+        "https://www.googleapis.com/auth/mapsengine.readonly"
+       ]
+      }
+     }
+    }
+   }
+  },
+  "layers": {
+   "methods": {
+    "cancelProcessing": {
+     "id": "mapsengine.layers.cancelProcessing",
+     "path": "layers/{id}/cancelProcessing",
+     "httpMethod": "POST",
+     "description": "Cancel processing on a layer asset.",
+     "parameters": {
+      "id": {
+       "type": "string",
+       "description": "The ID of the layer.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "id"
+     ],
+     "response": {
+      "$ref": "ProcessResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine"
+     ]
+    },
+    "create": {
+     "id": "mapsengine.layers.create",
+     "path": "layers",
+     "httpMethod": "POST",
+     "description": "Create a layer asset.",
+     "parameters": {
+      "process": {
+       "type": "boolean",
+       "description": "Whether to queue the created layer for processing.",
+       "location": "query"
+      }
+     },
+     "request": {
+      "$ref": "Layer"
+     },
+     "response": {
+      "$ref": "Layer"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine"
+     ]
+    },
+    "delete": {
+     "id": "mapsengine.layers.delete",
+     "path": "layers/{id}",
+     "httpMethod": "DELETE",
+     "description": "Delete a layer.",
+     "parameters": {
+      "id": {
+       "type": "string",
+       "description": "The ID of the layer. Only the layer creator or project owner are permitted to delete. If the layer is published, or included in a map, the request will fail. Unpublish the layer, and remove it from all maps prior to deleting.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "id"
+     ],
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine"
+     ]
+    },
+    "get": {
+     "id": "mapsengine.layers.get",
+     "path": "layers/{id}",
+     "httpMethod": "GET",
+     "description": "Return metadata for a particular layer.",
+     "parameters": {
+      "id": {
+       "type": "string",
+       "description": "The ID of the layer.",
+       "required": true,
+       "location": "path"
+      },
+      "version": {
+       "type": "string",
+       "enum": [
+        "draft",
+        "published"
+       ],
+       "enumDescriptions": [
+        "The draft version.",
+        "The published version."
+       ],
+       "location": "query"
+      }
+     },
+     "parameterOrder": [
+      "id"
+     ],
+     "response": {
+      "$ref": "Layer"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine",
+      "https://www.googleapis.com/auth/mapsengine.readonly"
+     ]
+    },
+    "list": {
+     "id": "mapsengine.layers.list",
+     "path": "layers",
+     "httpMethod": "GET",
+     "description": "Return all layers readable by the current user.",
+     "parameters": {
+      "bbox": {
+       "type": "string",
+       "description": "A bounding box, expressed as \"west,south,east,north\". If set, only assets which intersect this bounding box will be returned.",
+       "location": "query"
+      },
+      "createdAfter": {
+       "type": "string",
+       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or after this time.",
+       "format": "date-time",
+       "location": "query"
+      },
+      "createdBefore": {
+       "type": "string",
+       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or before this time.",
+       "format": "date-time",
+       "location": "query"
+      },
+      "creatorEmail": {
+       "type": "string",
+       "description": "An email address representing a user. Returned assets that have been created by the user associated with the provided email address.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "The maximum number of items to include in a single response page. The maximum supported value is 100.",
+       "format": "uint32",
+       "location": "query"
+      },
+      "modifiedAfter": {
+       "type": "string",
+       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or after this time.",
+       "format": "date-time",
+       "location": "query"
+      },
+      "modifiedBefore": {
+       "type": "string",
+       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or before this time.",
+       "format": "date-time",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.",
+       "location": "query"
+      },
+      "projectId": {
+       "type": "string",
+       "description": "The ID of a Maps Engine project, used to filter the response. To list all available projects with their IDs, send a Projects: list request. You can also find your project ID as the value of the DashboardPlace:cid URL parameter when signed in to mapsengine.google.com.",
+       "location": "query"
+      },
+      "role": {
+       "type": "string",
+       "description": "The role parameter indicates that the response should only contain assets where the current user has the specified level of access.",
+       "enum": [
+        "owner",
+        "reader",
+        "writer"
+       ],
+       "enumDescriptions": [
+        "The user can read, write and administer the asset.",
+        "The user can read the asset.",
+        "The user can read and write the asset."
+       ],
+       "location": "query"
+      },
+      "tags": {
+       "type": "string",
+       "description": "A comma separated list of tags. Returned assets will contain all the tags from the list.",
+       "location": "query"
+      }
+     },
+     "response": {
+      "$ref": "LayersListResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine",
+      "https://www.googleapis.com/auth/mapsengine.readonly"
+     ]
+    },
+    "patch": {
+     "id": "mapsengine.layers.patch",
+     "path": "layers/{id}",
+     "httpMethod": "PATCH",
+     "description": "Mutate a layer asset.",
+     "parameters": {
+      "id": {
+       "type": "string",
+       "description": "The ID of the layer.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "id"
+     ],
+     "request": {
+      "$ref": "Layer"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine"
+     ]
+    },
+    "process": {
+     "id": "mapsengine.layers.process",
+     "path": "layers/{id}/process",
+     "httpMethod": "POST",
+     "description": "Process a layer asset.",
+     "parameters": {
+      "id": {
+       "type": "string",
+       "description": "The ID of the layer.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "id"
+     ],
+     "response": {
+      "$ref": "ProcessResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine"
+     ]
+    },
+    "publish": {
+     "id": "mapsengine.layers.publish",
+     "path": "layers/{id}/publish",
+     "httpMethod": "POST",
+     "description": "Publish a layer asset.",
+     "parameters": {
+      "id": {
+       "type": "string",
+       "description": "The ID of the layer.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "id"
+     ],
+     "response": {
+      "$ref": "PublishResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine"
+     ]
+    },
+    "unpublish": {
+     "id": "mapsengine.layers.unpublish",
+     "path": "layers/{id}/unpublish",
+     "httpMethod": "POST",
+     "description": "Unpublish a layer asset.",
+     "parameters": {
+      "id": {
+       "type": "string",
+       "description": "The ID of the layer.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "id"
+     ],
+     "response": {
+      "$ref": "PublishResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine"
+     ]
+    }
+   },
+   "resources": {
+    "parents": {
+     "methods": {
+      "list": {
+       "id": "mapsengine.layers.parents.list",
+       "path": "layers/{id}/parents",
+       "httpMethod": "GET",
+       "description": "Return all parent ids of the specified layer.",
+       "parameters": {
+        "id": {
+         "type": "string",
+         "description": "The ID of the layer whose parents will be listed.",
+         "required": true,
+         "location": "path"
+        },
+        "maxResults": {
+         "type": "integer",
+         "description": "The maximum number of items to include in a single response page. The maximum supported value is 50.",
+         "format": "uint32",
+         "location": "query"
+        },
+        "pageToken": {
+         "type": "string",
+         "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.",
+         "location": "query"
+        }
+       },
+       "parameterOrder": [
+        "id"
+       ],
+       "response": {
+        "$ref": "ParentsListResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/mapsengine",
+        "https://www.googleapis.com/auth/mapsengine.readonly"
+       ]
+      }
+     }
+    },
+    "permissions": {
+     "methods": {
+      "batchInsert": {
+       "id": "mapsengine.layers.permissions.batchInsert",
+       "path": "layers/{id}/permissions/batchInsert",
+       "httpMethod": "POST",
+       "description": "Add permission entries to an already existing asset.\n\nAn asset can hold up to 20 different permission entries. Each batchInsert request is atomic.",
+       "parameters": {
+        "id": {
+         "type": "string",
+         "description": "The ID of the asset to which permissions will be added.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "id"
+       ],
+       "request": {
+        "$ref": "PermissionsBatchInsertRequest"
+       },
+       "response": {
+        "$ref": "PermissionsBatchInsertResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/mapsengine"
+       ]
+      },
+      "list": {
+       "id": "mapsengine.layers.permissions.list",
+       "path": "layers/{id}/permissions",
+       "httpMethod": "GET",
+       "description": "Return all of the permissions for the specified asset.",
+       "parameters": {
+        "id": {
+         "type": "string",
+         "description": "The ID of the asset whose permissions will be listed.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "id"
+       ],
+       "response": {
+        "$ref": "PermissionsListResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/mapsengine",
+        "https://www.googleapis.com/auth/mapsengine.readonly"
+       ]
+      }
+     }
+    }
+   }
+  },
+  "maps": {
+   "methods": {
+    "create": {
+     "id": "mapsengine.maps.create",
+     "path": "maps",
+     "httpMethod": "POST",
+     "description": "Create a map asset.",
+     "request": {
+      "$ref": "Map"
+     },
+     "response": {
+      "$ref": "Map"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine"
+     ]
+    },
+    "delete": {
+     "id": "mapsengine.maps.delete",
+     "path": "maps/{id}",
+     "httpMethod": "DELETE",
+     "description": "Delete a map.",
+     "parameters": {
+      "id": {
+       "type": "string",
+       "description": "The ID of the map. Only the map creator or project owner are permitted to delete. If the map is published the request will fail. Unpublish the map prior to deleting.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "id"
+     ],
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine"
+     ]
+    },
+    "get": {
+     "id": "mapsengine.maps.get",
+     "path": "maps/{id}",
+     "httpMethod": "GET",
+     "description": "Return metadata for a particular map.",
+     "parameters": {
+      "id": {
+       "type": "string",
+       "description": "The ID of the map.",
+       "required": true,
+       "location": "path"
+      },
+      "version": {
+       "type": "string",
+       "enum": [
+        "draft",
+        "published"
+       ],
+       "enumDescriptions": [
+        "The draft version.",
+        "The published version."
+       ],
+       "location": "query"
+      }
+     },
+     "parameterOrder": [
+      "id"
+     ],
+     "response": {
+      "$ref": "Map"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine",
+      "https://www.googleapis.com/auth/mapsengine.readonly"
+     ]
+    },
+    "list": {
+     "id": "mapsengine.maps.list",
+     "path": "maps",
+     "httpMethod": "GET",
+     "description": "Return all maps readable by the current user.",
+     "parameters": {
+      "bbox": {
+       "type": "string",
+       "description": "A bounding box, expressed as \"west,south,east,north\". If set, only assets which intersect this bounding box will be returned.",
+       "location": "query"
+      },
+      "createdAfter": {
+       "type": "string",
+       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or after this time.",
+       "format": "date-time",
+       "location": "query"
+      },
+      "createdBefore": {
+       "type": "string",
+       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or before this time.",
+       "format": "date-time",
+       "location": "query"
+      },
+      "creatorEmail": {
+       "type": "string",
+       "description": "An email address representing a user. Returned assets that have been created by the user associated with the provided email address.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "The maximum number of items to include in a single response page. The maximum supported value is 100.",
+       "format": "uint32",
+       "location": "query"
+      },
+      "modifiedAfter": {
+       "type": "string",
+       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or after this time.",
+       "format": "date-time",
+       "location": "query"
+      },
+      "modifiedBefore": {
+       "type": "string",
+       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or before this time.",
+       "format": "date-time",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.",
+       "location": "query"
+      },
+      "projectId": {
+       "type": "string",
+       "description": "The ID of a Maps Engine project, used to filter the response. To list all available projects with their IDs, send a Projects: list request. You can also find your project ID as the value of the DashboardPlace:cid URL parameter when signed in to mapsengine.google.com.",
+       "location": "query"
+      },
+      "role": {
+       "type": "string",
+       "description": "The role parameter indicates that the response should only contain assets where the current user has the specified level of access.",
+       "enum": [
+        "owner",
+        "reader",
+        "writer"
+       ],
+       "enumDescriptions": [
+        "The user can read, write and administer the asset.",
+        "The user can read the asset.",
+        "The user can read and write the asset."
+       ],
+       "location": "query"
+      },
+      "tags": {
+       "type": "string",
+       "description": "A comma separated list of tags. Returned assets will contain all the tags from the list.",
+       "location": "query"
+      },
+      "version": {
+       "type": "string",
+       "enum": [
+        "draft",
+        "published"
+       ],
+       "enumDescriptions": [
+        "The draft version.",
+        "The published version."
+       ],
+       "location": "query"
+      }
+     },
+     "response": {
+      "$ref": "MapsListResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine",
+      "https://www.googleapis.com/auth/mapsengine.readonly"
+     ]
+    },
+    "patch": {
+     "id": "mapsengine.maps.patch",
+     "path": "maps/{id}",
+     "httpMethod": "PATCH",
+     "description": "Mutate a map asset.",
+     "parameters": {
+      "id": {
+       "type": "string",
+       "description": "The ID of the map.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "id"
+     ],
+     "request": {
+      "$ref": "Map"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine"
+     ]
+    },
+    "publish": {
+     "id": "mapsengine.maps.publish",
+     "path": "maps/{id}/publish",
+     "httpMethod": "POST",
+     "description": "Publish a map asset.",
+     "parameters": {
+      "id": {
+       "type": "string",
+       "description": "The ID of the map.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "id"
+     ],
+     "response": {
+      "$ref": "PublishResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine"
+     ]
+    },
+    "unpublish": {
+     "id": "mapsengine.maps.unpublish",
+     "path": "maps/{id}/unpublish",
+     "httpMethod": "POST",
+     "description": "Unpublish a map asset.",
+     "parameters": {
+      "id": {
+       "type": "string",
+       "description": "The ID of the map.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "id"
+     ],
+     "response": {
+      "$ref": "PublishResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine"
+     ]
+    }
+   },
+   "resources": {
+    "permissions": {
+     "methods": {
+      "batchInsert": {
+       "id": "mapsengine.maps.permissions.batchInsert",
+       "path": "maps/{id}/permissions/batchInsert",
+       "httpMethod": "POST",
+       "description": "Add permission entries to an already existing asset.\n\nAn asset can hold up to 20 different permission entries. Each batchInsert request is atomic.",
+       "parameters": {
+        "id": {
+         "type": "string",
+         "description": "The ID of the asset to which permissions will be added.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "id"
+       ],
+       "request": {
+        "$ref": "PermissionsBatchInsertRequest"
+       },
+       "response": {
+        "$ref": "PermissionsBatchInsertResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/mapsengine"
+       ]
+      },
+      "list": {
+       "id": "mapsengine.maps.permissions.list",
+       "path": "maps/{id}/permissions",
+       "httpMethod": "GET",
+       "description": "Return all of the permissions for the specified asset.",
+       "parameters": {
+        "id": {
+         "type": "string",
+         "description": "The ID of the asset whose permissions will be listed.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "id"
+       ],
+       "response": {
+        "$ref": "PermissionsListResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/mapsengine",
+        "https://www.googleapis.com/auth/mapsengine.readonly"
+       ]
+      }
+     }
+    }
+   }
+  },
+  "projects": {
+   "methods": {
+    "list": {
+     "id": "mapsengine.projects.list",
+     "path": "projects",
+     "httpMethod": "GET",
+     "description": "Return all projects readable by the current user.",
+     "response": {
+      "$ref": "ProjectsListResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine",
+      "https://www.googleapis.com/auth/mapsengine.readonly"
+     ]
+    }
+   },
+   "resources": {
+    "icons": {
+     "methods": {
+      "create": {
+       "id": "mapsengine.projects.icons.create",
+       "path": "projects/{projectId}/icons",
+       "httpMethod": "POST",
+       "description": "Create an icon.",
+       "parameters": {
+        "projectId": {
+         "type": "string",
+         "description": "The ID of the project.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "projectId"
+       ],
+       "request": {
+        "$ref": "Icon"
+       },
+       "response": {
+        "$ref": "Icon"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/mapsengine"
+       ],
+       "supportsMediaUpload": true,
+       "mediaUpload": {
+        "accept": [
+         "*/*"
+        ],
+        "maxSize": "100KB",
+        "protocols": {
+         "simple": {
+          "multipart": true,
+          "path": "/upload/mapsengine/exp2/projects/{projectId}/icons"
+         },
+         "resumable": {
+          "multipart": true,
+          "path": "/resumable/upload/mapsengine/exp2/projects/{projectId}/icons"
+         }
+        }
+       }
+      },
+      "get": {
+       "id": "mapsengine.projects.icons.get",
+       "path": "projects/{projectId}/icons/{id}",
+       "httpMethod": "GET",
+       "description": "Return metadata for a specific icon",
+       "parameters": {
+        "id": {
+         "type": "string",
+         "description": "The ID of the icon.",
+         "required": true,
+         "location": "path"
+        },
+        "projectId": {
+         "type": "string",
+         "description": "The ID of the project.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "projectId",
+        "id"
+       ],
+       "response": {
+        "$ref": "Icon"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/mapsengine",
+        "https://www.googleapis.com/auth/mapsengine.readonly"
+       ],
+       "supportsMediaDownload": true
+      },
+      "list": {
+       "id": "mapsengine.projects.icons.list",
+       "path": "projects/{projectId}/icons",
+       "httpMethod": "GET",
+       "description": "Return all icons in the current project",
+       "parameters": {
+        "maxResults": {
+         "type": "integer",
+         "description": "The maximum number of items to include in a single response page. The maximum supported value is 50.",
+         "format": "uint32",
+         "location": "query"
+        },
+        "pageToken": {
+         "type": "string",
+         "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.",
+         "location": "query"
+        },
+        "projectId": {
+         "type": "string",
+         "description": "The ID of the project.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "projectId"
+       ],
+       "response": {
+        "$ref": "IconsListResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/mapsengine",
+        "https://www.googleapis.com/auth/mapsengine.readonly"
+       ]
+      }
+     }
+    }
+   }
+  },
+  "rasterCollections": {
+   "methods": {
+    "cancelProcessing": {
+     "id": "mapsengine.rasterCollections.cancelProcessing",
+     "path": "rasterCollections/{id}/cancelProcessing",
+     "httpMethod": "POST",
+     "description": "Cancel processing on a raster collection asset.",
+     "parameters": {
+      "id": {
+       "type": "string",
+       "description": "The ID of the raster collection.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "id"
+     ],
+     "response": {
+      "$ref": "ProcessResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine"
+     ]
+    },
+    "create": {
+     "id": "mapsengine.rasterCollections.create",
+     "path": "rasterCollections",
+     "httpMethod": "POST",
+     "description": "Create a raster collection asset.",
+     "request": {
+      "$ref": "RasterCollection"
+     },
+     "response": {
+      "$ref": "RasterCollection"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine"
+     ]
+    },
+    "delete": {
+     "id": "mapsengine.rasterCollections.delete",
+     "path": "rasterCollections/{id}",
+     "httpMethod": "DELETE",
+     "description": "Delete a raster collection.",
+     "parameters": {
+      "id": {
+       "type": "string",
+       "description": "The ID of the raster collection. Only the raster collection creator or project owner are permitted to delete. If the rastor collection is included in a layer, the request will fail. Remove the raster collection from all layers prior to deleting.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "id"
+     ],
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine"
+     ]
+    },
+    "get": {
+     "id": "mapsengine.rasterCollections.get",
+     "path": "rasterCollections/{id}",
+     "httpMethod": "GET",
+     "description": "Return metadata for a particular raster collection.",
+     "parameters": {
+      "id": {
+       "type": "string",
+       "description": "The ID of the raster collection.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "id"
+     ],
+     "response": {
+      "$ref": "RasterCollection"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine",
+      "https://www.googleapis.com/auth/mapsengine.readonly"
+     ]
+    },
+    "list": {
+     "id": "mapsengine.rasterCollections.list",
+     "path": "rasterCollections",
+     "httpMethod": "GET",
+     "description": "Return all raster collections readable by the current user.",
+     "parameters": {
+      "bbox": {
+       "type": "string",
+       "description": "A bounding box, expressed as \"west,south,east,north\". If set, only assets which intersect this bounding box will be returned.",
+       "location": "query"
+      },
+      "createdAfter": {
+       "type": "string",
+       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or after this time.",
+       "format": "date-time",
+       "location": "query"
+      },
+      "createdBefore": {
+       "type": "string",
+       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or before this time.",
+       "format": "date-time",
+       "location": "query"
+      },
+      "creatorEmail": {
+       "type": "string",
+       "description": "An email address representing a user. Returned assets that have been created by the user associated with the provided email address.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "The maximum number of items to include in a single response page. The maximum supported value is 100.",
+       "format": "uint32",
+       "location": "query"
+      },
+      "modifiedAfter": {
+       "type": "string",
+       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or after this time.",
+       "format": "date-time",
+       "location": "query"
+      },
+      "modifiedBefore": {
+       "type": "string",
+       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or before this time.",
+       "format": "date-time",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.",
+       "location": "query"
+      },
+      "projectId": {
+       "type": "string",
+       "description": "The ID of a Maps Engine project, used to filter the response. To list all available projects with their IDs, send a Projects: list request. You can also find your project ID as the value of the DashboardPlace:cid URL parameter when signed in to mapsengine.google.com.",
+       "location": "query"
+      },
+      "role": {
+       "type": "string",
+       "description": "The role parameter indicates that the response should only contain assets where the current user has the specified level of access.",
+       "enum": [
+        "owner",
+        "reader",
+        "writer"
+       ],
+       "enumDescriptions": [
+        "The user can read, write and administer the asset.",
+        "The user can read the asset.",
+        "The user can read and write the asset."
+       ],
+       "location": "query"
+      },
+      "tags": {
+       "type": "string",
+       "description": "A comma separated list of tags. Returned assets will contain all the tags from the list.",
+       "location": "query"
+      }
+     },
+     "response": {
+      "$ref": "RasterCollectionsListResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine",
+      "https://www.googleapis.com/auth/mapsengine.readonly"
+     ]
+    },
+    "patch": {
+     "id": "mapsengine.rasterCollections.patch",
+     "path": "rasterCollections/{id}",
+     "httpMethod": "PATCH",
+     "description": "Mutate a raster collection asset.",
+     "parameters": {
+      "id": {
+       "type": "string",
+       "description": "The ID of the raster collection.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "id"
+     ],
+     "request": {
+      "$ref": "RasterCollection"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine"
+     ]
+    },
+    "process": {
+     "id": "mapsengine.rasterCollections.process",
+     "path": "rasterCollections/{id}/process",
+     "httpMethod": "POST",
+     "description": "Process a raster collection asset.",
+     "parameters": {
+      "id": {
+       "type": "string",
+       "description": "The ID of the raster collection.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "id"
+     ],
+     "response": {
+      "$ref": "ProcessResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine"
+     ]
+    }
+   },
+   "resources": {
+    "parents": {
+     "methods": {
+      "list": {
+       "id": "mapsengine.rasterCollections.parents.list",
+       "path": "rasterCollections/{id}/parents",
+       "httpMethod": "GET",
+       "description": "Return all parent ids of the specified raster collection.",
+       "parameters": {
+        "id": {
+         "type": "string",
+         "description": "The ID of the raster collection whose parents will be listed.",
+         "required": true,
+         "location": "path"
+        },
+        "maxResults": {
+         "type": "integer",
+         "description": "The maximum number of items to include in a single response page. The maximum supported value is 50.",
+         "format": "uint32",
+         "location": "query"
+        },
+        "pageToken": {
+         "type": "string",
+         "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.",
+         "location": "query"
+        }
+       },
+       "parameterOrder": [
+        "id"
+       ],
+       "response": {
+        "$ref": "ParentsListResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/mapsengine",
+        "https://www.googleapis.com/auth/mapsengine.readonly"
+       ]
+      }
+     }
+    },
+    "permissions": {
+     "methods": {
+      "batchInsert": {
+       "id": "mapsengine.rasterCollections.permissions.batchInsert",
+       "path": "rasterCollections/{id}/permissions/batchInsert",
+       "httpMethod": "POST",
+       "description": "Add permission entries to an already existing asset.\n\nAn asset can hold up to 20 different permission entries. Each batchInsert request is atomic.",
+       "parameters": {
+        "id": {
+         "type": "string",
+         "description": "The ID of the asset to which permissions will be added.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "id"
+       ],
+       "request": {
+        "$ref": "PermissionsBatchInsertRequest"
+       },
+       "response": {
+        "$ref": "PermissionsBatchInsertResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/mapsengine"
+       ]
+      },
+      "list": {
+       "id": "mapsengine.rasterCollections.permissions.list",
+       "path": "rasterCollections/{id}/permissions",
+       "httpMethod": "GET",
+       "description": "Return all of the permissions for the specified asset.",
+       "parameters": {
+        "id": {
+         "type": "string",
+         "description": "The ID of the asset whose permissions will be listed.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "id"
+       ],
+       "response": {
+        "$ref": "PermissionsListResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/mapsengine",
+        "https://www.googleapis.com/auth/mapsengine.readonly"
+       ]
+      }
+     }
+    },
+    "rasters": {
+     "methods": {
+      "batchDelete": {
+       "id": "mapsengine.rasterCollections.rasters.batchDelete",
+       "path": "rasterCollections/{id}/rasters/batchDelete",
+       "httpMethod": "POST",
+       "description": "Remove rasters from an existing raster collection.\n\nUp to 50 rasters can be included in a single batchDelete request. Each batchDelete request is atomic.",
+       "parameters": {
+        "id": {
+         "type": "string",
+         "description": "The ID of the raster collection to which these rasters belong.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "id"
+       ],
+       "request": {
+        "$ref": "RasterCollectionsRasterBatchDeleteRequest"
+       },
+       "response": {
+        "$ref": "RasterCollectionsRastersBatchDeleteResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/mapsengine"
+       ]
+      },
+      "batchInsert": {
+       "id": "mapsengine.rasterCollections.rasters.batchInsert",
+       "path": "rasterCollections/{id}/rasters/batchInsert",
+       "httpMethod": "POST",
+       "description": "Add rasters to an existing raster collection. Rasters must be successfully processed in order to be added to a raster collection.\n\nUp to 50 rasters can be included in a single batchInsert request. Each batchInsert request is atomic.",
+       "parameters": {
+        "id": {
+         "type": "string",
+         "description": "The ID of the raster collection to which these rasters belong.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "id"
+       ],
+       "request": {
+        "$ref": "RasterCollectionsRastersBatchInsertRequest"
+       },
+       "response": {
+        "$ref": "RasterCollectionsRastersBatchInsertResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/mapsengine"
+       ]
+      },
+      "list": {
+       "id": "mapsengine.rasterCollections.rasters.list",
+       "path": "rasterCollections/{id}/rasters",
+       "httpMethod": "GET",
+       "description": "Return all rasters within a raster collection.",
+       "parameters": {
+        "bbox": {
+         "type": "string",
+         "description": "A bounding box, expressed as \"west,south,east,north\". If set, only assets which intersect this bounding box will be returned.",
+         "location": "query"
+        },
+        "createdAfter": {
+         "type": "string",
+         "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or after this time.",
+         "format": "date-time",
+         "location": "query"
+        },
+        "createdBefore": {
+         "type": "string",
+         "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or before this time.",
+         "format": "date-time",
+         "location": "query"
+        },
+        "creatorEmail": {
+         "type": "string",
+         "description": "An email address representing a user. Returned assets that have been created by the user associated with the provided email address.",
+         "location": "query"
+        },
+        "id": {
+         "type": "string",
+         "description": "The ID of the raster collection to which these rasters belong.",
+         "required": true,
+         "location": "path"
+        },
+        "maxResults": {
+         "type": "integer",
+         "description": "The maximum number of items to include in a single response page. The maximum supported value is 100.",
+         "format": "uint32",
+         "location": "query"
+        },
+        "modifiedAfter": {
+         "type": "string",
+         "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or after this time.",
+         "format": "date-time",
+         "location": "query"
+        },
+        "modifiedBefore": {
+         "type": "string",
+         "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or before this time.",
+         "format": "date-time",
+         "location": "query"
+        },
+        "pageToken": {
+         "type": "string",
+         "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.",
+         "location": "query"
+        },
+        "role": {
+         "type": "string",
+         "description": "The role parameter indicates that the response should only contain assets where the current user has the specified level of access.",
+         "enum": [
+          "owner",
+          "reader",
+          "writer"
+         ],
+         "enumDescriptions": [
+          "The user can read, write and administer the asset.",
+          "The user can read the asset.",
+          "The user can read and write the asset."
+         ],
+         "location": "query"
+        },
+        "tags": {
+         "type": "string",
+         "description": "A comma separated list of tags. Returned assets will contain all the tags from the list.",
+         "location": "query"
+        }
+       },
+       "parameterOrder": [
+        "id"
+       ],
+       "response": {
+        "$ref": "RasterCollectionsRastersListResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/mapsengine",
+        "https://www.googleapis.com/auth/mapsengine.readonly"
+       ]
+      }
+     }
+    }
+   }
+  },
+  "rasters": {
+   "methods": {
+    "delete": {
+     "id": "mapsengine.rasters.delete",
+     "path": "rasters/{id}",
+     "httpMethod": "DELETE",
+     "description": "Delete a raster.",
+     "parameters": {
+      "id": {
+       "type": "string",
+       "description": "The ID of the raster. Only the raster creator or project owner are permitted to delete. If the raster is included in a layer or mosaic, the request will fail. Remove it from all parents prior to deleting.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "id"
+     ],
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine"
+     ]
+    },
+    "get": {
+     "id": "mapsengine.rasters.get",
+     "path": "rasters/{id}",
+     "httpMethod": "GET",
+     "description": "Return metadata for a single raster.",
+     "parameters": {
+      "id": {
+       "type": "string",
+       "description": "The ID of the raster.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "id"
+     ],
+     "response": {
+      "$ref": "Raster"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine",
+      "https://www.googleapis.com/auth/mapsengine.readonly"
+     ]
+    },
+    "list": {
+     "id": "mapsengine.rasters.list",
+     "path": "rasters",
+     "httpMethod": "GET",
+     "description": "Return all rasters readable by the current user.",
+     "parameters": {
+      "bbox": {
+       "type": "string",
+       "description": "A bounding box, expressed as \"west,south,east,north\". If set, only assets which intersect this bounding box will be returned.",
+       "location": "query"
+      },
+      "createdAfter": {
+       "type": "string",
+       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or after this time.",
+       "format": "date-time",
+       "location": "query"
+      },
+      "createdBefore": {
+       "type": "string",
+       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or before this time.",
+       "format": "date-time",
+       "location": "query"
+      },
+      "creatorEmail": {
+       "type": "string",
+       "description": "An email address representing a user. Returned assets that have been created by the user associated with the provided email address.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "The maximum number of items to include in a single response page. The maximum supported value is 100.",
+       "format": "uint32",
+       "location": "query"
+      },
+      "modifiedAfter": {
+       "type": "string",
+       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or after this time.",
+       "format": "date-time",
+       "location": "query"
+      },
+      "modifiedBefore": {
+       "type": "string",
+       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or before this time.",
+       "format": "date-time",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.",
+       "location": "query"
+      },
+      "projectId": {
+       "type": "string",
+       "description": "The ID of a Maps Engine project, used to filter the response. To list all available projects with their IDs, send a Projects: list request. You can also find your project ID as the value of the DashboardPlace:cid URL parameter when signed in to mapsengine.google.com.",
+       "required": true,
+       "location": "query"
+      },
+      "role": {
+       "type": "string",
+       "description": "The role parameter indicates that the response should only contain assets where the current user has the specified level of access.",
+       "enum": [
+        "owner",
+        "reader",
+        "writer"
+       ],
+       "enumDescriptions": [
+        "The user can read, write and administer the asset.",
+        "The user can read the asset.",
+        "The user can read and write the asset."
+       ],
+       "location": "query"
+      },
+      "tags": {
+       "type": "string",
+       "description": "A comma separated list of tags. Returned assets will contain all the tags from the list.",
+       "location": "query"
+      }
+     },
+     "parameterOrder": [
+      "projectId"
+     ],
+     "response": {
+      "$ref": "RastersListResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine",
+      "https://www.googleapis.com/auth/mapsengine.readonly"
+     ]
+    },
+    "patch": {
+     "id": "mapsengine.rasters.patch",
+     "path": "rasters/{id}",
+     "httpMethod": "PATCH",
+     "description": "Mutate a raster asset.",
+     "parameters": {
+      "id": {
+       "type": "string",
+       "description": "The ID of the raster.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "id"
+     ],
+     "request": {
+      "$ref": "Raster"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine"
+     ]
+    },
+    "upload": {
+     "id": "mapsengine.rasters.upload",
+     "path": "rasters/upload",
+     "httpMethod": "POST",
+     "description": "Create a skeleton raster asset for upload.",
+     "request": {
+      "$ref": "Raster"
+     },
+     "response": {
+      "$ref": "Raster"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine"
+     ]
+    }
+   },
+   "resources": {
+    "files": {
+     "methods": {
+      "insert": {
+       "id": "mapsengine.rasters.files.insert",
+       "path": "rasters/{id}/files",
+       "httpMethod": "POST",
+       "description": "Upload a file to a raster asset.",
+       "parameters": {
+        "filename": {
+         "type": "string",
+         "description": "The file name of this uploaded file.",
+         "required": true,
+         "location": "query"
+        },
+        "id": {
+         "type": "string",
+         "description": "The ID of the raster asset.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "id",
+        "filename"
+       ],
+       "scopes": [
+        "https://www.googleapis.com/auth/mapsengine"
+       ],
+       "supportsMediaUpload": true,
+       "mediaUpload": {
+        "accept": [
+         "*/*"
+        ],
+        "maxSize": "10GB",
+        "protocols": {
+         "simple": {
+          "multipart": true,
+          "path": "/upload/mapsengine/exp2/rasters/{id}/files"
+         },
+         "resumable": {
+          "multipart": true,
+          "path": "/resumable/upload/mapsengine/exp2/rasters/{id}/files"
+         }
+        }
+       }
+      }
+     }
+    },
+    "parents": {
+     "methods": {
+      "list": {
+       "id": "mapsengine.rasters.parents.list",
+       "path": "rasters/{id}/parents",
+       "httpMethod": "GET",
+       "description": "Return all parent ids of the specified rasters.",
+       "parameters": {
+        "id": {
+         "type": "string",
+         "description": "The ID of the rasters whose parents will be listed.",
+         "required": true,
+         "location": "path"
+        },
+        "maxResults": {
+         "type": "integer",
+         "description": "The maximum number of items to include in a single response page. The maximum supported value is 50.",
+         "format": "uint32",
+         "location": "query"
+        },
+        "pageToken": {
+         "type": "string",
+         "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.",
+         "location": "query"
+        }
+       },
+       "parameterOrder": [
+        "id"
+       ],
+       "response": {
+        "$ref": "ParentsListResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/mapsengine",
+        "https://www.googleapis.com/auth/mapsengine.readonly"
+       ]
+      }
+     }
+    },
+    "permissions": {
+     "methods": {
+      "list": {
+       "id": "mapsengine.rasters.permissions.list",
+       "path": "rasters/{id}/permissions",
+       "httpMethod": "GET",
+       "description": "Return all of the permissions for the specified asset.",
+       "parameters": {
+        "id": {
+         "type": "string",
+         "description": "The ID of the asset whose permissions will be listed.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "id"
+       ],
+       "response": {
+        "$ref": "PermissionsListResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/mapsengine",
+        "https://www.googleapis.com/auth/mapsengine.readonly"
+       ]
+      }
+     }
+    }
+   }
+  },
+  "tables": {
+   "methods": {
+    "create": {
+     "id": "mapsengine.tables.create",
+     "path": "tables",
+     "httpMethod": "POST",
+     "description": "Create a table asset.",
+     "request": {
+      "$ref": "Table"
+     },
+     "response": {
+      "$ref": "Table"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine"
+     ]
+    },
+    "delete": {
+     "id": "mapsengine.tables.delete",
+     "path": "tables/{id}",
+     "httpMethod": "DELETE",
+     "description": "Delete a table.",
+     "parameters": {
+      "id": {
+       "type": "string",
+       "description": "The ID of the table. Only the table creator or project owner are permitted to delete. If the table is included in a layer, the request will fail. Remove it from all layers prior to deleting.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "id"
+     ],
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine"
+     ]
+    },
+    "get": {
+     "id": "mapsengine.tables.get",
+     "path": "tables/{id}",
+     "httpMethod": "GET",
+     "description": "Return metadata for a particular table, including the schema.",
+     "parameters": {
+      "id": {
+       "type": "string",
+       "description": "The ID of the table.",
+       "required": true,
+       "location": "path"
+      },
+      "version": {
+       "type": "string",
+       "enum": [
+        "draft",
+        "published"
+       ],
+       "enumDescriptions": [
+        "The draft version.",
+        "The published version."
+       ],
+       "location": "query"
+      }
+     },
+     "parameterOrder": [
+      "id"
+     ],
+     "response": {
+      "$ref": "Table"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine",
+      "https://www.googleapis.com/auth/mapsengine.readonly"
+     ]
+    },
+    "list": {
+     "id": "mapsengine.tables.list",
+     "path": "tables",
+     "httpMethod": "GET",
+     "description": "Return all tables readable by the current user.",
+     "parameters": {
+      "bbox": {
+       "type": "string",
+       "description": "A bounding box, expressed as \"west,south,east,north\". If set, only assets which intersect this bounding box will be returned.",
+       "location": "query"
+      },
+      "createdAfter": {
+       "type": "string",
+       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or after this time.",
+       "format": "date-time",
+       "location": "query"
+      },
+      "createdBefore": {
+       "type": "string",
+       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or before this time.",
+       "format": "date-time",
+       "location": "query"
+      },
+      "creatorEmail": {
+       "type": "string",
+       "description": "An email address representing a user. Returned assets that have been created by the user associated with the provided email address.",
+       "location": "query"
+      },
+      "maxResults": {
+       "type": "integer",
+       "description": "The maximum number of items to include in a single response page. The maximum supported value is 100.",
+       "format": "uint32",
+       "location": "query"
+      },
+      "modifiedAfter": {
+       "type": "string",
+       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or after this time.",
+       "format": "date-time",
+       "location": "query"
+      },
+      "modifiedBefore": {
+       "type": "string",
+       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or before this time.",
+       "format": "date-time",
+       "location": "query"
+      },
+      "pageToken": {
+       "type": "string",
+       "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.",
+       "location": "query"
+      },
+      "projectId": {
+       "type": "string",
+       "description": "The ID of a Maps Engine project, used to filter the response. To list all available projects with their IDs, send a Projects: list request. You can also find your project ID as the value of the DashboardPlace:cid URL parameter when signed in to mapsengine.google.com.",
+       "location": "query"
+      },
+      "role": {
+       "type": "string",
+       "description": "The role parameter indicates that the response should only contain assets where the current user has the specified level of access.",
+       "enum": [
+        "owner",
+        "reader",
+        "writer"
+       ],
+       "enumDescriptions": [
+        "The user can read, write and administer the asset.",
+        "The user can read the asset.",
+        "The user can read and write the asset."
+       ],
+       "location": "query"
+      },
+      "tags": {
+       "type": "string",
+       "description": "A comma separated list of tags. Returned assets will contain all the tags from the list.",
+       "location": "query"
+      }
+     },
+     "response": {
+      "$ref": "TablesListResponse"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine",
+      "https://www.googleapis.com/auth/mapsengine.readonly"
+     ]
+    },
+    "patch": {
+     "id": "mapsengine.tables.patch",
+     "path": "tables/{id}",
+     "httpMethod": "PATCH",
+     "description": "Mutate a table asset.",
+     "parameters": {
+      "id": {
+       "type": "string",
+       "description": "The ID of the table.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "id"
+     ],
+     "request": {
+      "$ref": "Table"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine"
+     ]
+    },
+    "upload": {
+     "id": "mapsengine.tables.upload",
+     "path": "tables/upload",
+     "httpMethod": "POST",
+     "description": "Create a placeholder table asset to which table files can be uploaded.\nOnce the placeholder has been created, files are uploaded to the https://www.googleapis.com/upload/mapsengine/v1/tables/table_id/files endpoint.\nSee Table Upload in the Developer's Guide or Table.files: insert in the reference documentation for more information.",
+     "request": {
+      "$ref": "Table"
+     },
+     "response": {
+      "$ref": "Table"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/mapsengine"
+     ]
+    }
+   },
+   "resources": {
+    "features": {
+     "methods": {
+      "batchDelete": {
+       "id": "mapsengine.tables.features.batchDelete",
+       "path": "tables/{id}/features/batchDelete",
+       "httpMethod": "POST",
+       "description": "Delete all features matching the given IDs.",
+       "parameters": {
+        "id": {
+         "type": "string",
+         "description": "The ID of the table that contains the features to be deleted.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "id"
+       ],
+       "request": {
+        "$ref": "FeaturesBatchDeleteRequest"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/mapsengine"
+       ]
+      },
+      "batchInsert": {
+       "id": "mapsengine.tables.features.batchInsert",
+       "path": "tables/{id}/features/batchInsert",
+       "httpMethod": "POST",
+       "description": "Append the supplied features.",
+       "parameters": {
+        "id": {
+         "type": "string",
+         "description": "The ID of the table to append the features to.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "id"
+       ],
+       "request": {
+        "$ref": "FeaturesBatchInsertRequest"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/mapsengine"
+       ]
+      },
+      "batchPatch": {
+       "id": "mapsengine.tables.features.batchPatch",
+       "path": "tables/{id}/features/batchPatch",
+       "httpMethod": "POST",
+       "description": "Patch the supplied features.",
+       "parameters": {
+        "id": {
+         "type": "string",
+         "description": "The ID of the table containing the features to be patched.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "id"
+       ],
+       "request": {
+        "$ref": "FeaturesBatchPatchRequest"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/mapsengine"
+       ]
+      },
+      "get": {
+       "id": "mapsengine.tables.features.get",
+       "path": "tables/{tableId}/features/{id}",
+       "httpMethod": "GET",
+       "description": "Return a single feature, given its ID.",
+       "parameters": {
+        "id": {
+         "type": "string",
+         "description": "The ID of the feature to get.",
+         "required": true,
+         "location": "path"
+        },
+        "select": {
+         "type": "string",
+         "description": "A SQL-like projection clause used to specify returned properties. If this parameter is not included, all properties are returned.",
+         "location": "query"
+        },
+        "tableId": {
+         "type": "string",
+         "description": "The ID of the table.",
+         "required": true,
+         "location": "path"
+        },
+        "version": {
+         "type": "string",
+         "description": "The table version to access. See Accessing Public Data for information.",
+         "enum": [
+          "draft",
+          "published"
+         ],
+         "enumDescriptions": [
+          "The draft version.",
+          "The published version."
+         ],
+         "location": "query"
+        }
+       },
+       "parameterOrder": [
+        "tableId",
+        "id"
+       ],
+       "response": {
+        "$ref": "Feature"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/mapsengine",
+        "https://www.googleapis.com/auth/mapsengine.readonly"
+       ]
+      },
+      "list": {
+       "id": "mapsengine.tables.features.list",
+       "path": "tables/{id}/features",
+       "httpMethod": "GET",
+       "description": "Return all features readable by the current user.",
+       "parameters": {
+        "id": {
+         "type": "string",
+         "description": "The ID of the table to which these features belong.",
+         "required": true,
+         "location": "path"
+        },
+        "include": {
+         "type": "string",
+         "description": "A comma separated list of optional data to include. Optional data available: schema.",
+         "location": "query"
+        },
+        "intersects": {
+         "type": "string",
+         "description": "A geometry literal that specifies the spatial restriction of the query.",
+         "location": "query"
+        },
+        "limit": {
+         "type": "integer",
+         "description": "The total number of features to return from the query, irrespective of the number of pages.",
+         "format": "uint32",
+         "location": "query"
+        },
+        "maxResults": {
+         "type": "integer",
+         "description": "The maximum number of items to include in the response, used for paging.",
+         "format": "uint32",
+         "location": "query"
+        },
+        "orderBy": {
+         "type": "string",
+         "description": "An SQL-like order by clause used to sort results. If this parameter is not included, the order of features is undefined.",
+         "location": "query"
+        },
+        "pageToken": {
+         "type": "string",
+         "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.",
+         "location": "query"
+        },
+        "select": {
+         "type": "string",
+         "description": "A SQL-like projection clause used to specify returned properties. If this parameter is not included, all properties are returned.",
+         "location": "query"
+        },
+        "version": {
+         "type": "string",
+         "description": "The table version to access. See Accessing Public Data for information.",
+         "enum": [
+          "draft",
+          "published"
+         ],
+         "enumDescriptions": [
+          "The draft version.",
+          "The published version."
+         ],
+         "location": "query"
+        },
+        "where": {
+         "type": "string",
+         "description": "An SQL-like predicate used to filter results.",
+         "location": "query"
+        }
+       },
+       "parameterOrder": [
+        "id"
+       ],
+       "response": {
+        "$ref": "FeaturesListResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/mapsengine",
+        "https://www.googleapis.com/auth/mapsengine.readonly"
+       ]
+      }
+     }
+    },
+    "files": {
+     "methods": {
+      "insert": {
+       "id": "mapsengine.tables.files.insert",
+       "path": "tables/{id}/files",
+       "httpMethod": "POST",
+       "description": "Upload a file to a placeholder table asset. See Table Upload in the Developer's Guide for more information.\nSupported file types are listed in the Supported data formats and limits article of the Google Maps Engine help center.",
+       "parameters": {
+        "filename": {
+         "type": "string",
+         "description": "The file name of this uploaded file.",
+         "required": true,
+         "location": "query"
+        },
+        "id": {
+         "type": "string",
+         "description": "The ID of the table asset.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "id",
+        "filename"
+       ],
+       "scopes": [
+        "https://www.googleapis.com/auth/mapsengine"
+       ],
+       "supportsMediaUpload": true,
+       "mediaUpload": {
+        "accept": [
+         "*/*"
+        ],
+        "maxSize": "1GB",
+        "protocols": {
+         "simple": {
+          "multipart": true,
+          "path": "/upload/mapsengine/exp2/tables/{id}/files"
+         },
+         "resumable": {
+          "multipart": true,
+          "path": "/resumable/upload/mapsengine/exp2/tables/{id}/files"
+         }
+        }
+       }
+      }
+     }
+    },
+    "parents": {
+     "methods": {
+      "list": {
+       "id": "mapsengine.tables.parents.list",
+       "path": "tables/{id}/parents",
+       "httpMethod": "GET",
+       "description": "Return all parent ids of the specified table.",
+       "parameters": {
+        "id": {
+         "type": "string",
+         "description": "The ID of the table whose parents will be listed.",
+         "required": true,
+         "location": "path"
+        },
+        "maxResults": {
+         "type": "integer",
+         "description": "The maximum number of items to include in a single response page. The maximum supported value is 50.",
+         "format": "uint32",
+         "location": "query"
+        },
+        "pageToken": {
+         "type": "string",
+         "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.",
+         "location": "query"
+        }
+       },
+       "parameterOrder": [
+        "id"
+       ],
+       "response": {
+        "$ref": "ParentsListResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/mapsengine",
+        "https://www.googleapis.com/auth/mapsengine.readonly"
+       ]
+      }
+     }
+    },
+    "permissions": {
+     "methods": {
+      "batchInsert": {
+       "id": "mapsengine.tables.permissions.batchInsert",
+       "path": "tables/{id}/permissions/batchInsert",
+       "httpMethod": "POST",
+       "description": "Add permission entries to an already existing asset.\n\nAn asset can hold up to 20 different permission entries. Each batchInsert request is atomic.",
+       "parameters": {
+        "id": {
+         "type": "string",
+         "description": "The ID of the asset to which permissions will be added.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "id"
+       ],
+       "request": {
+        "$ref": "PermissionsBatchInsertRequest"
+       },
+       "response": {
+        "$ref": "PermissionsBatchInsertResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/mapsengine"
+       ]
+      },
+      "list": {
+       "id": "mapsengine.tables.permissions.list",
+       "path": "tables/{id}/permissions",
+       "httpMethod": "GET",
+       "description": "Return all of the permissions for the specified asset.",
+       "parameters": {
+        "id": {
+         "type": "string",
+         "description": "The ID of the asset whose permissions will be listed.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "id"
+       ],
+       "response": {
+        "$ref": "PermissionsListResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/mapsengine",
+        "https://www.googleapis.com/auth/mapsengine.readonly"
+       ]
+      }
+     }
+    }
+   }
+  }
+ }
+}
diff --git a/mapsengine/exp2/mapsengine-gen.go b/mapsengine/exp2/mapsengine-gen.go
new file mode 100644
index 0000000..8932d56
--- /dev/null
+++ b/mapsengine/exp2/mapsengine-gen.go
@@ -0,0 +1,7724 @@
+// Package mapsengine provides access to the Google Maps Engine API.
+//
+// See https://developers.google.com/maps-engine/
+//
+// Usage example:
+//
+//   import "code.google.com/p/google-api-go-client/mapsengine/exp2"
+//   ...
+//   mapsengineService, err := mapsengine.New(oauthHttpClient)
+package mapsengine
+
+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 = "mapsengine:exp2"
+const apiName = "mapsengine"
+const apiVersion = "exp2"
+const basePath = "https://www.googleapis.com/mapsengine/exp2/"
+
+// OAuth2 scopes used by this API.
+const (
+	// View and manage your Google Maps Engine data
+	MapsengineScope = "https://www.googleapis.com/auth/mapsengine"
+
+	// View your Google Maps Engine data
+	MapsengineReadonlyScope = "https://www.googleapis.com/auth/mapsengine.readonly"
+)
+
+func New(client *http.Client) (*Service, error) {
+	if client == nil {
+		return nil, errors.New("client is nil")
+	}
+	s := &Service{client: client, BasePath: basePath}
+	s.Assets = NewAssetsService(s)
+	s.Layers = NewLayersService(s)
+	s.Maps = NewMapsService(s)
+	s.Projects = NewProjectsService(s)
+	s.RasterCollections = NewRasterCollectionsService(s)
+	s.Rasters = NewRastersService(s)
+	s.Tables = NewTablesService(s)
+	return s, nil
+}
+
+type Service struct {
+	client   *http.Client
+	BasePath string // API endpoint base URL
+
+	Assets *AssetsService
+
+	Layers *LayersService
+
+	Maps *MapsService
+
+	Projects *ProjectsService
+
+	RasterCollections *RasterCollectionsService
+
+	Rasters *RastersService
+
+	Tables *TablesService
+}
+
+func NewAssetsService(s *Service) *AssetsService {
+	rs := &AssetsService{s: s}
+	rs.Parents = NewAssetsParentsService(s)
+	rs.Permissions = NewAssetsPermissionsService(s)
+	return rs
+}
+
+type AssetsService struct {
+	s *Service
+
+	Parents *AssetsParentsService
+
+	Permissions *AssetsPermissionsService
+}
+
+func NewAssetsParentsService(s *Service) *AssetsParentsService {
+	rs := &AssetsParentsService{s: s}
+	return rs
+}
+
+type AssetsParentsService struct {
+	s *Service
+}
+
+func NewAssetsPermissionsService(s *Service) *AssetsPermissionsService {
+	rs := &AssetsPermissionsService{s: s}
+	return rs
+}
+
+type AssetsPermissionsService struct {
+	s *Service
+}
+
+func NewLayersService(s *Service) *LayersService {
+	rs := &LayersService{s: s}
+	rs.Parents = NewLayersParentsService(s)
+	rs.Permissions = NewLayersPermissionsService(s)
+	return rs
+}
+
+type LayersService struct {
+	s *Service
+
+	Parents *LayersParentsService
+
+	Permissions *LayersPermissionsService
+}
+
+func NewLayersParentsService(s *Service) *LayersParentsService {
+	rs := &LayersParentsService{s: s}
+	return rs
+}
+
+type LayersParentsService struct {
+	s *Service
+}
+
+func NewLayersPermissionsService(s *Service) *LayersPermissionsService {
+	rs := &LayersPermissionsService{s: s}
+	return rs
+}
+
+type LayersPermissionsService struct {
+	s *Service
+}
+
+func NewMapsService(s *Service) *MapsService {
+	rs := &MapsService{s: s}
+	rs.Permissions = NewMapsPermissionsService(s)
+	return rs
+}
+
+type MapsService struct {
+	s *Service
+
+	Permissions *MapsPermissionsService
+}
+
+func NewMapsPermissionsService(s *Service) *MapsPermissionsService {
+	rs := &MapsPermissionsService{s: s}
+	return rs
+}
+
+type MapsPermissionsService struct {
+	s *Service
+}
+
+func NewProjectsService(s *Service) *ProjectsService {
+	rs := &ProjectsService{s: s}
+	rs.Icons = NewProjectsIconsService(s)
+	return rs
+}
+
+type ProjectsService struct {
+	s *Service
+
+	Icons *ProjectsIconsService
+}
+
+func NewProjectsIconsService(s *Service) *ProjectsIconsService {
+	rs := &ProjectsIconsService{s: s}
+	return rs
+}
+
+type ProjectsIconsService struct {
+	s *Service
+}
+
+func NewRasterCollectionsService(s *Service) *RasterCollectionsService {
+	rs := &RasterCollectionsService{s: s}
+	rs.Parents = NewRasterCollectionsParentsService(s)
+	rs.Permissions = NewRasterCollectionsPermissionsService(s)
+	rs.Rasters = NewRasterCollectionsRastersService(s)
+	return rs
+}
+
+type RasterCollectionsService struct {
+	s *Service
+
+	Parents *RasterCollectionsParentsService
+
+	Permissions *RasterCollectionsPermissionsService
+
+	Rasters *RasterCollectionsRastersService
+}
+
+func NewRasterCollectionsParentsService(s *Service) *RasterCollectionsParentsService {
+	rs := &RasterCollectionsParentsService{s: s}
+	return rs
+}
+
+type RasterCollectionsParentsService struct {
+	s *Service
+}
+
+func NewRasterCollectionsPermissionsService(s *Service) *RasterCollectionsPermissionsService {
+	rs := &RasterCollectionsPermissionsService{s: s}
+	return rs
+}
+
+type RasterCollectionsPermissionsService struct {
+	s *Service
+}
+
+func NewRasterCollectionsRastersService(s *Service) *RasterCollectionsRastersService {
+	rs := &RasterCollectionsRastersService{s: s}
+	return rs
+}
+
+type RasterCollectionsRastersService struct {
+	s *Service
+}
+
+func NewRastersService(s *Service) *RastersService {
+	rs := &RastersService{s: s}
+	rs.Files = NewRastersFilesService(s)
+	rs.Parents = NewRastersParentsService(s)
+	rs.Permissions = NewRastersPermissionsService(s)
+	return rs
+}
+
+type RastersService struct {
+	s *Service
+
+	Files *RastersFilesService
+
+	Parents *RastersParentsService
+
+	Permissions *RastersPermissionsService
+}
+
+func NewRastersFilesService(s *Service) *RastersFilesService {
+	rs := &RastersFilesService{s: s}
+	return rs
+}
+
+type RastersFilesService struct {
+	s *Service
+}
+
+func NewRastersParentsService(s *Service) *RastersParentsService {
+	rs := &RastersParentsService{s: s}
+	return rs
+}
+
+type RastersParentsService struct {
+	s *Service
+}
+
+func NewRastersPermissionsService(s *Service) *RastersPermissionsService {
+	rs := &RastersPermissionsService{s: s}
+	return rs
+}
+
+type RastersPermissionsService struct {
+	s *Service
+}
+
+func NewTablesService(s *Service) *TablesService {
+	rs := &TablesService{s: s}
+	rs.Features = NewTablesFeaturesService(s)
+	rs.Files = NewTablesFilesService(s)
+	rs.Parents = NewTablesParentsService(s)
+	rs.Permissions = NewTablesPermissionsService(s)
+	return rs
+}
+
+type TablesService struct {
+	s *Service
+
+	Features *TablesFeaturesService
+
+	Files *TablesFilesService
+
+	Parents *TablesParentsService
+
+	Permissions *TablesPermissionsService
+}
+
+func NewTablesFeaturesService(s *Service) *TablesFeaturesService {
+	rs := &TablesFeaturesService{s: s}
+	return rs
+}
+
+type TablesFeaturesService struct {
+	s *Service
+}
+
+func NewTablesFilesService(s *Service) *TablesFilesService {
+	rs := &TablesFilesService{s: s}
+	return rs
+}
+
+type TablesFilesService struct {
+	s *Service
+}
+
+func NewTablesParentsService(s *Service) *TablesParentsService {
+	rs := &TablesParentsService{s: s}
+	return rs
+}
+
+type TablesParentsService struct {
+	s *Service
+}
+
+func NewTablesPermissionsService(s *Service) *TablesPermissionsService {
+	rs := &TablesPermissionsService{s: s}
+	return rs
+}
+
+type TablesPermissionsService struct {
+	s *Service
+}
+
+type AcquisitionTime struct {
+	// End: The end time if acquisition time is a range. The value is an RFC
+	// 3339 formatted date-time value (1970-01-01T00:00:00Z).
+	End string `json:"end,omitempty"`
+
+	// Precision: The precision of acquisition time.
+	Precision string `json:"precision,omitempty"`
+
+	// Start: The acquisition time, or start time if acquisition time is a
+	// range. The value is an RFC 3339 formatted date-time value
+	// (1970-01-01T00:00:00Z).
+	Start string `json:"start,omitempty"`
+}
+
+type Asset struct {
+	// Bbox: A rectangular bounding box which contains all of the data in
+	// this asset. The numbers represent latitude and longitude in decimal
+	// degrees.
+	Bbox []float64 `json:"bbox,omitempty"`
+
+	// CreationTime: The creation time of this asset. The value is an RFC
+	// 3339-formatted date-time value (for example, 1970-01-01T00:00:00Z).
+	CreationTime string `json:"creationTime,omitempty"`
+
+	// Description: The asset's description.
+	Description string `json:"description,omitempty"`
+
+	// Etag: The ETag, used to refer to the current version of the asset.
+	Etag string `json:"etag,omitempty"`
+
+	// Id: The asset's globally unique ID.
+	Id string `json:"id,omitempty"`
+
+	// LastModifiedTime: The last modified time of this asset. The value is
+	// an RFC 3339-formatted date-time value (for example,
+	// 1970-01-01T00:00:00Z).
+	LastModifiedTime string `json:"lastModifiedTime,omitempty"`
+
+	// Name: The asset's name.
+	Name string `json:"name,omitempty"`
+
+	// ProjectId: The ID of the project to which the asset belongs.
+	ProjectId string `json:"projectId,omitempty"`
+
+	// Resource: The URL to query to retrieve the asset's complete object.
+	// The assets endpoint only returns high-level information about a
+	// resource.
+	Resource string `json:"resource,omitempty"`
+
+	// Tags: An array of text strings, with each string representing a tag.
+	// More information about tags can be found in the Tagging data article
+	// of the Maps Engine help center.
+	Tags []string `json:"tags,omitempty"`
+
+	// Type: The type of asset.
+	Type string `json:"type,omitempty"`
+}
+
+type AssetsListResponse struct {
+	// Assets: Assets returned.
+	Assets []*Asset `json:"assets,omitempty"`
+
+	// NextPageToken: Next page token.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+}
+
+type Border struct {
+	// Color: Color of the border.
+	Color string `json:"color,omitempty"`
+
+	// Opacity: Opacity of the border.
+	Opacity float64 `json:"opacity,omitempty"`
+
+	// Width: Width of the border, in pixels.
+	Width float64 `json:"width,omitempty"`
+}
+
+type Color struct {
+	// Color: The CSS style color, can be in format of "red" or "#7733EE".
+	Color string `json:"color,omitempty"`
+
+	// Opacity: Opacity ranges from 0 to 1, inclusive. If not provided,
+	// default to 1.
+	Opacity float64 `json:"opacity,omitempty"`
+}
+
+type Datasource struct {
+	// Id: The ID of a datasource.
+	Id string `json:"id,omitempty"`
+}
+
+type DisplayRule struct {
+	// Filters: This display rule will only be applied to features that
+	// match all of the filters here. If filters is empty, then the rule
+	// applies to all features.
+	Filters []*Filter `json:"filters,omitempty"`
+
+	// LineOptions: Style applied to lines. Required for LineString
+	// Geometry.
+	LineOptions *LineStyle `json:"lineOptions,omitempty"`
+
+	// Name: Display rule name. Name is not unique and cannot be used for
+	// identification purpose.
+	Name string `json:"name,omitempty"`
+
+	// PointOptions: Style applied to points. Required for Point Geometry.
+	PointOptions *PointStyle `json:"pointOptions,omitempty"`
+
+	// PolygonOptions: Style applied to polygons. Required for Polygon
+	// Geometry.
+	PolygonOptions *PolygonStyle `json:"polygonOptions,omitempty"`
+
+	// ZoomLevels: The zoom levels that this display rule apply.
+	ZoomLevels *ZoomLevels `json:"zoomLevels,omitempty"`
+}
+
+type Feature struct {
+	// Geometry: The geometry member of this Feature.
+	Geometry GeoJsonGeometry `json:"geometry,omitempty"`
+
+	// Properties: Key/value pairs of this Feature.
+	Properties *GeoJsonProperties `json:"properties,omitempty"`
+
+	// Type: Identifies this object as a feature.
+	Type string `json:"type,omitempty"`
+}
+
+type FeatureInfo struct {
+	// Content: HTML template of the info window. If not provided, a default
+	// template with all attributes will be generated.
+	Content string `json:"content,omitempty"`
+}
+
+type FeaturesBatchDeleteRequest struct {
+	Gx_ids []string `json:"gx_ids,omitempty"`
+
+	PrimaryKeys []string `json:"primaryKeys,omitempty"`
+}
+
+type FeaturesBatchInsertRequest struct {
+	// AllowNormalization: If true, the server will normalize feature
+	// geometries. It is assumed that the South Pole is exterior to any
+	// polygons given. See here for a list of normalizations. If false, the
+	// all feature geometries must be given already normalized. The points
+	// in all LinearRings must be listed in counter-clockwise order, and
+	// LinearRings may not intersect.
+	AllowNormalization bool `json:"allowNormalization,omitempty"`
+
+	Features []*Feature `json:"features,omitempty"`
+}
+
+type FeaturesBatchPatchRequest struct {
+	// AllowNormalization: If true, the server will normalize feature
+	// geometries. It is assumed that the South Pole is exterior to any
+	// polygons given. See here for a list of normalizations. If false, the
+	// all feature geometries must be given already normalized. The points
+	// in all LinearRings must be listed in counter-clockwise order, and
+	// LinearRings may not intersect.
+	AllowNormalization bool `json:"allowNormalization,omitempty"`
+
+	Features []*Feature `json:"features,omitempty"`
+}
+
+type FeaturesListResponse struct {
+	// AllowedQueriesPerSecond: An indicator of the maximum rate at which
+	// queries may be made, if all queries were as expensive as this query.
+	AllowedQueriesPerSecond float64 `json:"allowedQueriesPerSecond,omitempty"`
+
+	// Features: Resources returned.
+	Features []*Feature `json:"features,omitempty"`
+
+	// NextPageToken: Next page token.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// Schema: The feature schema.
+	Schema *Schema `json:"schema,omitempty"`
+
+	Type string `json:"type,omitempty"`
+}
+
+type File struct {
+	// Filename: The name of the file.
+	Filename string `json:"filename,omitempty"`
+
+	// Size: The size of the file in bytes.
+	Size int64 `json:"size,omitempty,string"`
+
+	// UploadStatus: The upload status of the file.
+	UploadStatus string `json:"uploadStatus,omitempty"`
+}
+
+type Filter struct {
+	// Column: The column name to filter on.
+	Column string `json:"column,omitempty"`
+
+	// Operator: Operation used to evaluate the filter.
+	Operator string `json:"operator,omitempty"`
+
+	// Value: Value to be evaluated against attribute.
+	Value interface{} `json:"value,omitempty"`
+}
+
+type GeoJsonGeometry map[string]interface{}
+
+func (t GeoJsonGeometry) Type() string {
+	return googleapi.VariantType(t)
+}
+
+func (t GeoJsonGeometry) GeometryCollection() (r GeoJsonGeometryCollection, ok bool) {
+	if t.Type() != "GeometryCollection" {
+		return r, false
+	}
+	ok = googleapi.ConvertVariant(map[string]interface{}(t), &r)
+	return r, ok
+}
+
+func (t GeoJsonGeometry) LineString() (r GeoJsonLineString, ok bool) {
+	if t.Type() != "LineString" {
+		return r, false
+	}
+	ok = googleapi.ConvertVariant(map[string]interface{}(t), &r)
+	return r, ok
+}
+
+func (t GeoJsonGeometry) MultiLineString() (r GeoJsonMultiLineString, ok bool) {
+	if t.Type() != "MultiLineString" {
+		return r, false
+	}
+	ok = googleapi.ConvertVariant(map[string]interface{}(t), &r)
+	return r, ok
+}
+
+func (t GeoJsonGeometry) MultiPoint() (r GeoJsonMultiPoint, ok bool) {
+	if t.Type() != "MultiPoint" {
+		return r, false
+	}
+	ok = googleapi.ConvertVariant(map[string]interface{}(t), &r)
+	return r, ok
+}
+
+func (t GeoJsonGeometry) MultiPolygon() (r GeoJsonMultiPolygon, ok bool) {
+	if t.Type() != "MultiPolygon" {
+		return r, false
+	}
+	ok = googleapi.ConvertVariant(map[string]interface{}(t), &r)
+	return r, ok
+}
+
+func (t GeoJsonGeometry) Point() (r GeoJsonPoint, ok bool) {
+	if t.Type() != "Point" {
+		return r, false
+	}
+	ok = googleapi.ConvertVariant(map[string]interface{}(t), &r)
+	return r, ok
+}
+
+func (t GeoJsonGeometry) Polygon() (r GeoJsonPolygon, ok bool) {
+	if t.Type() != "Polygon" {
+		return r, false
+	}
+	ok = googleapi.ConvertVariant(map[string]interface{}(t), &r)
+	return r, ok
+}
+
+type GeoJsonGeometryCollection struct {
+	// Geometries: An array of geometry objects. There must be at least 2
+	// different types of geometries in the array.
+	Geometries []GeoJsonGeometry `json:"geometries,omitempty"`
+
+	// Type: Identifies this object as a GeoJsonGeometryCollection.
+	Type string `json:"type,omitempty"`
+}
+
+type GeoJsonLineString struct {
+	// Coordinates: An array of two or more positions, representing a line.
+	Coordinates [][]float64 `json:"coordinates,omitempty"`
+
+	// Type: Identifies this object as a GeoJsonLineString.
+	Type string `json:"type,omitempty"`
+}
+
+type GeoJsonMultiLineString struct {
+	// Coordinates: An array of at least two GeoJsonLineString coordinate
+	// arrays.
+	Coordinates [][][]float64 `json:"coordinates,omitempty"`
+
+	// Type: Identifies this object as a GeoJsonMultiLineString.
+	Type string `json:"type,omitempty"`
+}
+
+type GeoJsonMultiPoint struct {
+	// Coordinates: An array of at least two GeoJsonPoint coordinate arrays.
+	Coordinates [][]float64 `json:"coordinates,omitempty"`
+
+	// Type: Identifies this object as a GeoJsonMultiPoint.
+	Type string `json:"type,omitempty"`
+}
+
+type GeoJsonMultiPolygon struct {
+	// Coordinates: An array of at least two GeoJsonPolygon coordinate
+	// arrays.
+	Coordinates [][][][]float64 `json:"coordinates,omitempty"`
+
+	// Type: Identifies this object as a GeoJsonMultiPolygon.
+	Type string `json:"type,omitempty"`
+}
+
+type GeoJsonPoint struct {
+	// Coordinates: A single GeoJsonPosition, specifying the location of the
+	// point.
+	Coordinates []float64 `json:"coordinates,omitempty"`
+
+	// Type: Identifies this object as a GeoJsonPoint.
+	Type string `json:"type,omitempty"`
+}
+
+type GeoJsonPolygon struct {
+	// Coordinates: An array of LinearRings. A LinearRing is a
+	// GeoJsonLineString which is closed (that is, the first and last
+	// GeoJsonPositions are equal), and which contains at least four
+	// GeoJsonPositions. For polygons with multiple rings, the first
+	// LinearRing is the exterior ring, and any subsequent rings are
+	// interior rings (that is, holes).
+	Coordinates [][][]float64 `json:"coordinates,omitempty"`
+
+	// Type: Identifies this object as a GeoJsonPolygon.
+	Type string `json:"type,omitempty"`
+}
+
+type GeoJsonProperties struct {
+}
+
+type Icon struct {
+	// Description: The description of this Icon, supplied by the author.
+	Description string `json:"description,omitempty"`
+
+	// Id: An ID used to refer to this Icon.
+	Id string `json:"id,omitempty"`
+
+	// Name: The name of this Icon, supplied by the author.
+	Name string `json:"name,omitempty"`
+}
+
+type IconStyle struct {
+	// Id: Custom icon id.
+	Id string `json:"id,omitempty"`
+
+	// Name: Stock icon name. To use a stock icon, prefix it with 'gx_'. See
+	// Stock icon names for valid icon names. For example, to specify
+	// small_red, set name to 'gx_small_red'.
+	Name string `json:"name,omitempty"`
+
+	// ScaledShape: A scalable shape.
+	ScaledShape *ScaledShape `json:"scaledShape,omitempty"`
+
+	// ScalingFunction: The function used to scale shapes. Required when a
+	// scaledShape is specified.
+	ScalingFunction *ScalingFunction `json:"scalingFunction,omitempty"`
+}
+
+type IconsListResponse struct {
+	// Icons: Resources returned.
+	Icons []*Icon `json:"icons,omitempty"`
+
+	// NextPageToken: Next page token.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+}
+
+type LabelStyle struct {
+	// Color: Color of the text. If not provided, default to black.
+	Color string `json:"color,omitempty"`
+
+	// Column: The column value of the feature to be displayed.
+	Column string `json:"column,omitempty"`
+
+	// FontStyle: Font style of the label, defaults to 'normal'.
+	FontStyle string `json:"fontStyle,omitempty"`
+
+	// FontWeight: Font weight of the label, defaults to 'normal'.
+	FontWeight string `json:"fontWeight,omitempty"`
+
+	// Opacity: Opacity of the text.
+	Opacity float64 `json:"opacity,omitempty"`
+
+	// Outline: Outline color of the text.
+	Outline *Color `json:"outline,omitempty"`
+
+	// Size: Font size of the label, in pixels. 8 <= size <= 15. If not
+	// provided, a default size will be provided.
+	Size float64 `json:"size,omitempty"`
+}
+
+type Layer struct {
+	// Bbox: A rectangular bounding box which contains all of the data in
+	// this Layer. The numbers represent latitude and longitude in decimal
+	// degrees.
+	Bbox []float64 `json:"bbox,omitempty"`
+
+	// CreationTime: The creation time of this layer. The value is an RFC
+	// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z).
+	CreationTime string `json:"creationTime,omitempty"`
+
+	// DatasourceType: The type of the datasources used to build this Layer.
+	DatasourceType string `json:"datasourceType,omitempty"`
+
+	// Datasources: An array of datasources used to build this Layer. If
+	// datasourceType is "image", then each element in this array is a
+	// reference to an Image or RasterCollection. If datasourceType is
+	// "table" then each element in this array is a reference to a Vector
+	// Table.
+	Datasources []*Datasource `json:"datasources,omitempty"`
+
+	// Description: The description of this Layer, supplied by the author.
+	Description string `json:"description,omitempty"`
+
+	// DraftAccessList: Deprecated: The name of an access list of the Map
+	// Editor type. The user on whose behalf the request is being sent must
+	// be an editor on that access list. Read About access lists in the
+	// Google Maps Engine help center for more information.
+	DraftAccessList string `json:"draftAccessList,omitempty"`
+
+	// Etag: The ETag, used to refer to the current version of the asset.
+	Etag string `json:"etag,omitempty"`
+
+	// Id: A globally unique ID, used to refer to this Layer.
+	Id string `json:"id,omitempty"`
+
+	// LastModifiedTime: The last modified time of this layer. The value is
+	// an RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z).
+	LastModifiedTime string `json:"lastModifiedTime,omitempty"`
+
+	// Name: The name of this Layer, supplied by the author.
+	Name string `json:"name,omitempty"`
+
+	// ProcessingStatus: The processing status of this layer.
+	ProcessingStatus string `json:"processingStatus,omitempty"`
+
+	// ProjectId: The ID of the project that this Layer is in.
+	ProjectId string `json:"projectId,omitempty"`
+
+	// PublishedAccessList: Deprecated: The access list to whom view
+	// permissions are granted. The value must be the name of a Maps Engine
+	// access list of the Map Viewer type, and the user must be a viewer on
+	// that list. Read About access lists in the Google Maps Engine help
+	// center for more information.
+	PublishedAccessList string `json:"publishedAccessList,omitempty"`
+
+	// Style: The Styling information for a vector layer.
+	Style *VectorStyle `json:"style,omitempty"`
+
+	// Tags: Tags of this Layer.
+	Tags []string `json:"tags,omitempty"`
+}
+
+type LayersListResponse struct {
+	// Layers: Resources returned.
+	Layers []*Layer `json:"layers,omitempty"`
+
+	// NextPageToken: Next page token.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+}
+
+type LineStyle struct {
+	// Border: Border of the line. 0 < border.width <= 5.
+	Border *Border `json:"border,omitempty"`
+
+	// Dash: Dash defines the pattern of the line, the values are pixel
+	// lengths of alternating dash and gap. If dash is not provided, then it
+	// means a solid line. Dash can contain up to 10 values and must contain
+	// even number of values.
+	Dash []float64 `json:"dash,omitempty"`
+
+	// Label: Label style for the line.
+	Label *LabelStyle `json:"label,omitempty"`
+
+	// Stroke: Stroke of the line.
+	Stroke *LineStyleStroke `json:"stroke,omitempty"`
+}
+
+type LineStyleStroke struct {
+	// Color: Color of the line.
+	Color string `json:"color,omitempty"`
+
+	// Opacity: Opacity of the line.
+	Opacity float64 `json:"opacity,omitempty"`
+
+	// Width: Width of the line, in pixels. 0 <= width <= 10. If width is
+	// set to 0, the line will be invisible.
+	Width float64 `json:"width,omitempty"`
+}
+
+type Map struct {
+	// Bbox: A rectangular bounding box which contains all of the data in
+	// this Map. The numbers represent latitude and longitude in decimal
+	// degrees.
+	Bbox []float64 `json:"bbox,omitempty"`
+
+	// Contents: The contents of this Map.
+	Contents []MapItem `json:"contents,omitempty"`
+
+	// CreationTime: The creation time of this map. The value is an RFC 3339
+	// formatted date-time value (e.g. 1970-01-01T00:00:00Z).
+	CreationTime string `json:"creationTime,omitempty"`
+
+	// DefaultViewport: An array of four numbers (west, south, east, north)
+	// which defines the rectangular bounding box of the default viewport.
+	// The numbers represent latitude and longitude in decimal degrees.
+	DefaultViewport []float64 `json:"defaultViewport,omitempty"`
+
+	// Description: The description of this Map, supplied by the author.
+	Description string `json:"description,omitempty"`
+
+	// DraftAccessList: Deprecated: The name of an access list of the Map
+	// Editor type. The user on whose behalf the request is being sent must
+	// be an editor on that access list. Read About access lists in the
+	// Google Maps Engine help center for more information.
+	DraftAccessList string `json:"draftAccessList,omitempty"`
+
+	// Etag: The ETag, used to refer to the current version of the asset.
+	Etag string `json:"etag,omitempty"`
+
+	// Id: A globally unique ID, used to refer to this Map.
+	Id string `json:"id,omitempty"`
+
+	// LastModifiedTime: The last modified time of this map. The value is an
+	// RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z).
+	LastModifiedTime string `json:"lastModifiedTime,omitempty"`
+
+	// Name: The name of this Map, supplied by the author.
+	Name string `json:"name,omitempty"`
+
+	// ProcessingStatus: The processing status of this map. Map processing
+	// is automatically started once a map becomes ready for processing.
+	ProcessingStatus string `json:"processingStatus,omitempty"`
+
+	// ProjectId: The ID of the project that this Map is in.
+	ProjectId string `json:"projectId,omitempty"`
+
+	// PublishedAccessList: Deprecated: The access list to whom view
+	// permissions are granted. The value must be the name of a Maps Engine
+	// access list of the Map Viewer type, and the user must be a viewer on
+	// that list. Read About access lists in the Google Maps Engine help
+	// center for more information.
+	PublishedAccessList string `json:"publishedAccessList,omitempty"`
+
+	// PublishingStatus: The publishing status of this map.
+	PublishingStatus string `json:"publishingStatus,omitempty"`
+
+	// Tags: Tags of this Map.
+	Tags []string `json:"tags,omitempty"`
+
+	// Versions: Deprecated: An array containing the available versions of
+	// this Map. Currently may only contain "published". The
+	// publishingStatus field should be used instead.
+	Versions []string `json:"versions,omitempty"`
+}
+
+type MapFolder struct {
+	Contents []MapItem `json:"contents,omitempty"`
+
+	// DefaultViewport: An array of four numbers (west, south, east, north)
+	// which defines the rectangular bounding box of the default viewport.
+	// The numbers represent latitude and longitude in decimal degrees.
+	DefaultViewport []float64 `json:"defaultViewport,omitempty"`
+
+	// Expandable: The expandability setting of this MapFolder. If true, the
+	// folder can be expanded.
+	Expandable bool `json:"expandable,omitempty"`
+
+	// Key: A user defined alias for this MapFolder, specific to this Map.
+	Key string `json:"key,omitempty"`
+
+	// Name: The name of this MapFolder.
+	Name string `json:"name,omitempty"`
+
+	// Type: Identifies this object as a MapFolder.
+	Type string `json:"type,omitempty"`
+
+	// Visibility: The visibility setting of this MapFolder. One of
+	// "defaultOn" or "defaultOff".
+	Visibility string `json:"visibility,omitempty"`
+}
+
+type MapItem map[string]interface{}
+
+func (t MapItem) Type() string {
+	return googleapi.VariantType(t)
+}
+
+func (t MapItem) Folder() (r MapFolder, ok bool) {
+	if t.Type() != "Folder" {
+		return r, false
+	}
+	ok = googleapi.ConvertVariant(map[string]interface{}(t), &r)
+	return r, ok
+}
+
+func (t MapItem) KmlLink() (r MapKmlLink, ok bool) {
+	if t.Type() != "KmlLink" {
+		return r, false
+	}
+	ok = googleapi.ConvertVariant(map[string]interface{}(t), &r)
+	return r, ok
+}
+
+func (t MapItem) Layer() (r MapLayer, ok bool) {
+	if t.Type() != "Layer" {
+		return r, false
+	}
+	ok = googleapi.ConvertVariant(map[string]interface{}(t), &r)
+	return r, ok
+}
+
+type MapKmlLink struct {
+	// DefaultViewport: An array of four numbers (west, south, east, north)
+	// which defines the rectangular bounding box of the default viewport.
+	// The numbers represent latitude and longitude in decimal degrees.
+	DefaultViewport []float64 `json:"defaultViewport,omitempty"`
+
+	// KmlUrl: The URL to the KML file represented by this MapKmlLink.
+	KmlUrl string `json:"kmlUrl,omitempty"`
+
+	// Name: The name of this MapKmlLink.
+	Name string `json:"name,omitempty"`
+
+	// Type: Identifies this object as a MapKmlLink.
+	Type string `json:"type,omitempty"`
+
+	// Visibility: The visibility setting of this MapKmlLink. One of
+	// "defaultOn" or "defaultOff".
+	Visibility string `json:"visibility,omitempty"`
+}
+
+type MapLayer struct {
+	// DefaultViewport: An array of four numbers (west, south, east, north)
+	// which defines the rectangular bounding box of the default viewport.
+	// The numbers represent latitude and longitude in decimal degrees.
+	DefaultViewport []float64 `json:"defaultViewport,omitempty"`
+
+	// Id: The ID of this MapLayer. This ID can be used to request more
+	// details about the layer.
+	Id string `json:"id,omitempty"`
+
+	// Key: A user defined alias for this MapLayer, specific to this Map.
+	Key string `json:"key,omitempty"`
+
+	// Name: The name of this MapLayer.
+	Name string `json:"name,omitempty"`
+
+	// Type: Identifies this object as a MapLayer.
+	Type string `json:"type,omitempty"`
+
+	// Visibility: The visibility setting of this MapLayer. One of
+	// "defaultOn" or "defaultOff".
+	Visibility string `json:"visibility,omitempty"`
+}
+
+type MapsListResponse struct {
+	// Maps: Resources returned.
+	Maps []*Map `json:"maps,omitempty"`
+
+	// NextPageToken: Next page token.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+}
+
+type Parent struct {
+	// Id: The ID of this parent.
+	Id string `json:"id,omitempty"`
+}
+
+type ParentsListResponse struct {
+	// NextPageToken: Next page token.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// Parents: The parent assets.
+	Parents []*Parent `json:"parents,omitempty"`
+}
+
+type Permission struct {
+	// Discoverable: True if asset is listed and is searchable by the
+	// public.
+	Discoverable bool `json:"discoverable,omitempty"`
+
+	// EmailAddress: The email address of the user this permission refers
+	// to.
+	EmailAddress string `json:"emailAddress,omitempty"`
+
+	// Id: The ID of the permission. When making a
+	// mapsengine.permissions.batchInsert request, the id or emailAddress
+	// fields must be specified. If both id and emailAddress are provided
+	// they must be consistent.
+	Id string `json:"id,omitempty"`
+
+	// Role: The primary role for this user.
+	Role string `json:"role,omitempty"`
+
+	// Type: The account type. Allowed values are:
+	Type string `json:"type,omitempty"`
+}
+
+type PermissionsBatchInsertRequest struct {
+	// Permissions: The permissions to be added.
+	Permissions []*Permission `json:"permissions,omitempty"`
+}
+
+type PermissionsBatchInsertResponse struct {
+}
+
+type PermissionsGetIdForEmailResponse struct {
+	// Id: The permission ID.
+	Id string `json:"id,omitempty"`
+}
+
+type PermissionsListResponse struct {
+	// Permissions: The set of permissions associated with this asset.
+	Permissions []*Permission `json:"permissions,omitempty"`
+}
+
+type PointStyle struct {
+	// Icon: Icon for the point; if it isn't null, exactly one of 'name',
+	// 'id' or 'scaledShape' must be set.
+	Icon *IconStyle `json:"icon,omitempty"`
+
+	// Label: Label style for the point.
+	Label *LabelStyle `json:"label,omitempty"`
+}
+
+type PolygonStyle struct {
+	// Fill: Fill color of the polygon. If not provided, the polygon will be
+	// transparent and not visible if there is no border.
+	Fill *Color `json:"fill,omitempty"`
+
+	// Stroke: Border of the polygon. 0 < border.width <= 10.
+	Stroke *Border `json:"stroke,omitempty"`
+}
+
+type ProcessResponse struct {
+}
+
+type Project struct {
+	// Id: An ID used to refer to this project.
+	Id string `json:"id,omitempty"`
+
+	// Name: A user provided name for this project.
+	Name string `json:"name,omitempty"`
+}
+
+type ProjectsListResponse struct {
+	// Projects: Projects returned.
+	Projects []*Project `json:"projects,omitempty"`
+}
+
+type PublishResponse struct {
+}
+
+type Raster struct {
+	// AcquisitionTime: The acquisition time of this Raster.
+	AcquisitionTime *AcquisitionTime `json:"acquisitionTime,omitempty"`
+
+	// Attribution: The name of the attribution to be used for this Raster.
+	Attribution string `json:"attribution,omitempty"`
+
+	// Bbox: A rectangular bounding box which contains all of the data in
+	// this Raster. The numbers represent latitudes and longitudes in
+	// decimal degrees.
+	Bbox []float64 `json:"bbox,omitempty"`
+
+	// CreationTime: The creation time of this raster. The value is an RFC
+	// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z).
+	CreationTime string `json:"creationTime,omitempty"`
+
+	// Description: The description of this Raster, supplied by the author.
+	Description string `json:"description,omitempty"`
+
+	// DraftAccessList: Deprecated: The name of an access list of the Map
+	// Editor type. The user on whose behalf the request is being sent must
+	// be an editor on that access list. Read About access lists in the
+	// Google Maps Engine help center for more information.
+	DraftAccessList string `json:"draftAccessList,omitempty"`
+
+	// Etag: The ETag, used to refer to the current version of the asset.
+	Etag string `json:"etag,omitempty"`
+
+	// Files: The files associated with this Raster.
+	Files []*File `json:"files,omitempty"`
+
+	// Id: A globally unique ID, used to refer to this Raster.
+	Id string `json:"id,omitempty"`
+
+	// LastModifiedTime: The last modified time of this raster. The value is
+	// an RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z).
+	LastModifiedTime string `json:"lastModifiedTime,omitempty"`
+
+	// MaskType: The mask processing type of this Raster.
+	MaskType string `json:"maskType,omitempty"`
+
+	// Name: The name of this Raster, supplied by the author.
+	Name string `json:"name,omitempty"`
+
+	// ProcessingStatus: The processing status of this Raster.
+	ProcessingStatus string `json:"processingStatus,omitempty"`
+
+	// ProjectId: The ID of the project that this Raster is in.
+	ProjectId string `json:"projectId,omitempty"`
+
+	// RasterType: The type of this Raster. Always "image" today.
+	RasterType string `json:"rasterType,omitempty"`
+
+	// Tags: Tags of this Raster.
+	Tags []string `json:"tags,omitempty"`
+}
+
+type RasterCollection struct {
+	// Attribution: The name of the attribution to be used for this
+	// RasterCollection.
+	Attribution string `json:"attribution,omitempty"`
+
+	// Bbox: A rectangular bounding box which contains all of the data in
+	// this RasterCollection. The numbers represent latitude and longitude
+	// in decimal degrees.
+	Bbox []float64 `json:"bbox,omitempty"`
+
+	// CreationTime: The creation time of this RasterCollection. The value
+	// is an RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z).
+	CreationTime string `json:"creationTime,omitempty"`
+
+	// Description: The description of this RasterCollection, supplied by
+	// the author.
+	Description string `json:"description,omitempty"`
+
+	// DraftAccessList: Deprecated: The name of an access list of the Map
+	// Editor type. The user on whose behalf the request is being sent must
+	// be an editor on that access list. Read About access lists in the
+	// Google Maps Engine help center for more information.
+	DraftAccessList string `json:"draftAccessList,omitempty"`
+
+	// Etag: The ETag, used to refer to the current version of the asset.
+	Etag string `json:"etag,omitempty"`
+
+	// Id: A globally unique ID, used to refer to this RasterCollection.
+	Id string `json:"id,omitempty"`
+
+	// LastModifiedTime: The last modified time of this RasterCollection.
+	// The value is an RFC 3339 formatted date-time value (e.g.
+	// 1970-01-01T00:00:00Z).
+	LastModifiedTime string `json:"lastModifiedTime,omitempty"`
+
+	// Mosaic: True if this RasterCollection is a mosaic.
+	Mosaic bool `json:"mosaic,omitempty"`
+
+	// Name: The name of this RasterCollection, supplied by the author.
+	Name string `json:"name,omitempty"`
+
+	// ProcessingStatus: The processing status of this RasterCollection.
+	ProcessingStatus string `json:"processingStatus,omitempty"`
+
+	// ProjectId: The ID of the project that this RasterCollection is in.
+	ProjectId string `json:"projectId,omitempty"`
+
+	// RasterType: The type of rasters contained within this
+	// RasterCollection.
+	RasterType string `json:"rasterType,omitempty"`
+
+	// Tags: Tags of this RasterCollection.
+	Tags []string `json:"tags,omitempty"`
+}
+
+type RasterCollectionsListResponse struct {
+	// NextPageToken: Next page token.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// RasterCollections: Resources returned.
+	RasterCollections []*RasterCollection `json:"rasterCollections,omitempty"`
+}
+
+type RasterCollectionsRaster struct {
+	// Bbox: A rectangular bounding box which contains all of the data in
+	// this Raster. The numbers represent latitudes and longitudes in
+	// decimal degrees.
+	Bbox []float64 `json:"bbox,omitempty"`
+
+	// CreationTime: The creation time of this raster. The value is an RFC
+	// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z).
+	CreationTime string `json:"creationTime,omitempty"`
+
+	// Description: The description of this Raster, supplied by the author.
+	Description string `json:"description,omitempty"`
+
+	// Id: A globally unique ID, used to refer to this Raster.
+	Id string `json:"id,omitempty"`
+
+	// LastModifiedTime: The last modified time of this raster. The value is
+	// an RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z).
+	LastModifiedTime string `json:"lastModifiedTime,omitempty"`
+
+	// Name: The name of this Raster, supplied by the author.
+	Name string `json:"name,omitempty"`
+
+	// ProjectId: The ID of the project that this Raster is in.
+	ProjectId string `json:"projectId,omitempty"`
+
+	// RasterType: The type of this Raster. Always "image" today.
+	RasterType string `json:"rasterType,omitempty"`
+
+	// Tags: Tags of this Raster.
+	Tags []string `json:"tags,omitempty"`
+}
+
+type RasterCollectionsRasterBatchDeleteRequest struct {
+	// Ids: An array of Raster asset IDs to be removed from this
+	// RasterCollection.
+	Ids []string `json:"ids,omitempty"`
+}
+
+type RasterCollectionsRastersBatchDeleteResponse struct {
+}
+
+type RasterCollectionsRastersBatchInsertRequest struct {
+	// Ids: An array of Raster asset IDs to be added to this
+	// RasterCollection.
+	Ids []string `json:"ids,omitempty"`
+}
+
+type RasterCollectionsRastersBatchInsertResponse struct {
+}
+
+type RasterCollectionsRastersListResponse struct {
+	// NextPageToken: Next page token.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// Rasters: Resources returned.
+	Rasters []*RasterCollectionsRaster `json:"rasters,omitempty"`
+}
+
+type RastersListResponse struct {
+	// NextPageToken: Next page token.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// Rasters: Resources returned.
+	Rasters []*Raster `json:"rasters,omitempty"`
+}
+
+type ScaledShape struct {
+	// Border: Border color/width of the shape. If not specified the shape
+	// won't have a border.
+	Border *Border `json:"border,omitempty"`
+
+	// Fill: The fill color of the shape. If not specified the shape will be
+	// transparent (although the borders may not be).
+	Fill *Color `json:"fill,omitempty"`
+
+	// Shape: Name of the shape.
+	Shape string `json:"shape,omitempty"`
+}
+
+type ScalingFunction struct {
+	// Column: Name of the numeric column used to scale a shape.
+	Column string `json:"column,omitempty"`
+
+	// ScalingType: The type of scaling function to use. Defaults to SQRT.
+	// Currently only linear and square root scaling are supported.
+	ScalingType string `json:"scalingType,omitempty"`
+
+	// SizeRange: The range of shape sizes, in pixels. For circles, the size
+	// corresponds to the diameter.
+	SizeRange *SizeRange `json:"sizeRange,omitempty"`
+
+	// ValueRange: The range of values to display across the size range.
+	ValueRange *ValueRange `json:"valueRange,omitempty"`
+}
+
+type Schema struct {
+	// Columns: An array of column objects. The first object in the array
+	// must be named geometry and be of type points, lineStrings, polygons,
+	// or mixedGeometry.
+	Columns []*TableColumn `json:"columns,omitempty"`
+
+	// PrimaryGeometry: The name of the column that contains a feature's
+	// geometry. This field can be omitted during table create; Google Maps
+	// Engine supports only a single geometry column, which must be named
+	// geometry and be the first object in the columns array.
+	PrimaryGeometry string `json:"primaryGeometry,omitempty"`
+
+	// PrimaryKey: The name of the column that contains the unique
+	// identifier of a Feature.
+	PrimaryKey string `json:"primaryKey,omitempty"`
+}
+
+type SizeRange struct {
+	// Max: Maximum size, in pixels.
+	Max float64 `json:"max,omitempty"`
+
+	// Min: Minimum size, in pixels.
+	Min float64 `json:"min,omitempty"`
+}
+
+type Table struct {
+	// Bbox: A rectangular bounding box which contains all of the data in
+	// this table. The numbers represent latitude and longitude in decimal
+	// degrees.
+	Bbox []float64 `json:"bbox,omitempty"`
+
+	// CreationTime: The creation time of this table. The value is an RFC
+	// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z).
+	CreationTime string `json:"creationTime,omitempty"`
+
+	// Description: The description of this table, supplied by the author.
+	Description string `json:"description,omitempty"`
+
+	// DraftAccessList: Deprecated: The name of an access list of the Map
+	// Editor type. The user on whose behalf the request is being sent must
+	// be an editor on that access list. Read About access lists in the
+	// Google Maps Engine help center for more information.
+	DraftAccessList string `json:"draftAccessList,omitempty"`
+
+	// Etag: The ETag, used to refer to the current version of the asset.
+	Etag string `json:"etag,omitempty"`
+
+	// Files: The files associated with this table.
+	Files []*File `json:"files,omitempty"`
+
+	// Id: A globally unique ID, used to refer to this table.
+	Id string `json:"id,omitempty"`
+
+	// LastModifiedTime: The last modified time of this table. The value is
+	// an RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z).
+	LastModifiedTime string `json:"lastModifiedTime,omitempty"`
+
+	// Name: The name of this table, supplied by the author.
+	Name string `json:"name,omitempty"`
+
+	// ProcessingStatus: The processing status of this table.
+	ProcessingStatus string `json:"processingStatus,omitempty"`
+
+	// ProjectId: The ID of the project to which the table belongs.
+	ProjectId string `json:"projectId,omitempty"`
+
+	// PublishedAccessList: Deprecated: The access list to whom view
+	// permissions are granted. The value must be the name of a Maps Engine
+	// access list of the Map Viewer type, and the user must be a viewer on
+	// that list. Read About access lists in the Google Maps Engine help
+	// center for more information.
+	PublishedAccessList string `json:"publishedAccessList,omitempty"`
+
+	// Schema: The schema for this table.
+	Schema *Schema `json:"schema,omitempty"`
+
+	// SourceEncoding: Encoding of the uploaded files. Valid values include
+	// UTF-8, CP1251, ISO 8859-1, and Shift_JIS.
+	SourceEncoding string `json:"sourceEncoding,omitempty"`
+
+	// Tags: An array of text strings, with each string representing a tag.
+	// More information about tags can be found in the Tagging data article
+	// of the Maps Engine help center.
+	Tags []string `json:"tags,omitempty"`
+}
+
+type TableColumn struct {
+	// Name: The column name.
+	Name string `json:"name,omitempty"`
+
+	// Type: The type of data stored in this column.
+	Type string `json:"type,omitempty"`
+}
+
+type TablesListResponse struct {
+	// NextPageToken: Next page token.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// Tables: Resources returned.
+	Tables []*Table `json:"tables,omitempty"`
+}
+
+type ValueRange struct {
+	// Max: Maximum value.
+	Max float64 `json:"max,omitempty"`
+
+	// Min: Minimum value.
+	Min float64 `json:"min,omitempty"`
+}
+
+type VectorStyle struct {
+	DisplayRules []*DisplayRule `json:"displayRules,omitempty"`
+
+	// FeatureInfo: Individual feature info, this is called Info Window in
+	// Maps Engine UI. If not provided, a default template with all
+	// attributes will be generated.
+	FeatureInfo *FeatureInfo `json:"featureInfo,omitempty"`
+
+	// Type: The type of the vector style. Currently, only displayRule is
+	// supported.
+	Type string `json:"type,omitempty"`
+}
+
+type ZoomLevels struct {
+	// Max: Maximum zoom level.
+	Max int64 `json:"max,omitempty"`
+
+	// Min: Minimum zoom level.
+	Min int64 `json:"min,omitempty"`
+}
+
+// method id "mapsengine.assets.get":
+
+type AssetsGetCall struct {
+	s    *Service
+	id   string
+	opt_ map[string]interface{}
+}
+
+// Get: Return metadata for a particular asset.
+func (r *AssetsService) Get(id string) *AssetsGetCall {
+	c := &AssetsGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	return c
+}
+
+func (c *AssetsGetCall) Do() (*Asset, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "assets/{id}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *Asset
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Return metadata for a particular asset.",
+	//   "httpMethod": "GET",
+	//   "id": "mapsengine.assets.get",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the asset.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "assets/{id}",
+	//   "response": {
+	//     "$ref": "Asset"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine",
+	//     "https://www.googleapis.com/auth/mapsengine.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.assets.list":
+
+type AssetsListCall struct {
+	s    *Service
+	opt_ map[string]interface{}
+}
+
+// List: Return all assets readable by the current user.
+func (r *AssetsService) List() *AssetsListCall {
+	c := &AssetsListCall{s: r.s, opt_: make(map[string]interface{})}
+	return c
+}
+
+// Bbox sets the optional parameter "bbox": A bounding box, expressed as
+// "west,south,east,north". If set, only assets which intersect this
+// bounding box will be returned.
+func (c *AssetsListCall) Bbox(bbox string) *AssetsListCall {
+	c.opt_["bbox"] = bbox
+	return c
+}
+
+// CreatedAfter sets the optional parameter "createdAfter": An RFC 3339
+// formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned
+// assets will have been created at or after this time.
+func (c *AssetsListCall) CreatedAfter(createdAfter string) *AssetsListCall {
+	c.opt_["createdAfter"] = createdAfter
+	return c
+}
+
+// CreatedBefore sets the optional parameter "createdBefore": An RFC
+// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned
+// assets will have been created at or before this time.
+func (c *AssetsListCall) CreatedBefore(createdBefore string) *AssetsListCall {
+	c.opt_["createdBefore"] = createdBefore
+	return c
+}
+
+// CreatorEmail sets the optional parameter "creatorEmail": An email
+// address representing a user. Returned assets that have been created
+// by the user associated with the provided email address.
+func (c *AssetsListCall) CreatorEmail(creatorEmail string) *AssetsListCall {
+	c.opt_["creatorEmail"] = creatorEmail
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of items to include in a single response page. The maximum
+// supported value is 100.
+func (c *AssetsListCall) MaxResults(maxResults int64) *AssetsListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// ModifiedAfter sets the optional parameter "modifiedAfter": An RFC
+// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned
+// assets will have been modified at or after this time.
+func (c *AssetsListCall) ModifiedAfter(modifiedAfter string) *AssetsListCall {
+	c.opt_["modifiedAfter"] = modifiedAfter
+	return c
+}
+
+// ModifiedBefore sets the optional parameter "modifiedBefore": An RFC
+// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned
+// assets will have been modified at or before this time.
+func (c *AssetsListCall) ModifiedBefore(modifiedBefore string) *AssetsListCall {
+	c.opt_["modifiedBefore"] = modifiedBefore
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": The continuation
+// token, used to page through large result sets. To get the next page
+// of results, set this parameter to the value of nextPageToken from the
+// previous response.
+func (c *AssetsListCall) PageToken(pageToken string) *AssetsListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+// ProjectId sets the optional parameter "projectId": The ID of a Maps
+// Engine project, used to filter the response. To list all available
+// projects with their IDs, send a Projects: list request. You can also
+// find your project ID as the value of the DashboardPlace:cid URL
+// parameter when signed in to mapsengine.google.com.
+func (c *AssetsListCall) ProjectId(projectId string) *AssetsListCall {
+	c.opt_["projectId"] = projectId
+	return c
+}
+
+// Role sets the optional parameter "role": The role parameter indicates
+// that the response should only contain assets where the current user
+// has the specified level of access.
+func (c *AssetsListCall) Role(role string) *AssetsListCall {
+	c.opt_["role"] = role
+	return c
+}
+
+// Tags sets the optional parameter "tags": A comma separated list of
+// tags. Returned assets will contain all the tags from the list.
+func (c *AssetsListCall) Tags(tags string) *AssetsListCall {
+	c.opt_["tags"] = tags
+	return c
+}
+
+// Type sets the optional parameter "type": An asset type restriction.
+// If set, only resources of this type will be returned.
+func (c *AssetsListCall) Type(type_ string) *AssetsListCall {
+	c.opt_["type"] = type_
+	return c
+}
+
+func (c *AssetsListCall) Do() (*AssetsListResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	if v, ok := c.opt_["bbox"]; ok {
+		params.Set("bbox", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["createdAfter"]; ok {
+		params.Set("createdAfter", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["createdBefore"]; ok {
+		params.Set("createdBefore", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["creatorEmail"]; ok {
+		params.Set("creatorEmail", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["maxResults"]; ok {
+		params.Set("maxResults", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["modifiedAfter"]; ok {
+		params.Set("modifiedAfter", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["modifiedBefore"]; ok {
+		params.Set("modifiedBefore", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["pageToken"]; ok {
+		params.Set("pageToken", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["projectId"]; ok {
+		params.Set("projectId", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["role"]; ok {
+		params.Set("role", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["tags"]; ok {
+		params.Set("tags", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["type"]; ok {
+		params.Set("type", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "assets")
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *AssetsListResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Return all assets readable by the current user.",
+	//   "httpMethod": "GET",
+	//   "id": "mapsengine.assets.list",
+	//   "parameters": {
+	//     "bbox": {
+	//       "description": "A bounding box, expressed as \"west,south,east,north\". If set, only assets which intersect this bounding box will be returned.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "createdAfter": {
+	//       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or after this time.",
+	//       "format": "date-time",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "createdBefore": {
+	//       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or before this time.",
+	//       "format": "date-time",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "creatorEmail": {
+	//       "description": "An email address representing a user. Returned assets that have been created by the user associated with the provided email address.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "description": "The maximum number of items to include in a single response page. The maximum supported value is 100.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "modifiedAfter": {
+	//       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or after this time.",
+	//       "format": "date-time",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "modifiedBefore": {
+	//       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or before this time.",
+	//       "format": "date-time",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "pageToken": {
+	//       "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "projectId": {
+	//       "description": "The ID of a Maps Engine project, used to filter the response. To list all available projects with their IDs, send a Projects: list request. You can also find your project ID as the value of the DashboardPlace:cid URL parameter when signed in to mapsengine.google.com.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "role": {
+	//       "description": "The role parameter indicates that the response should only contain assets where the current user has the specified level of access.",
+	//       "enum": [
+	//         "owner",
+	//         "reader",
+	//         "writer"
+	//       ],
+	//       "enumDescriptions": [
+	//         "The user can read, write and administer the asset.",
+	//         "The user can read the asset.",
+	//         "The user can read and write the asset."
+	//       ],
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "tags": {
+	//       "description": "A comma separated list of tags. Returned assets will contain all the tags from the list.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "type": {
+	//       "description": "An asset type restriction. If set, only resources of this type will be returned.",
+	//       "enum": [
+	//         "layer",
+	//         "map",
+	//         "rasterCollection",
+	//         "table"
+	//       ],
+	//       "enumDescriptions": [
+	//         "Return layers.",
+	//         "Return maps.",
+	//         "Return raster collections.",
+	//         "Return tables."
+	//       ],
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "assets",
+	//   "response": {
+	//     "$ref": "AssetsListResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine",
+	//     "https://www.googleapis.com/auth/mapsengine.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.assets.parents.list":
+
+type AssetsParentsListCall struct {
+	s    *Service
+	id   string
+	opt_ map[string]interface{}
+}
+
+// List: Return all parent ids of the specified asset.
+func (r *AssetsParentsService) List(id string) *AssetsParentsListCall {
+	c := &AssetsParentsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of items to include in a single response page. The maximum
+// supported value is 50.
+func (c *AssetsParentsListCall) MaxResults(maxResults int64) *AssetsParentsListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": The continuation
+// token, used to page through large result sets. To get the next page
+// of results, set this parameter to the value of nextPageToken from the
+// previous response.
+func (c *AssetsParentsListCall) PageToken(pageToken string) *AssetsParentsListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *AssetsParentsListCall) Do() (*ParentsListResponse, 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(c.s.BasePath, "assets/{id}/parents")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *ParentsListResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Return all parent ids of the specified asset.",
+	//   "httpMethod": "GET",
+	//   "id": "mapsengine.assets.parents.list",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the asset whose parents will be listed.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "description": "The maximum number of items to include in a single response page. The maximum supported value is 50.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "assets/{id}/parents",
+	//   "response": {
+	//     "$ref": "ParentsListResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine",
+	//     "https://www.googleapis.com/auth/mapsengine.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.assets.permissions.getIdForEmail":
+
+type AssetsPermissionsGetIdForEmailCall struct {
+	s     *Service
+	email string
+	opt_  map[string]interface{}
+}
+
+// GetIdForEmail: Return permission ID given an email address.
+func (r *AssetsPermissionsService) GetIdForEmail(email string) *AssetsPermissionsGetIdForEmailCall {
+	c := &AssetsPermissionsGetIdForEmailCall{s: r.s, opt_: make(map[string]interface{})}
+	c.email = email
+	return c
+}
+
+func (c *AssetsPermissionsGetIdForEmailCall) Do() (*PermissionsGetIdForEmailResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "permissionids/{email}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"email": c.email,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *PermissionsGetIdForEmailResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Return permission ID given an email address.",
+	//   "httpMethod": "GET",
+	//   "id": "mapsengine.assets.permissions.getIdForEmail",
+	//   "parameterOrder": [
+	//     "email"
+	//   ],
+	//   "parameters": {
+	//     "email": {
+	//       "description": "The email address to be translated into permission ID.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "permissionids/{email}",
+	//   "response": {
+	//     "$ref": "PermissionsGetIdForEmailResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine",
+	//     "https://www.googleapis.com/auth/mapsengine.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.assets.permissions.list":
+
+type AssetsPermissionsListCall struct {
+	s    *Service
+	id   string
+	opt_ map[string]interface{}
+}
+
+// List: Return all of the permissions for the specified asset.
+func (r *AssetsPermissionsService) List(id string) *AssetsPermissionsListCall {
+	c := &AssetsPermissionsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	return c
+}
+
+func (c *AssetsPermissionsListCall) Do() (*PermissionsListResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "assets/{id}/permissions")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *PermissionsListResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Return all of the permissions for the specified asset.",
+	//   "httpMethod": "GET",
+	//   "id": "mapsengine.assets.permissions.list",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the asset whose permissions will be listed.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "assets/{id}/permissions",
+	//   "response": {
+	//     "$ref": "PermissionsListResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine",
+	//     "https://www.googleapis.com/auth/mapsengine.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.layers.cancelProcessing":
+
+type LayersCancelProcessingCall struct {
+	s    *Service
+	id   string
+	opt_ map[string]interface{}
+}
+
+// CancelProcessing: Cancel processing on a layer asset.
+func (r *LayersService) CancelProcessing(id string) *LayersCancelProcessingCall {
+	c := &LayersCancelProcessingCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	return c
+}
+
+func (c *LayersCancelProcessingCall) Do() (*ProcessResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "layers/{id}/cancelProcessing")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *ProcessResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Cancel processing on a layer asset.",
+	//   "httpMethod": "POST",
+	//   "id": "mapsengine.layers.cancelProcessing",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the layer.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "layers/{id}/cancelProcessing",
+	//   "response": {
+	//     "$ref": "ProcessResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.layers.create":
+
+type LayersCreateCall struct {
+	s     *Service
+	layer *Layer
+	opt_  map[string]interface{}
+}
+
+// Create: Create a layer asset.
+func (r *LayersService) Create(layer *Layer) *LayersCreateCall {
+	c := &LayersCreateCall{s: r.s, opt_: make(map[string]interface{})}
+	c.layer = layer
+	return c
+}
+
+// Process sets the optional parameter "process": Whether to queue the
+// created layer for processing.
+func (c *LayersCreateCall) Process(process bool) *LayersCreateCall {
+	c.opt_["process"] = process
+	return c
+}
+
+func (c *LayersCreateCall) Do() (*Layer, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.layer)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	if v, ok := c.opt_["process"]; ok {
+		params.Set("process", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "layers")
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *Layer
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Create a layer asset.",
+	//   "httpMethod": "POST",
+	//   "id": "mapsengine.layers.create",
+	//   "parameters": {
+	//     "process": {
+	//       "description": "Whether to queue the created layer for processing.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     }
+	//   },
+	//   "path": "layers",
+	//   "request": {
+	//     "$ref": "Layer"
+	//   },
+	//   "response": {
+	//     "$ref": "Layer"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.layers.delete":
+
+type LayersDeleteCall struct {
+	s    *Service
+	id   string
+	opt_ map[string]interface{}
+}
+
+// Delete: Delete a layer.
+func (r *LayersService) Delete(id string) *LayersDeleteCall {
+	c := &LayersDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	return c
+}
+
+func (c *LayersDeleteCall) Do() error {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "layers/{id}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return err
+	}
+	return nil
+	// {
+	//   "description": "Delete a layer.",
+	//   "httpMethod": "DELETE",
+	//   "id": "mapsengine.layers.delete",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the layer. Only the layer creator or project owner are permitted to delete. If the layer is published, or included in a map, the request will fail. Unpublish the layer, and remove it from all maps prior to deleting.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "layers/{id}",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.layers.get":
+
+type LayersGetCall struct {
+	s    *Service
+	id   string
+	opt_ map[string]interface{}
+}
+
+// Get: Return metadata for a particular layer.
+func (r *LayersService) Get(id string) *LayersGetCall {
+	c := &LayersGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	return c
+}
+
+// Version sets the optional parameter "version":
+func (c *LayersGetCall) Version(version string) *LayersGetCall {
+	c.opt_["version"] = version
+	return c
+}
+
+func (c *LayersGetCall) Do() (*Layer, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	if v, ok := c.opt_["version"]; ok {
+		params.Set("version", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "layers/{id}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *Layer
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Return metadata for a particular layer.",
+	//   "httpMethod": "GET",
+	//   "id": "mapsengine.layers.get",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the layer.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "version": {
+	//       "enum": [
+	//         "draft",
+	//         "published"
+	//       ],
+	//       "enumDescriptions": [
+	//         "The draft version.",
+	//         "The published version."
+	//       ],
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "layers/{id}",
+	//   "response": {
+	//     "$ref": "Layer"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine",
+	//     "https://www.googleapis.com/auth/mapsengine.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.layers.list":
+
+type LayersListCall struct {
+	s    *Service
+	opt_ map[string]interface{}
+}
+
+// List: Return all layers readable by the current user.
+func (r *LayersService) List() *LayersListCall {
+	c := &LayersListCall{s: r.s, opt_: make(map[string]interface{})}
+	return c
+}
+
+// Bbox sets the optional parameter "bbox": A bounding box, expressed as
+// "west,south,east,north". If set, only assets which intersect this
+// bounding box will be returned.
+func (c *LayersListCall) Bbox(bbox string) *LayersListCall {
+	c.opt_["bbox"] = bbox
+	return c
+}
+
+// CreatedAfter sets the optional parameter "createdAfter": An RFC 3339
+// formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned
+// assets will have been created at or after this time.
+func (c *LayersListCall) CreatedAfter(createdAfter string) *LayersListCall {
+	c.opt_["createdAfter"] = createdAfter
+	return c
+}
+
+// CreatedBefore sets the optional parameter "createdBefore": An RFC
+// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned
+// assets will have been created at or before this time.
+func (c *LayersListCall) CreatedBefore(createdBefore string) *LayersListCall {
+	c.opt_["createdBefore"] = createdBefore
+	return c
+}
+
+// CreatorEmail sets the optional parameter "creatorEmail": An email
+// address representing a user. Returned assets that have been created
+// by the user associated with the provided email address.
+func (c *LayersListCall) CreatorEmail(creatorEmail string) *LayersListCall {
+	c.opt_["creatorEmail"] = creatorEmail
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of items to include in a single response page. The maximum
+// supported value is 100.
+func (c *LayersListCall) MaxResults(maxResults int64) *LayersListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// ModifiedAfter sets the optional parameter "modifiedAfter": An RFC
+// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned
+// assets will have been modified at or after this time.
+func (c *LayersListCall) ModifiedAfter(modifiedAfter string) *LayersListCall {
+	c.opt_["modifiedAfter"] = modifiedAfter
+	return c
+}
+
+// ModifiedBefore sets the optional parameter "modifiedBefore": An RFC
+// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned
+// assets will have been modified at or before this time.
+func (c *LayersListCall) ModifiedBefore(modifiedBefore string) *LayersListCall {
+	c.opt_["modifiedBefore"] = modifiedBefore
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": The continuation
+// token, used to page through large result sets. To get the next page
+// of results, set this parameter to the value of nextPageToken from the
+// previous response.
+func (c *LayersListCall) PageToken(pageToken string) *LayersListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+// ProjectId sets the optional parameter "projectId": The ID of a Maps
+// Engine project, used to filter the response. To list all available
+// projects with their IDs, send a Projects: list request. You can also
+// find your project ID as the value of the DashboardPlace:cid URL
+// parameter when signed in to mapsengine.google.com.
+func (c *LayersListCall) ProjectId(projectId string) *LayersListCall {
+	c.opt_["projectId"] = projectId
+	return c
+}
+
+// Role sets the optional parameter "role": The role parameter indicates
+// that the response should only contain assets where the current user
+// has the specified level of access.
+func (c *LayersListCall) Role(role string) *LayersListCall {
+	c.opt_["role"] = role
+	return c
+}
+
+// Tags sets the optional parameter "tags": A comma separated list of
+// tags. Returned assets will contain all the tags from the list.
+func (c *LayersListCall) Tags(tags string) *LayersListCall {
+	c.opt_["tags"] = tags
+	return c
+}
+
+func (c *LayersListCall) Do() (*LayersListResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	if v, ok := c.opt_["bbox"]; ok {
+		params.Set("bbox", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["createdAfter"]; ok {
+		params.Set("createdAfter", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["createdBefore"]; ok {
+		params.Set("createdBefore", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["creatorEmail"]; ok {
+		params.Set("creatorEmail", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["maxResults"]; ok {
+		params.Set("maxResults", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["modifiedAfter"]; ok {
+		params.Set("modifiedAfter", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["modifiedBefore"]; ok {
+		params.Set("modifiedBefore", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["pageToken"]; ok {
+		params.Set("pageToken", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["projectId"]; ok {
+		params.Set("projectId", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["role"]; ok {
+		params.Set("role", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["tags"]; ok {
+		params.Set("tags", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "layers")
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *LayersListResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Return all layers readable by the current user.",
+	//   "httpMethod": "GET",
+	//   "id": "mapsengine.layers.list",
+	//   "parameters": {
+	//     "bbox": {
+	//       "description": "A bounding box, expressed as \"west,south,east,north\". If set, only assets which intersect this bounding box will be returned.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "createdAfter": {
+	//       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or after this time.",
+	//       "format": "date-time",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "createdBefore": {
+	//       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or before this time.",
+	//       "format": "date-time",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "creatorEmail": {
+	//       "description": "An email address representing a user. Returned assets that have been created by the user associated with the provided email address.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "description": "The maximum number of items to include in a single response page. The maximum supported value is 100.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "modifiedAfter": {
+	//       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or after this time.",
+	//       "format": "date-time",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "modifiedBefore": {
+	//       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or before this time.",
+	//       "format": "date-time",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "pageToken": {
+	//       "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "projectId": {
+	//       "description": "The ID of a Maps Engine project, used to filter the response. To list all available projects with their IDs, send a Projects: list request. You can also find your project ID as the value of the DashboardPlace:cid URL parameter when signed in to mapsengine.google.com.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "role": {
+	//       "description": "The role parameter indicates that the response should only contain assets where the current user has the specified level of access.",
+	//       "enum": [
+	//         "owner",
+	//         "reader",
+	//         "writer"
+	//       ],
+	//       "enumDescriptions": [
+	//         "The user can read, write and administer the asset.",
+	//         "The user can read the asset.",
+	//         "The user can read and write the asset."
+	//       ],
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "tags": {
+	//       "description": "A comma separated list of tags. Returned assets will contain all the tags from the list.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "layers",
+	//   "response": {
+	//     "$ref": "LayersListResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine",
+	//     "https://www.googleapis.com/auth/mapsengine.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.layers.patch":
+
+type LayersPatchCall struct {
+	s     *Service
+	id    string
+	layer *Layer
+	opt_  map[string]interface{}
+}
+
+// Patch: Mutate a layer asset.
+func (r *LayersService) Patch(id string, layer *Layer) *LayersPatchCall {
+	c := &LayersPatchCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	c.layer = layer
+	return c
+}
+
+func (c *LayersPatchCall) Do() error {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.layer)
+	if err != nil {
+		return err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "layers/{id}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("PATCH", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return err
+	}
+	return nil
+	// {
+	//   "description": "Mutate a layer asset.",
+	//   "httpMethod": "PATCH",
+	//   "id": "mapsengine.layers.patch",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the layer.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "layers/{id}",
+	//   "request": {
+	//     "$ref": "Layer"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.layers.process":
+
+type LayersProcessCall struct {
+	s    *Service
+	id   string
+	opt_ map[string]interface{}
+}
+
+// Process: Process a layer asset.
+func (r *LayersService) Process(id string) *LayersProcessCall {
+	c := &LayersProcessCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	return c
+}
+
+func (c *LayersProcessCall) Do() (*ProcessResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "layers/{id}/process")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *ProcessResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Process a layer asset.",
+	//   "httpMethod": "POST",
+	//   "id": "mapsengine.layers.process",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the layer.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "layers/{id}/process",
+	//   "response": {
+	//     "$ref": "ProcessResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.layers.publish":
+
+type LayersPublishCall struct {
+	s    *Service
+	id   string
+	opt_ map[string]interface{}
+}
+
+// Publish: Publish a layer asset.
+func (r *LayersService) Publish(id string) *LayersPublishCall {
+	c := &LayersPublishCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	return c
+}
+
+func (c *LayersPublishCall) Do() (*PublishResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "layers/{id}/publish")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *PublishResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Publish a layer asset.",
+	//   "httpMethod": "POST",
+	//   "id": "mapsengine.layers.publish",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the layer.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "layers/{id}/publish",
+	//   "response": {
+	//     "$ref": "PublishResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.layers.unpublish":
+
+type LayersUnpublishCall struct {
+	s    *Service
+	id   string
+	opt_ map[string]interface{}
+}
+
+// Unpublish: Unpublish a layer asset.
+func (r *LayersService) Unpublish(id string) *LayersUnpublishCall {
+	c := &LayersUnpublishCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	return c
+}
+
+func (c *LayersUnpublishCall) Do() (*PublishResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "layers/{id}/unpublish")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *PublishResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Unpublish a layer asset.",
+	//   "httpMethod": "POST",
+	//   "id": "mapsengine.layers.unpublish",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the layer.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "layers/{id}/unpublish",
+	//   "response": {
+	//     "$ref": "PublishResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.layers.parents.list":
+
+type LayersParentsListCall struct {
+	s    *Service
+	id   string
+	opt_ map[string]interface{}
+}
+
+// List: Return all parent ids of the specified layer.
+func (r *LayersParentsService) List(id string) *LayersParentsListCall {
+	c := &LayersParentsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of items to include in a single response page. The maximum
+// supported value is 50.
+func (c *LayersParentsListCall) MaxResults(maxResults int64) *LayersParentsListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": The continuation
+// token, used to page through large result sets. To get the next page
+// of results, set this parameter to the value of nextPageToken from the
+// previous response.
+func (c *LayersParentsListCall) PageToken(pageToken string) *LayersParentsListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *LayersParentsListCall) Do() (*ParentsListResponse, 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(c.s.BasePath, "layers/{id}/parents")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *ParentsListResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Return all parent ids of the specified layer.",
+	//   "httpMethod": "GET",
+	//   "id": "mapsengine.layers.parents.list",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the layer whose parents will be listed.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "description": "The maximum number of items to include in a single response page. The maximum supported value is 50.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "layers/{id}/parents",
+	//   "response": {
+	//     "$ref": "ParentsListResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine",
+	//     "https://www.googleapis.com/auth/mapsengine.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.layers.permissions.batchInsert":
+
+type LayersPermissionsBatchInsertCall struct {
+	s                             *Service
+	id                            string
+	permissionsbatchinsertrequest *PermissionsBatchInsertRequest
+	opt_                          map[string]interface{}
+}
+
+// BatchInsert: Add permission entries to an already existing asset.
+//
+// An
+// asset can hold up to 20 different permission entries. Each
+// batchInsert request is atomic.
+func (r *LayersPermissionsService) BatchInsert(id string, permissionsbatchinsertrequest *PermissionsBatchInsertRequest) *LayersPermissionsBatchInsertCall {
+	c := &LayersPermissionsBatchInsertCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	c.permissionsbatchinsertrequest = permissionsbatchinsertrequest
+	return c
+}
+
+func (c *LayersPermissionsBatchInsertCall) Do() (*PermissionsBatchInsertResponse, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.permissionsbatchinsertrequest)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "layers/{id}/permissions/batchInsert")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *PermissionsBatchInsertResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Add permission entries to an already existing asset.\n\nAn asset can hold up to 20 different permission entries. Each batchInsert request is atomic.",
+	//   "httpMethod": "POST",
+	//   "id": "mapsengine.layers.permissions.batchInsert",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the asset to which permissions will be added.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "layers/{id}/permissions/batchInsert",
+	//   "request": {
+	//     "$ref": "PermissionsBatchInsertRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "PermissionsBatchInsertResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.layers.permissions.list":
+
+type LayersPermissionsListCall struct {
+	s    *Service
+	id   string
+	opt_ map[string]interface{}
+}
+
+// List: Return all of the permissions for the specified asset.
+func (r *LayersPermissionsService) List(id string) *LayersPermissionsListCall {
+	c := &LayersPermissionsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	return c
+}
+
+func (c *LayersPermissionsListCall) Do() (*PermissionsListResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "layers/{id}/permissions")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *PermissionsListResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Return all of the permissions for the specified asset.",
+	//   "httpMethod": "GET",
+	//   "id": "mapsengine.layers.permissions.list",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the asset whose permissions will be listed.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "layers/{id}/permissions",
+	//   "response": {
+	//     "$ref": "PermissionsListResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine",
+	//     "https://www.googleapis.com/auth/mapsengine.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.maps.create":
+
+type MapsCreateCall struct {
+	s    *Service
+	map_ *Map
+	opt_ map[string]interface{}
+}
+
+// Create: Create a map asset.
+func (r *MapsService) Create(map_ *Map) *MapsCreateCall {
+	c := &MapsCreateCall{s: r.s, opt_: make(map[string]interface{})}
+	c.map_ = map_
+	return c
+}
+
+func (c *MapsCreateCall) Do() (*Map, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.map_)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "maps")
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *Map
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Create a map asset.",
+	//   "httpMethod": "POST",
+	//   "id": "mapsengine.maps.create",
+	//   "path": "maps",
+	//   "request": {
+	//     "$ref": "Map"
+	//   },
+	//   "response": {
+	//     "$ref": "Map"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.maps.delete":
+
+type MapsDeleteCall struct {
+	s    *Service
+	id   string
+	opt_ map[string]interface{}
+}
+
+// Delete: Delete a map.
+func (r *MapsService) Delete(id string) *MapsDeleteCall {
+	c := &MapsDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	return c
+}
+
+func (c *MapsDeleteCall) Do() error {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "maps/{id}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return err
+	}
+	return nil
+	// {
+	//   "description": "Delete a map.",
+	//   "httpMethod": "DELETE",
+	//   "id": "mapsengine.maps.delete",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the map. Only the map creator or project owner are permitted to delete. If the map is published the request will fail. Unpublish the map prior to deleting.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "maps/{id}",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.maps.get":
+
+type MapsGetCall struct {
+	s    *Service
+	id   string
+	opt_ map[string]interface{}
+}
+
+// Get: Return metadata for a particular map.
+func (r *MapsService) Get(id string) *MapsGetCall {
+	c := &MapsGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	return c
+}
+
+// Version sets the optional parameter "version":
+func (c *MapsGetCall) Version(version string) *MapsGetCall {
+	c.opt_["version"] = version
+	return c
+}
+
+func (c *MapsGetCall) Do() (*Map, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	if v, ok := c.opt_["version"]; ok {
+		params.Set("version", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "maps/{id}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *Map
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Return metadata for a particular map.",
+	//   "httpMethod": "GET",
+	//   "id": "mapsengine.maps.get",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the map.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "version": {
+	//       "enum": [
+	//         "draft",
+	//         "published"
+	//       ],
+	//       "enumDescriptions": [
+	//         "The draft version.",
+	//         "The published version."
+	//       ],
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "maps/{id}",
+	//   "response": {
+	//     "$ref": "Map"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine",
+	//     "https://www.googleapis.com/auth/mapsengine.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.maps.list":
+
+type MapsListCall struct {
+	s    *Service
+	opt_ map[string]interface{}
+}
+
+// List: Return all maps readable by the current user.
+func (r *MapsService) List() *MapsListCall {
+	c := &MapsListCall{s: r.s, opt_: make(map[string]interface{})}
+	return c
+}
+
+// Bbox sets the optional parameter "bbox": A bounding box, expressed as
+// "west,south,east,north". If set, only assets which intersect this
+// bounding box will be returned.
+func (c *MapsListCall) Bbox(bbox string) *MapsListCall {
+	c.opt_["bbox"] = bbox
+	return c
+}
+
+// CreatedAfter sets the optional parameter "createdAfter": An RFC 3339
+// formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned
+// assets will have been created at or after this time.
+func (c *MapsListCall) CreatedAfter(createdAfter string) *MapsListCall {
+	c.opt_["createdAfter"] = createdAfter
+	return c
+}
+
+// CreatedBefore sets the optional parameter "createdBefore": An RFC
+// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned
+// assets will have been created at or before this time.
+func (c *MapsListCall) CreatedBefore(createdBefore string) *MapsListCall {
+	c.opt_["createdBefore"] = createdBefore
+	return c
+}
+
+// CreatorEmail sets the optional parameter "creatorEmail": An email
+// address representing a user. Returned assets that have been created
+// by the user associated with the provided email address.
+func (c *MapsListCall) CreatorEmail(creatorEmail string) *MapsListCall {
+	c.opt_["creatorEmail"] = creatorEmail
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of items to include in a single response page. The maximum
+// supported value is 100.
+func (c *MapsListCall) MaxResults(maxResults int64) *MapsListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// ModifiedAfter sets the optional parameter "modifiedAfter": An RFC
+// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned
+// assets will have been modified at or after this time.
+func (c *MapsListCall) ModifiedAfter(modifiedAfter string) *MapsListCall {
+	c.opt_["modifiedAfter"] = modifiedAfter
+	return c
+}
+
+// ModifiedBefore sets the optional parameter "modifiedBefore": An RFC
+// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned
+// assets will have been modified at or before this time.
+func (c *MapsListCall) ModifiedBefore(modifiedBefore string) *MapsListCall {
+	c.opt_["modifiedBefore"] = modifiedBefore
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": The continuation
+// token, used to page through large result sets. To get the next page
+// of results, set this parameter to the value of nextPageToken from the
+// previous response.
+func (c *MapsListCall) PageToken(pageToken string) *MapsListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+// ProjectId sets the optional parameter "projectId": The ID of a Maps
+// Engine project, used to filter the response. To list all available
+// projects with their IDs, send a Projects: list request. You can also
+// find your project ID as the value of the DashboardPlace:cid URL
+// parameter when signed in to mapsengine.google.com.
+func (c *MapsListCall) ProjectId(projectId string) *MapsListCall {
+	c.opt_["projectId"] = projectId
+	return c
+}
+
+// Role sets the optional parameter "role": The role parameter indicates
+// that the response should only contain assets where the current user
+// has the specified level of access.
+func (c *MapsListCall) Role(role string) *MapsListCall {
+	c.opt_["role"] = role
+	return c
+}
+
+// Tags sets the optional parameter "tags": A comma separated list of
+// tags. Returned assets will contain all the tags from the list.
+func (c *MapsListCall) Tags(tags string) *MapsListCall {
+	c.opt_["tags"] = tags
+	return c
+}
+
+// Version sets the optional parameter "version":
+func (c *MapsListCall) Version(version string) *MapsListCall {
+	c.opt_["version"] = version
+	return c
+}
+
+func (c *MapsListCall) Do() (*MapsListResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	if v, ok := c.opt_["bbox"]; ok {
+		params.Set("bbox", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["createdAfter"]; ok {
+		params.Set("createdAfter", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["createdBefore"]; ok {
+		params.Set("createdBefore", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["creatorEmail"]; ok {
+		params.Set("creatorEmail", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["maxResults"]; ok {
+		params.Set("maxResults", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["modifiedAfter"]; ok {
+		params.Set("modifiedAfter", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["modifiedBefore"]; ok {
+		params.Set("modifiedBefore", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["pageToken"]; ok {
+		params.Set("pageToken", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["projectId"]; ok {
+		params.Set("projectId", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["role"]; ok {
+		params.Set("role", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["tags"]; ok {
+		params.Set("tags", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["version"]; ok {
+		params.Set("version", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "maps")
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *MapsListResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Return all maps readable by the current user.",
+	//   "httpMethod": "GET",
+	//   "id": "mapsengine.maps.list",
+	//   "parameters": {
+	//     "bbox": {
+	//       "description": "A bounding box, expressed as \"west,south,east,north\". If set, only assets which intersect this bounding box will be returned.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "createdAfter": {
+	//       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or after this time.",
+	//       "format": "date-time",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "createdBefore": {
+	//       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or before this time.",
+	//       "format": "date-time",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "creatorEmail": {
+	//       "description": "An email address representing a user. Returned assets that have been created by the user associated with the provided email address.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "description": "The maximum number of items to include in a single response page. The maximum supported value is 100.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "modifiedAfter": {
+	//       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or after this time.",
+	//       "format": "date-time",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "modifiedBefore": {
+	//       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or before this time.",
+	//       "format": "date-time",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "pageToken": {
+	//       "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "projectId": {
+	//       "description": "The ID of a Maps Engine project, used to filter the response. To list all available projects with their IDs, send a Projects: list request. You can also find your project ID as the value of the DashboardPlace:cid URL parameter when signed in to mapsengine.google.com.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "role": {
+	//       "description": "The role parameter indicates that the response should only contain assets where the current user has the specified level of access.",
+	//       "enum": [
+	//         "owner",
+	//         "reader",
+	//         "writer"
+	//       ],
+	//       "enumDescriptions": [
+	//         "The user can read, write and administer the asset.",
+	//         "The user can read the asset.",
+	//         "The user can read and write the asset."
+	//       ],
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "tags": {
+	//       "description": "A comma separated list of tags. Returned assets will contain all the tags from the list.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "version": {
+	//       "enum": [
+	//         "draft",
+	//         "published"
+	//       ],
+	//       "enumDescriptions": [
+	//         "The draft version.",
+	//         "The published version."
+	//       ],
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "maps",
+	//   "response": {
+	//     "$ref": "MapsListResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine",
+	//     "https://www.googleapis.com/auth/mapsengine.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.maps.patch":
+
+type MapsPatchCall struct {
+	s    *Service
+	id   string
+	map_ *Map
+	opt_ map[string]interface{}
+}
+
+// Patch: Mutate a map asset.
+func (r *MapsService) Patch(id string, map_ *Map) *MapsPatchCall {
+	c := &MapsPatchCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	c.map_ = map_
+	return c
+}
+
+func (c *MapsPatchCall) Do() error {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.map_)
+	if err != nil {
+		return err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "maps/{id}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("PATCH", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return err
+	}
+	return nil
+	// {
+	//   "description": "Mutate a map asset.",
+	//   "httpMethod": "PATCH",
+	//   "id": "mapsengine.maps.patch",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the map.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "maps/{id}",
+	//   "request": {
+	//     "$ref": "Map"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.maps.publish":
+
+type MapsPublishCall struct {
+	s    *Service
+	id   string
+	opt_ map[string]interface{}
+}
+
+// Publish: Publish a map asset.
+func (r *MapsService) Publish(id string) *MapsPublishCall {
+	c := &MapsPublishCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	return c
+}
+
+func (c *MapsPublishCall) Do() (*PublishResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "maps/{id}/publish")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *PublishResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Publish a map asset.",
+	//   "httpMethod": "POST",
+	//   "id": "mapsengine.maps.publish",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the map.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "maps/{id}/publish",
+	//   "response": {
+	//     "$ref": "PublishResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.maps.unpublish":
+
+type MapsUnpublishCall struct {
+	s    *Service
+	id   string
+	opt_ map[string]interface{}
+}
+
+// Unpublish: Unpublish a map asset.
+func (r *MapsService) Unpublish(id string) *MapsUnpublishCall {
+	c := &MapsUnpublishCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	return c
+}
+
+func (c *MapsUnpublishCall) Do() (*PublishResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "maps/{id}/unpublish")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *PublishResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Unpublish a map asset.",
+	//   "httpMethod": "POST",
+	//   "id": "mapsengine.maps.unpublish",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the map.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "maps/{id}/unpublish",
+	//   "response": {
+	//     "$ref": "PublishResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.maps.permissions.batchInsert":
+
+type MapsPermissionsBatchInsertCall struct {
+	s                             *Service
+	id                            string
+	permissionsbatchinsertrequest *PermissionsBatchInsertRequest
+	opt_                          map[string]interface{}
+}
+
+// BatchInsert: Add permission entries to an already existing asset.
+//
+// An
+// asset can hold up to 20 different permission entries. Each
+// batchInsert request is atomic.
+func (r *MapsPermissionsService) BatchInsert(id string, permissionsbatchinsertrequest *PermissionsBatchInsertRequest) *MapsPermissionsBatchInsertCall {
+	c := &MapsPermissionsBatchInsertCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	c.permissionsbatchinsertrequest = permissionsbatchinsertrequest
+	return c
+}
+
+func (c *MapsPermissionsBatchInsertCall) Do() (*PermissionsBatchInsertResponse, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.permissionsbatchinsertrequest)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "maps/{id}/permissions/batchInsert")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *PermissionsBatchInsertResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Add permission entries to an already existing asset.\n\nAn asset can hold up to 20 different permission entries. Each batchInsert request is atomic.",
+	//   "httpMethod": "POST",
+	//   "id": "mapsengine.maps.permissions.batchInsert",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the asset to which permissions will be added.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "maps/{id}/permissions/batchInsert",
+	//   "request": {
+	//     "$ref": "PermissionsBatchInsertRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "PermissionsBatchInsertResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.maps.permissions.list":
+
+type MapsPermissionsListCall struct {
+	s    *Service
+	id   string
+	opt_ map[string]interface{}
+}
+
+// List: Return all of the permissions for the specified asset.
+func (r *MapsPermissionsService) List(id string) *MapsPermissionsListCall {
+	c := &MapsPermissionsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	return c
+}
+
+func (c *MapsPermissionsListCall) Do() (*PermissionsListResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "maps/{id}/permissions")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *PermissionsListResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Return all of the permissions for the specified asset.",
+	//   "httpMethod": "GET",
+	//   "id": "mapsengine.maps.permissions.list",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the asset whose permissions will be listed.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "maps/{id}/permissions",
+	//   "response": {
+	//     "$ref": "PermissionsListResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine",
+	//     "https://www.googleapis.com/auth/mapsengine.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.projects.list":
+
+type ProjectsListCall struct {
+	s    *Service
+	opt_ map[string]interface{}
+}
+
+// List: Return all projects readable by the current user.
+func (r *ProjectsService) List() *ProjectsListCall {
+	c := &ProjectsListCall{s: r.s, opt_: make(map[string]interface{})}
+	return c
+}
+
+func (c *ProjectsListCall) Do() (*ProjectsListResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "projects")
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *ProjectsListResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Return all projects readable by the current user.",
+	//   "httpMethod": "GET",
+	//   "id": "mapsengine.projects.list",
+	//   "path": "projects",
+	//   "response": {
+	//     "$ref": "ProjectsListResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine",
+	//     "https://www.googleapis.com/auth/mapsengine.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.projects.icons.create":
+
+type ProjectsIconsCreateCall struct {
+	s         *Service
+	projectId string
+	icon      *Icon
+	opt_      map[string]interface{}
+	media_    io.Reader
+}
+
+// Create: Create an icon.
+func (r *ProjectsIconsService) Create(projectId string, icon *Icon) *ProjectsIconsCreateCall {
+	c := &ProjectsIconsCreateCall{s: r.s, opt_: make(map[string]interface{})}
+	c.projectId = projectId
+	c.icon = icon
+	return c
+}
+func (c *ProjectsIconsCreateCall) Media(r io.Reader) *ProjectsIconsCreateCall {
+	c.media_ = r
+	return c
+}
+
+func (c *ProjectsIconsCreateCall) Do() (*Icon, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.icon)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{projectId}/icons")
+	if c.media_ != nil {
+		urls = strings.Replace(urls, "https://www.googleapis.com/", "https://www.googleapis.com/upload/", 1)
+		params.Set("uploadType", "multipart")
+	}
+	urls += "?" + params.Encode()
+	contentLength_, hasMedia_ := googleapi.ConditionallyIncludeMedia(c.media_, &body, &ctype)
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"projectId": c.projectId,
+	})
+	if hasMedia_ {
+		req.ContentLength = contentLength_
+	}
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *Icon
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Create an icon.",
+	//   "httpMethod": "POST",
+	//   "id": "mapsengine.projects.icons.create",
+	//   "mediaUpload": {
+	//     "accept": [
+	//       "*/*"
+	//     ],
+	//     "maxSize": "100KB",
+	//     "protocols": {
+	//       "resumable": {
+	//         "multipart": true,
+	//         "path": "/resumable/upload/mapsengine/exp2/projects/{projectId}/icons"
+	//       },
+	//       "simple": {
+	//         "multipart": true,
+	//         "path": "/upload/mapsengine/exp2/projects/{projectId}/icons"
+	//       }
+	//     }
+	//   },
+	//   "parameterOrder": [
+	//     "projectId"
+	//   ],
+	//   "parameters": {
+	//     "projectId": {
+	//       "description": "The ID of the project.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "projects/{projectId}/icons",
+	//   "request": {
+	//     "$ref": "Icon"
+	//   },
+	//   "response": {
+	//     "$ref": "Icon"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ],
+	//   "supportsMediaUpload": true
+	// }
+
+}
+
+// method id "mapsengine.projects.icons.get":
+
+type ProjectsIconsGetCall struct {
+	s         *Service
+	projectId string
+	id        string
+	opt_      map[string]interface{}
+}
+
+// Get: Return metadata for a specific icon
+func (r *ProjectsIconsService) Get(projectId string, id string) *ProjectsIconsGetCall {
+	c := &ProjectsIconsGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.projectId = projectId
+	c.id = id
+	return c
+}
+
+func (c *ProjectsIconsGetCall) Do() (*Icon, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{projectId}/icons/{id}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"projectId": c.projectId,
+		"id":        c.id,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *Icon
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Return metadata for a specific icon",
+	//   "httpMethod": "GET",
+	//   "id": "mapsengine.projects.icons.get",
+	//   "parameterOrder": [
+	//     "projectId",
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the icon.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "projectId": {
+	//       "description": "The ID of the project.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "projects/{projectId}/icons/{id}",
+	//   "response": {
+	//     "$ref": "Icon"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine",
+	//     "https://www.googleapis.com/auth/mapsengine.readonly"
+	//   ],
+	//   "supportsMediaDownload": true
+	// }
+
+}
+
+// method id "mapsengine.projects.icons.list":
+
+type ProjectsIconsListCall struct {
+	s         *Service
+	projectId string
+	opt_      map[string]interface{}
+}
+
+// List: Return all icons in the current project
+func (r *ProjectsIconsService) List(projectId string) *ProjectsIconsListCall {
+	c := &ProjectsIconsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.projectId = projectId
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of items to include in a single response page. The maximum
+// supported value is 50.
+func (c *ProjectsIconsListCall) MaxResults(maxResults int64) *ProjectsIconsListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": The continuation
+// token, used to page through large result sets. To get the next page
+// of results, set this parameter to the value of nextPageToken from the
+// previous response.
+func (c *ProjectsIconsListCall) PageToken(pageToken string) *ProjectsIconsListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *ProjectsIconsListCall) Do() (*IconsListResponse, 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(c.s.BasePath, "projects/{projectId}/icons")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"projectId": c.projectId,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *IconsListResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Return all icons in the current project",
+	//   "httpMethod": "GET",
+	//   "id": "mapsengine.projects.icons.list",
+	//   "parameterOrder": [
+	//     "projectId"
+	//   ],
+	//   "parameters": {
+	//     "maxResults": {
+	//       "description": "The maximum number of items to include in a single response page. The maximum supported value is 50.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "projectId": {
+	//       "description": "The ID of the project.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "projects/{projectId}/icons",
+	//   "response": {
+	//     "$ref": "IconsListResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine",
+	//     "https://www.googleapis.com/auth/mapsengine.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.rasterCollections.cancelProcessing":
+
+type RasterCollectionsCancelProcessingCall struct {
+	s    *Service
+	id   string
+	opt_ map[string]interface{}
+}
+
+// CancelProcessing: Cancel processing on a raster collection asset.
+func (r *RasterCollectionsService) CancelProcessing(id string) *RasterCollectionsCancelProcessingCall {
+	c := &RasterCollectionsCancelProcessingCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	return c
+}
+
+func (c *RasterCollectionsCancelProcessingCall) Do() (*ProcessResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "rasterCollections/{id}/cancelProcessing")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *ProcessResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Cancel processing on a raster collection asset.",
+	//   "httpMethod": "POST",
+	//   "id": "mapsengine.rasterCollections.cancelProcessing",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the raster collection.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "rasterCollections/{id}/cancelProcessing",
+	//   "response": {
+	//     "$ref": "ProcessResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.rasterCollections.create":
+
+type RasterCollectionsCreateCall struct {
+	s                *Service
+	rastercollection *RasterCollection
+	opt_             map[string]interface{}
+}
+
+// Create: Create a raster collection asset.
+func (r *RasterCollectionsService) Create(rastercollection *RasterCollection) *RasterCollectionsCreateCall {
+	c := &RasterCollectionsCreateCall{s: r.s, opt_: make(map[string]interface{})}
+	c.rastercollection = rastercollection
+	return c
+}
+
+func (c *RasterCollectionsCreateCall) Do() (*RasterCollection, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.rastercollection)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "rasterCollections")
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *RasterCollection
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Create a raster collection asset.",
+	//   "httpMethod": "POST",
+	//   "id": "mapsengine.rasterCollections.create",
+	//   "path": "rasterCollections",
+	//   "request": {
+	//     "$ref": "RasterCollection"
+	//   },
+	//   "response": {
+	//     "$ref": "RasterCollection"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.rasterCollections.delete":
+
+type RasterCollectionsDeleteCall struct {
+	s    *Service
+	id   string
+	opt_ map[string]interface{}
+}
+
+// Delete: Delete a raster collection.
+func (r *RasterCollectionsService) Delete(id string) *RasterCollectionsDeleteCall {
+	c := &RasterCollectionsDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	return c
+}
+
+func (c *RasterCollectionsDeleteCall) Do() error {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "rasterCollections/{id}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return err
+	}
+	return nil
+	// {
+	//   "description": "Delete a raster collection.",
+	//   "httpMethod": "DELETE",
+	//   "id": "mapsengine.rasterCollections.delete",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the raster collection. Only the raster collection creator or project owner are permitted to delete. If the rastor collection is included in a layer, the request will fail. Remove the raster collection from all layers prior to deleting.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "rasterCollections/{id}",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.rasterCollections.get":
+
+type RasterCollectionsGetCall struct {
+	s    *Service
+	id   string
+	opt_ map[string]interface{}
+}
+
+// Get: Return metadata for a particular raster collection.
+func (r *RasterCollectionsService) Get(id string) *RasterCollectionsGetCall {
+	c := &RasterCollectionsGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	return c
+}
+
+func (c *RasterCollectionsGetCall) Do() (*RasterCollection, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "rasterCollections/{id}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *RasterCollection
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Return metadata for a particular raster collection.",
+	//   "httpMethod": "GET",
+	//   "id": "mapsengine.rasterCollections.get",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the raster collection.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "rasterCollections/{id}",
+	//   "response": {
+	//     "$ref": "RasterCollection"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine",
+	//     "https://www.googleapis.com/auth/mapsengine.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.rasterCollections.list":
+
+type RasterCollectionsListCall struct {
+	s    *Service
+	opt_ map[string]interface{}
+}
+
+// List: Return all raster collections readable by the current user.
+func (r *RasterCollectionsService) List() *RasterCollectionsListCall {
+	c := &RasterCollectionsListCall{s: r.s, opt_: make(map[string]interface{})}
+	return c
+}
+
+// Bbox sets the optional parameter "bbox": A bounding box, expressed as
+// "west,south,east,north". If set, only assets which intersect this
+// bounding box will be returned.
+func (c *RasterCollectionsListCall) Bbox(bbox string) *RasterCollectionsListCall {
+	c.opt_["bbox"] = bbox
+	return c
+}
+
+// CreatedAfter sets the optional parameter "createdAfter": An RFC 3339
+// formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned
+// assets will have been created at or after this time.
+func (c *RasterCollectionsListCall) CreatedAfter(createdAfter string) *RasterCollectionsListCall {
+	c.opt_["createdAfter"] = createdAfter
+	return c
+}
+
+// CreatedBefore sets the optional parameter "createdBefore": An RFC
+// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned
+// assets will have been created at or before this time.
+func (c *RasterCollectionsListCall) CreatedBefore(createdBefore string) *RasterCollectionsListCall {
+	c.opt_["createdBefore"] = createdBefore
+	return c
+}
+
+// CreatorEmail sets the optional parameter "creatorEmail": An email
+// address representing a user. Returned assets that have been created
+// by the user associated with the provided email address.
+func (c *RasterCollectionsListCall) CreatorEmail(creatorEmail string) *RasterCollectionsListCall {
+	c.opt_["creatorEmail"] = creatorEmail
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of items to include in a single response page. The maximum
+// supported value is 100.
+func (c *RasterCollectionsListCall) MaxResults(maxResults int64) *RasterCollectionsListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// ModifiedAfter sets the optional parameter "modifiedAfter": An RFC
+// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned
+// assets will have been modified at or after this time.
+func (c *RasterCollectionsListCall) ModifiedAfter(modifiedAfter string) *RasterCollectionsListCall {
+	c.opt_["modifiedAfter"] = modifiedAfter
+	return c
+}
+
+// ModifiedBefore sets the optional parameter "modifiedBefore": An RFC
+// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned
+// assets will have been modified at or before this time.
+func (c *RasterCollectionsListCall) ModifiedBefore(modifiedBefore string) *RasterCollectionsListCall {
+	c.opt_["modifiedBefore"] = modifiedBefore
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": The continuation
+// token, used to page through large result sets. To get the next page
+// of results, set this parameter to the value of nextPageToken from the
+// previous response.
+func (c *RasterCollectionsListCall) PageToken(pageToken string) *RasterCollectionsListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+// ProjectId sets the optional parameter "projectId": The ID of a Maps
+// Engine project, used to filter the response. To list all available
+// projects with their IDs, send a Projects: list request. You can also
+// find your project ID as the value of the DashboardPlace:cid URL
+// parameter when signed in to mapsengine.google.com.
+func (c *RasterCollectionsListCall) ProjectId(projectId string) *RasterCollectionsListCall {
+	c.opt_["projectId"] = projectId
+	return c
+}
+
+// Role sets the optional parameter "role": The role parameter indicates
+// that the response should only contain assets where the current user
+// has the specified level of access.
+func (c *RasterCollectionsListCall) Role(role string) *RasterCollectionsListCall {
+	c.opt_["role"] = role
+	return c
+}
+
+// Tags sets the optional parameter "tags": A comma separated list of
+// tags. Returned assets will contain all the tags from the list.
+func (c *RasterCollectionsListCall) Tags(tags string) *RasterCollectionsListCall {
+	c.opt_["tags"] = tags
+	return c
+}
+
+func (c *RasterCollectionsListCall) Do() (*RasterCollectionsListResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	if v, ok := c.opt_["bbox"]; ok {
+		params.Set("bbox", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["createdAfter"]; ok {
+		params.Set("createdAfter", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["createdBefore"]; ok {
+		params.Set("createdBefore", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["creatorEmail"]; ok {
+		params.Set("creatorEmail", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["maxResults"]; ok {
+		params.Set("maxResults", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["modifiedAfter"]; ok {
+		params.Set("modifiedAfter", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["modifiedBefore"]; ok {
+		params.Set("modifiedBefore", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["pageToken"]; ok {
+		params.Set("pageToken", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["projectId"]; ok {
+		params.Set("projectId", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["role"]; ok {
+		params.Set("role", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["tags"]; ok {
+		params.Set("tags", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "rasterCollections")
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *RasterCollectionsListResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Return all raster collections readable by the current user.",
+	//   "httpMethod": "GET",
+	//   "id": "mapsengine.rasterCollections.list",
+	//   "parameters": {
+	//     "bbox": {
+	//       "description": "A bounding box, expressed as \"west,south,east,north\". If set, only assets which intersect this bounding box will be returned.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "createdAfter": {
+	//       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or after this time.",
+	//       "format": "date-time",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "createdBefore": {
+	//       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or before this time.",
+	//       "format": "date-time",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "creatorEmail": {
+	//       "description": "An email address representing a user. Returned assets that have been created by the user associated with the provided email address.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "description": "The maximum number of items to include in a single response page. The maximum supported value is 100.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "modifiedAfter": {
+	//       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or after this time.",
+	//       "format": "date-time",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "modifiedBefore": {
+	//       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or before this time.",
+	//       "format": "date-time",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "pageToken": {
+	//       "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "projectId": {
+	//       "description": "The ID of a Maps Engine project, used to filter the response. To list all available projects with their IDs, send a Projects: list request. You can also find your project ID as the value of the DashboardPlace:cid URL parameter when signed in to mapsengine.google.com.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "role": {
+	//       "description": "The role parameter indicates that the response should only contain assets where the current user has the specified level of access.",
+	//       "enum": [
+	//         "owner",
+	//         "reader",
+	//         "writer"
+	//       ],
+	//       "enumDescriptions": [
+	//         "The user can read, write and administer the asset.",
+	//         "The user can read the asset.",
+	//         "The user can read and write the asset."
+	//       ],
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "tags": {
+	//       "description": "A comma separated list of tags. Returned assets will contain all the tags from the list.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "rasterCollections",
+	//   "response": {
+	//     "$ref": "RasterCollectionsListResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine",
+	//     "https://www.googleapis.com/auth/mapsengine.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.rasterCollections.patch":
+
+type RasterCollectionsPatchCall struct {
+	s                *Service
+	id               string
+	rastercollection *RasterCollection
+	opt_             map[string]interface{}
+}
+
+// Patch: Mutate a raster collection asset.
+func (r *RasterCollectionsService) Patch(id string, rastercollection *RasterCollection) *RasterCollectionsPatchCall {
+	c := &RasterCollectionsPatchCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	c.rastercollection = rastercollection
+	return c
+}
+
+func (c *RasterCollectionsPatchCall) Do() error {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.rastercollection)
+	if err != nil {
+		return err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "rasterCollections/{id}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("PATCH", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return err
+	}
+	return nil
+	// {
+	//   "description": "Mutate a raster collection asset.",
+	//   "httpMethod": "PATCH",
+	//   "id": "mapsengine.rasterCollections.patch",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the raster collection.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "rasterCollections/{id}",
+	//   "request": {
+	//     "$ref": "RasterCollection"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.rasterCollections.process":
+
+type RasterCollectionsProcessCall struct {
+	s    *Service
+	id   string
+	opt_ map[string]interface{}
+}
+
+// Process: Process a raster collection asset.
+func (r *RasterCollectionsService) Process(id string) *RasterCollectionsProcessCall {
+	c := &RasterCollectionsProcessCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	return c
+}
+
+func (c *RasterCollectionsProcessCall) Do() (*ProcessResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "rasterCollections/{id}/process")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *ProcessResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Process a raster collection asset.",
+	//   "httpMethod": "POST",
+	//   "id": "mapsengine.rasterCollections.process",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the raster collection.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "rasterCollections/{id}/process",
+	//   "response": {
+	//     "$ref": "ProcessResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.rasterCollections.parents.list":
+
+type RasterCollectionsParentsListCall struct {
+	s    *Service
+	id   string
+	opt_ map[string]interface{}
+}
+
+// List: Return all parent ids of the specified raster collection.
+func (r *RasterCollectionsParentsService) List(id string) *RasterCollectionsParentsListCall {
+	c := &RasterCollectionsParentsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of items to include in a single response page. The maximum
+// supported value is 50.
+func (c *RasterCollectionsParentsListCall) MaxResults(maxResults int64) *RasterCollectionsParentsListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": The continuation
+// token, used to page through large result sets. To get the next page
+// of results, set this parameter to the value of nextPageToken from the
+// previous response.
+func (c *RasterCollectionsParentsListCall) PageToken(pageToken string) *RasterCollectionsParentsListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *RasterCollectionsParentsListCall) Do() (*ParentsListResponse, 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(c.s.BasePath, "rasterCollections/{id}/parents")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *ParentsListResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Return all parent ids of the specified raster collection.",
+	//   "httpMethod": "GET",
+	//   "id": "mapsengine.rasterCollections.parents.list",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the raster collection whose parents will be listed.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "description": "The maximum number of items to include in a single response page. The maximum supported value is 50.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "rasterCollections/{id}/parents",
+	//   "response": {
+	//     "$ref": "ParentsListResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine",
+	//     "https://www.googleapis.com/auth/mapsengine.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.rasterCollections.permissions.batchInsert":
+
+type RasterCollectionsPermissionsBatchInsertCall struct {
+	s                             *Service
+	id                            string
+	permissionsbatchinsertrequest *PermissionsBatchInsertRequest
+	opt_                          map[string]interface{}
+}
+
+// BatchInsert: Add permission entries to an already existing asset.
+//
+// An
+// asset can hold up to 20 different permission entries. Each
+// batchInsert request is atomic.
+func (r *RasterCollectionsPermissionsService) BatchInsert(id string, permissionsbatchinsertrequest *PermissionsBatchInsertRequest) *RasterCollectionsPermissionsBatchInsertCall {
+	c := &RasterCollectionsPermissionsBatchInsertCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	c.permissionsbatchinsertrequest = permissionsbatchinsertrequest
+	return c
+}
+
+func (c *RasterCollectionsPermissionsBatchInsertCall) Do() (*PermissionsBatchInsertResponse, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.permissionsbatchinsertrequest)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "rasterCollections/{id}/permissions/batchInsert")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *PermissionsBatchInsertResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Add permission entries to an already existing asset.\n\nAn asset can hold up to 20 different permission entries. Each batchInsert request is atomic.",
+	//   "httpMethod": "POST",
+	//   "id": "mapsengine.rasterCollections.permissions.batchInsert",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the asset to which permissions will be added.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "rasterCollections/{id}/permissions/batchInsert",
+	//   "request": {
+	//     "$ref": "PermissionsBatchInsertRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "PermissionsBatchInsertResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.rasterCollections.permissions.list":
+
+type RasterCollectionsPermissionsListCall struct {
+	s    *Service
+	id   string
+	opt_ map[string]interface{}
+}
+
+// List: Return all of the permissions for the specified asset.
+func (r *RasterCollectionsPermissionsService) List(id string) *RasterCollectionsPermissionsListCall {
+	c := &RasterCollectionsPermissionsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	return c
+}
+
+func (c *RasterCollectionsPermissionsListCall) Do() (*PermissionsListResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "rasterCollections/{id}/permissions")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *PermissionsListResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Return all of the permissions for the specified asset.",
+	//   "httpMethod": "GET",
+	//   "id": "mapsengine.rasterCollections.permissions.list",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the asset whose permissions will be listed.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "rasterCollections/{id}/permissions",
+	//   "response": {
+	//     "$ref": "PermissionsListResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine",
+	//     "https://www.googleapis.com/auth/mapsengine.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.rasterCollections.rasters.batchDelete":
+
+type RasterCollectionsRastersBatchDeleteCall struct {
+	s                                         *Service
+	id                                        string
+	rastercollectionsrasterbatchdeleterequest *RasterCollectionsRasterBatchDeleteRequest
+	opt_                                      map[string]interface{}
+}
+
+// BatchDelete: Remove rasters from an existing raster collection.
+//
+// Up
+// to 50 rasters can be included in a single batchDelete request. Each
+// batchDelete request is atomic.
+func (r *RasterCollectionsRastersService) BatchDelete(id string, rastercollectionsrasterbatchdeleterequest *RasterCollectionsRasterBatchDeleteRequest) *RasterCollectionsRastersBatchDeleteCall {
+	c := &RasterCollectionsRastersBatchDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	c.rastercollectionsrasterbatchdeleterequest = rastercollectionsrasterbatchdeleterequest
+	return c
+}
+
+func (c *RasterCollectionsRastersBatchDeleteCall) Do() (*RasterCollectionsRastersBatchDeleteResponse, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.rastercollectionsrasterbatchdeleterequest)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "rasterCollections/{id}/rasters/batchDelete")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *RasterCollectionsRastersBatchDeleteResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Remove rasters from an existing raster collection.\n\nUp to 50 rasters can be included in a single batchDelete request. Each batchDelete request is atomic.",
+	//   "httpMethod": "POST",
+	//   "id": "mapsengine.rasterCollections.rasters.batchDelete",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the raster collection to which these rasters belong.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "rasterCollections/{id}/rasters/batchDelete",
+	//   "request": {
+	//     "$ref": "RasterCollectionsRasterBatchDeleteRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "RasterCollectionsRastersBatchDeleteResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.rasterCollections.rasters.batchInsert":
+
+type RasterCollectionsRastersBatchInsertCall struct {
+	s                                          *Service
+	id                                         string
+	rastercollectionsrastersbatchinsertrequest *RasterCollectionsRastersBatchInsertRequest
+	opt_                                       map[string]interface{}
+}
+
+// BatchInsert: Add rasters to an existing raster collection. Rasters
+// must be successfully processed in order to be added to a raster
+// collection.
+//
+// Up to 50 rasters can be included in a single batchInsert
+// request. Each batchInsert request is atomic.
+func (r *RasterCollectionsRastersService) BatchInsert(id string, rastercollectionsrastersbatchinsertrequest *RasterCollectionsRastersBatchInsertRequest) *RasterCollectionsRastersBatchInsertCall {
+	c := &RasterCollectionsRastersBatchInsertCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	c.rastercollectionsrastersbatchinsertrequest = rastercollectionsrastersbatchinsertrequest
+	return c
+}
+
+func (c *RasterCollectionsRastersBatchInsertCall) Do() (*RasterCollectionsRastersBatchInsertResponse, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.rastercollectionsrastersbatchinsertrequest)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "rasterCollections/{id}/rasters/batchInsert")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *RasterCollectionsRastersBatchInsertResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Add rasters to an existing raster collection. Rasters must be successfully processed in order to be added to a raster collection.\n\nUp to 50 rasters can be included in a single batchInsert request. Each batchInsert request is atomic.",
+	//   "httpMethod": "POST",
+	//   "id": "mapsengine.rasterCollections.rasters.batchInsert",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the raster collection to which these rasters belong.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "rasterCollections/{id}/rasters/batchInsert",
+	//   "request": {
+	//     "$ref": "RasterCollectionsRastersBatchInsertRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "RasterCollectionsRastersBatchInsertResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.rasterCollections.rasters.list":
+
+type RasterCollectionsRastersListCall struct {
+	s    *Service
+	id   string
+	opt_ map[string]interface{}
+}
+
+// List: Return all rasters within a raster collection.
+func (r *RasterCollectionsRastersService) List(id string) *RasterCollectionsRastersListCall {
+	c := &RasterCollectionsRastersListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	return c
+}
+
+// Bbox sets the optional parameter "bbox": A bounding box, expressed as
+// "west,south,east,north". If set, only assets which intersect this
+// bounding box will be returned.
+func (c *RasterCollectionsRastersListCall) Bbox(bbox string) *RasterCollectionsRastersListCall {
+	c.opt_["bbox"] = bbox
+	return c
+}
+
+// CreatedAfter sets the optional parameter "createdAfter": An RFC 3339
+// formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned
+// assets will have been created at or after this time.
+func (c *RasterCollectionsRastersListCall) CreatedAfter(createdAfter string) *RasterCollectionsRastersListCall {
+	c.opt_["createdAfter"] = createdAfter
+	return c
+}
+
+// CreatedBefore sets the optional parameter "createdBefore": An RFC
+// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned
+// assets will have been created at or before this time.
+func (c *RasterCollectionsRastersListCall) CreatedBefore(createdBefore string) *RasterCollectionsRastersListCall {
+	c.opt_["createdBefore"] = createdBefore
+	return c
+}
+
+// CreatorEmail sets the optional parameter "creatorEmail": An email
+// address representing a user. Returned assets that have been created
+// by the user associated with the provided email address.
+func (c *RasterCollectionsRastersListCall) CreatorEmail(creatorEmail string) *RasterCollectionsRastersListCall {
+	c.opt_["creatorEmail"] = creatorEmail
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of items to include in a single response page. The maximum
+// supported value is 100.
+func (c *RasterCollectionsRastersListCall) MaxResults(maxResults int64) *RasterCollectionsRastersListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// ModifiedAfter sets the optional parameter "modifiedAfter": An RFC
+// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned
+// assets will have been modified at or after this time.
+func (c *RasterCollectionsRastersListCall) ModifiedAfter(modifiedAfter string) *RasterCollectionsRastersListCall {
+	c.opt_["modifiedAfter"] = modifiedAfter
+	return c
+}
+
+// ModifiedBefore sets the optional parameter "modifiedBefore": An RFC
+// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned
+// assets will have been modified at or before this time.
+func (c *RasterCollectionsRastersListCall) ModifiedBefore(modifiedBefore string) *RasterCollectionsRastersListCall {
+	c.opt_["modifiedBefore"] = modifiedBefore
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": The continuation
+// token, used to page through large result sets. To get the next page
+// of results, set this parameter to the value of nextPageToken from the
+// previous response.
+func (c *RasterCollectionsRastersListCall) PageToken(pageToken string) *RasterCollectionsRastersListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+// Role sets the optional parameter "role": The role parameter indicates
+// that the response should only contain assets where the current user
+// has the specified level of access.
+func (c *RasterCollectionsRastersListCall) Role(role string) *RasterCollectionsRastersListCall {
+	c.opt_["role"] = role
+	return c
+}
+
+// Tags sets the optional parameter "tags": A comma separated list of
+// tags. Returned assets will contain all the tags from the list.
+func (c *RasterCollectionsRastersListCall) Tags(tags string) *RasterCollectionsRastersListCall {
+	c.opt_["tags"] = tags
+	return c
+}
+
+func (c *RasterCollectionsRastersListCall) Do() (*RasterCollectionsRastersListResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	if v, ok := c.opt_["bbox"]; ok {
+		params.Set("bbox", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["createdAfter"]; ok {
+		params.Set("createdAfter", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["createdBefore"]; ok {
+		params.Set("createdBefore", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["creatorEmail"]; ok {
+		params.Set("creatorEmail", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["maxResults"]; ok {
+		params.Set("maxResults", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["modifiedAfter"]; ok {
+		params.Set("modifiedAfter", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["modifiedBefore"]; ok {
+		params.Set("modifiedBefore", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["pageToken"]; ok {
+		params.Set("pageToken", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["role"]; ok {
+		params.Set("role", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["tags"]; ok {
+		params.Set("tags", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "rasterCollections/{id}/rasters")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *RasterCollectionsRastersListResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Return all rasters within a raster collection.",
+	//   "httpMethod": "GET",
+	//   "id": "mapsengine.rasterCollections.rasters.list",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "bbox": {
+	//       "description": "A bounding box, expressed as \"west,south,east,north\". If set, only assets which intersect this bounding box will be returned.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "createdAfter": {
+	//       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or after this time.",
+	//       "format": "date-time",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "createdBefore": {
+	//       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or before this time.",
+	//       "format": "date-time",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "creatorEmail": {
+	//       "description": "An email address representing a user. Returned assets that have been created by the user associated with the provided email address.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "id": {
+	//       "description": "The ID of the raster collection to which these rasters belong.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "description": "The maximum number of items to include in a single response page. The maximum supported value is 100.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "modifiedAfter": {
+	//       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or after this time.",
+	//       "format": "date-time",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "modifiedBefore": {
+	//       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or before this time.",
+	//       "format": "date-time",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "pageToken": {
+	//       "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "role": {
+	//       "description": "The role parameter indicates that the response should only contain assets where the current user has the specified level of access.",
+	//       "enum": [
+	//         "owner",
+	//         "reader",
+	//         "writer"
+	//       ],
+	//       "enumDescriptions": [
+	//         "The user can read, write and administer the asset.",
+	//         "The user can read the asset.",
+	//         "The user can read and write the asset."
+	//       ],
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "tags": {
+	//       "description": "A comma separated list of tags. Returned assets will contain all the tags from the list.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "rasterCollections/{id}/rasters",
+	//   "response": {
+	//     "$ref": "RasterCollectionsRastersListResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine",
+	//     "https://www.googleapis.com/auth/mapsengine.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.rasters.delete":
+
+type RastersDeleteCall struct {
+	s    *Service
+	id   string
+	opt_ map[string]interface{}
+}
+
+// Delete: Delete a raster.
+func (r *RastersService) Delete(id string) *RastersDeleteCall {
+	c := &RastersDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	return c
+}
+
+func (c *RastersDeleteCall) Do() error {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "rasters/{id}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return err
+	}
+	return nil
+	// {
+	//   "description": "Delete a raster.",
+	//   "httpMethod": "DELETE",
+	//   "id": "mapsengine.rasters.delete",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the raster. Only the raster creator or project owner are permitted to delete. If the raster is included in a layer or mosaic, the request will fail. Remove it from all parents prior to deleting.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "rasters/{id}",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.rasters.get":
+
+type RastersGetCall struct {
+	s    *Service
+	id   string
+	opt_ map[string]interface{}
+}
+
+// Get: Return metadata for a single raster.
+func (r *RastersService) Get(id string) *RastersGetCall {
+	c := &RastersGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	return c
+}
+
+func (c *RastersGetCall) Do() (*Raster, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "rasters/{id}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *Raster
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Return metadata for a single raster.",
+	//   "httpMethod": "GET",
+	//   "id": "mapsengine.rasters.get",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the raster.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "rasters/{id}",
+	//   "response": {
+	//     "$ref": "Raster"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine",
+	//     "https://www.googleapis.com/auth/mapsengine.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.rasters.list":
+
+type RastersListCall struct {
+	s         *Service
+	projectId string
+	opt_      map[string]interface{}
+}
+
+// List: Return all rasters readable by the current user.
+func (r *RastersService) List(projectId string) *RastersListCall {
+	c := &RastersListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.projectId = projectId
+	return c
+}
+
+// Bbox sets the optional parameter "bbox": A bounding box, expressed as
+// "west,south,east,north". If set, only assets which intersect this
+// bounding box will be returned.
+func (c *RastersListCall) Bbox(bbox string) *RastersListCall {
+	c.opt_["bbox"] = bbox
+	return c
+}
+
+// CreatedAfter sets the optional parameter "createdAfter": An RFC 3339
+// formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned
+// assets will have been created at or after this time.
+func (c *RastersListCall) CreatedAfter(createdAfter string) *RastersListCall {
+	c.opt_["createdAfter"] = createdAfter
+	return c
+}
+
+// CreatedBefore sets the optional parameter "createdBefore": An RFC
+// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned
+// assets will have been created at or before this time.
+func (c *RastersListCall) CreatedBefore(createdBefore string) *RastersListCall {
+	c.opt_["createdBefore"] = createdBefore
+	return c
+}
+
+// CreatorEmail sets the optional parameter "creatorEmail": An email
+// address representing a user. Returned assets that have been created
+// by the user associated with the provided email address.
+func (c *RastersListCall) CreatorEmail(creatorEmail string) *RastersListCall {
+	c.opt_["creatorEmail"] = creatorEmail
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of items to include in a single response page. The maximum
+// supported value is 100.
+func (c *RastersListCall) MaxResults(maxResults int64) *RastersListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// ModifiedAfter sets the optional parameter "modifiedAfter": An RFC
+// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned
+// assets will have been modified at or after this time.
+func (c *RastersListCall) ModifiedAfter(modifiedAfter string) *RastersListCall {
+	c.opt_["modifiedAfter"] = modifiedAfter
+	return c
+}
+
+// ModifiedBefore sets the optional parameter "modifiedBefore": An RFC
+// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned
+// assets will have been modified at or before this time.
+func (c *RastersListCall) ModifiedBefore(modifiedBefore string) *RastersListCall {
+	c.opt_["modifiedBefore"] = modifiedBefore
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": The continuation
+// token, used to page through large result sets. To get the next page
+// of results, set this parameter to the value of nextPageToken from the
+// previous response.
+func (c *RastersListCall) PageToken(pageToken string) *RastersListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+// Role sets the optional parameter "role": The role parameter indicates
+// that the response should only contain assets where the current user
+// has the specified level of access.
+func (c *RastersListCall) Role(role string) *RastersListCall {
+	c.opt_["role"] = role
+	return c
+}
+
+// Tags sets the optional parameter "tags": A comma separated list of
+// tags. Returned assets will contain all the tags from the list.
+func (c *RastersListCall) Tags(tags string) *RastersListCall {
+	c.opt_["tags"] = tags
+	return c
+}
+
+func (c *RastersListCall) Do() (*RastersListResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	params.Set("projectId", fmt.Sprintf("%v", c.projectId))
+	if v, ok := c.opt_["bbox"]; ok {
+		params.Set("bbox", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["createdAfter"]; ok {
+		params.Set("createdAfter", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["createdBefore"]; ok {
+		params.Set("createdBefore", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["creatorEmail"]; ok {
+		params.Set("creatorEmail", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["maxResults"]; ok {
+		params.Set("maxResults", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["modifiedAfter"]; ok {
+		params.Set("modifiedAfter", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["modifiedBefore"]; ok {
+		params.Set("modifiedBefore", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["pageToken"]; ok {
+		params.Set("pageToken", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["role"]; ok {
+		params.Set("role", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["tags"]; ok {
+		params.Set("tags", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "rasters")
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *RastersListResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Return all rasters readable by the current user.",
+	//   "httpMethod": "GET",
+	//   "id": "mapsengine.rasters.list",
+	//   "parameterOrder": [
+	//     "projectId"
+	//   ],
+	//   "parameters": {
+	//     "bbox": {
+	//       "description": "A bounding box, expressed as \"west,south,east,north\". If set, only assets which intersect this bounding box will be returned.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "createdAfter": {
+	//       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or after this time.",
+	//       "format": "date-time",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "createdBefore": {
+	//       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or before this time.",
+	//       "format": "date-time",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "creatorEmail": {
+	//       "description": "An email address representing a user. Returned assets that have been created by the user associated with the provided email address.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "description": "The maximum number of items to include in a single response page. The maximum supported value is 100.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "modifiedAfter": {
+	//       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or after this time.",
+	//       "format": "date-time",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "modifiedBefore": {
+	//       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or before this time.",
+	//       "format": "date-time",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "pageToken": {
+	//       "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "projectId": {
+	//       "description": "The ID of a Maps Engine project, used to filter the response. To list all available projects with their IDs, send a Projects: list request. You can also find your project ID as the value of the DashboardPlace:cid URL parameter when signed in to mapsengine.google.com.",
+	//       "location": "query",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "role": {
+	//       "description": "The role parameter indicates that the response should only contain assets where the current user has the specified level of access.",
+	//       "enum": [
+	//         "owner",
+	//         "reader",
+	//         "writer"
+	//       ],
+	//       "enumDescriptions": [
+	//         "The user can read, write and administer the asset.",
+	//         "The user can read the asset.",
+	//         "The user can read and write the asset."
+	//       ],
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "tags": {
+	//       "description": "A comma separated list of tags. Returned assets will contain all the tags from the list.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "rasters",
+	//   "response": {
+	//     "$ref": "RastersListResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine",
+	//     "https://www.googleapis.com/auth/mapsengine.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.rasters.patch":
+
+type RastersPatchCall struct {
+	s      *Service
+	id     string
+	raster *Raster
+	opt_   map[string]interface{}
+}
+
+// Patch: Mutate a raster asset.
+func (r *RastersService) Patch(id string, raster *Raster) *RastersPatchCall {
+	c := &RastersPatchCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	c.raster = raster
+	return c
+}
+
+func (c *RastersPatchCall) Do() error {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.raster)
+	if err != nil {
+		return err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "rasters/{id}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("PATCH", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return err
+	}
+	return nil
+	// {
+	//   "description": "Mutate a raster asset.",
+	//   "httpMethod": "PATCH",
+	//   "id": "mapsengine.rasters.patch",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the raster.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "rasters/{id}",
+	//   "request": {
+	//     "$ref": "Raster"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.rasters.upload":
+
+type RastersUploadCall struct {
+	s      *Service
+	raster *Raster
+	opt_   map[string]interface{}
+}
+
+// Upload: Create a skeleton raster asset for upload.
+func (r *RastersService) Upload(raster *Raster) *RastersUploadCall {
+	c := &RastersUploadCall{s: r.s, opt_: make(map[string]interface{})}
+	c.raster = raster
+	return c
+}
+
+func (c *RastersUploadCall) Do() (*Raster, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.raster)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "rasters/upload")
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *Raster
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Create a skeleton raster asset for upload.",
+	//   "httpMethod": "POST",
+	//   "id": "mapsengine.rasters.upload",
+	//   "path": "rasters/upload",
+	//   "request": {
+	//     "$ref": "Raster"
+	//   },
+	//   "response": {
+	//     "$ref": "Raster"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.rasters.files.insert":
+
+type RastersFilesInsertCall struct {
+	s        *Service
+	id       string
+	filename string
+	opt_     map[string]interface{}
+	media_   io.Reader
+}
+
+// Insert: Upload a file to a raster asset.
+func (r *RastersFilesService) Insert(id string, filename string) *RastersFilesInsertCall {
+	c := &RastersFilesInsertCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	c.filename = filename
+	return c
+}
+func (c *RastersFilesInsertCall) Media(r io.Reader) *RastersFilesInsertCall {
+	c.media_ = r
+	return c
+}
+
+func (c *RastersFilesInsertCall) Do() error {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	params.Set("filename", fmt.Sprintf("%v", c.filename))
+	urls := googleapi.ResolveRelative(c.s.BasePath, "rasters/{id}/files")
+	if c.media_ != nil {
+		urls = strings.Replace(urls, "https://www.googleapis.com/", "https://www.googleapis.com/upload/", 1)
+		params.Set("uploadType", "multipart")
+	}
+	urls += "?" + params.Encode()
+	body = new(bytes.Buffer)
+	ctype := "application/json"
+	contentLength_, hasMedia_ := googleapi.ConditionallyIncludeMedia(c.media_, &body, &ctype)
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	if hasMedia_ {
+		req.ContentLength = contentLength_
+	}
+	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 err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return err
+	}
+	return nil
+	// {
+	//   "description": "Upload a file to a raster asset.",
+	//   "httpMethod": "POST",
+	//   "id": "mapsengine.rasters.files.insert",
+	//   "mediaUpload": {
+	//     "accept": [
+	//       "*/*"
+	//     ],
+	//     "maxSize": "10GB",
+	//     "protocols": {
+	//       "resumable": {
+	//         "multipart": true,
+	//         "path": "/resumable/upload/mapsengine/exp2/rasters/{id}/files"
+	//       },
+	//       "simple": {
+	//         "multipart": true,
+	//         "path": "/upload/mapsengine/exp2/rasters/{id}/files"
+	//       }
+	//     }
+	//   },
+	//   "parameterOrder": [
+	//     "id",
+	//     "filename"
+	//   ],
+	//   "parameters": {
+	//     "filename": {
+	//       "description": "The file name of this uploaded file.",
+	//       "location": "query",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "id": {
+	//       "description": "The ID of the raster asset.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "rasters/{id}/files",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ],
+	//   "supportsMediaUpload": true
+	// }
+
+}
+
+// method id "mapsengine.rasters.parents.list":
+
+type RastersParentsListCall struct {
+	s    *Service
+	id   string
+	opt_ map[string]interface{}
+}
+
+// List: Return all parent ids of the specified rasters.
+func (r *RastersParentsService) List(id string) *RastersParentsListCall {
+	c := &RastersParentsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of items to include in a single response page. The maximum
+// supported value is 50.
+func (c *RastersParentsListCall) MaxResults(maxResults int64) *RastersParentsListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": The continuation
+// token, used to page through large result sets. To get the next page
+// of results, set this parameter to the value of nextPageToken from the
+// previous response.
+func (c *RastersParentsListCall) PageToken(pageToken string) *RastersParentsListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *RastersParentsListCall) Do() (*ParentsListResponse, 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(c.s.BasePath, "rasters/{id}/parents")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *ParentsListResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Return all parent ids of the specified rasters.",
+	//   "httpMethod": "GET",
+	//   "id": "mapsengine.rasters.parents.list",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the rasters whose parents will be listed.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "description": "The maximum number of items to include in a single response page. The maximum supported value is 50.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "rasters/{id}/parents",
+	//   "response": {
+	//     "$ref": "ParentsListResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine",
+	//     "https://www.googleapis.com/auth/mapsengine.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.rasters.permissions.list":
+
+type RastersPermissionsListCall struct {
+	s    *Service
+	id   string
+	opt_ map[string]interface{}
+}
+
+// List: Return all of the permissions for the specified asset.
+func (r *RastersPermissionsService) List(id string) *RastersPermissionsListCall {
+	c := &RastersPermissionsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	return c
+}
+
+func (c *RastersPermissionsListCall) Do() (*PermissionsListResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "rasters/{id}/permissions")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *PermissionsListResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Return all of the permissions for the specified asset.",
+	//   "httpMethod": "GET",
+	//   "id": "mapsengine.rasters.permissions.list",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the asset whose permissions will be listed.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "rasters/{id}/permissions",
+	//   "response": {
+	//     "$ref": "PermissionsListResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine",
+	//     "https://www.googleapis.com/auth/mapsengine.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.tables.create":
+
+type TablesCreateCall struct {
+	s     *Service
+	table *Table
+	opt_  map[string]interface{}
+}
+
+// Create: Create a table asset.
+func (r *TablesService) Create(table *Table) *TablesCreateCall {
+	c := &TablesCreateCall{s: r.s, opt_: make(map[string]interface{})}
+	c.table = table
+	return c
+}
+
+func (c *TablesCreateCall) Do() (*Table, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.table)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tables")
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *Table
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Create a table asset.",
+	//   "httpMethod": "POST",
+	//   "id": "mapsengine.tables.create",
+	//   "path": "tables",
+	//   "request": {
+	//     "$ref": "Table"
+	//   },
+	//   "response": {
+	//     "$ref": "Table"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.tables.delete":
+
+type TablesDeleteCall struct {
+	s    *Service
+	id   string
+	opt_ map[string]interface{}
+}
+
+// Delete: Delete a table.
+func (r *TablesService) Delete(id string) *TablesDeleteCall {
+	c := &TablesDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	return c
+}
+
+func (c *TablesDeleteCall) Do() error {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tables/{id}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	req.Header.Set("User-Agent", "google-api-go-client/0.5")
+	res, err := c.s.client.Do(req)
+	if err != nil {
+		return err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return err
+	}
+	return nil
+	// {
+	//   "description": "Delete a table.",
+	//   "httpMethod": "DELETE",
+	//   "id": "mapsengine.tables.delete",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the table. Only the table creator or project owner are permitted to delete. If the table is included in a layer, the request will fail. Remove it from all layers prior to deleting.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "tables/{id}",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.tables.get":
+
+type TablesGetCall struct {
+	s    *Service
+	id   string
+	opt_ map[string]interface{}
+}
+
+// Get: Return metadata for a particular table, including the schema.
+func (r *TablesService) Get(id string) *TablesGetCall {
+	c := &TablesGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	return c
+}
+
+// Version sets the optional parameter "version":
+func (c *TablesGetCall) Version(version string) *TablesGetCall {
+	c.opt_["version"] = version
+	return c
+}
+
+func (c *TablesGetCall) Do() (*Table, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	if v, ok := c.opt_["version"]; ok {
+		params.Set("version", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tables/{id}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *Table
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Return metadata for a particular table, including the schema.",
+	//   "httpMethod": "GET",
+	//   "id": "mapsengine.tables.get",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the table.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "version": {
+	//       "enum": [
+	//         "draft",
+	//         "published"
+	//       ],
+	//       "enumDescriptions": [
+	//         "The draft version.",
+	//         "The published version."
+	//       ],
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "tables/{id}",
+	//   "response": {
+	//     "$ref": "Table"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine",
+	//     "https://www.googleapis.com/auth/mapsengine.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.tables.list":
+
+type TablesListCall struct {
+	s    *Service
+	opt_ map[string]interface{}
+}
+
+// List: Return all tables readable by the current user.
+func (r *TablesService) List() *TablesListCall {
+	c := &TablesListCall{s: r.s, opt_: make(map[string]interface{})}
+	return c
+}
+
+// Bbox sets the optional parameter "bbox": A bounding box, expressed as
+// "west,south,east,north". If set, only assets which intersect this
+// bounding box will be returned.
+func (c *TablesListCall) Bbox(bbox string) *TablesListCall {
+	c.opt_["bbox"] = bbox
+	return c
+}
+
+// CreatedAfter sets the optional parameter "createdAfter": An RFC 3339
+// formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned
+// assets will have been created at or after this time.
+func (c *TablesListCall) CreatedAfter(createdAfter string) *TablesListCall {
+	c.opt_["createdAfter"] = createdAfter
+	return c
+}
+
+// CreatedBefore sets the optional parameter "createdBefore": An RFC
+// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned
+// assets will have been created at or before this time.
+func (c *TablesListCall) CreatedBefore(createdBefore string) *TablesListCall {
+	c.opt_["createdBefore"] = createdBefore
+	return c
+}
+
+// CreatorEmail sets the optional parameter "creatorEmail": An email
+// address representing a user. Returned assets that have been created
+// by the user associated with the provided email address.
+func (c *TablesListCall) CreatorEmail(creatorEmail string) *TablesListCall {
+	c.opt_["creatorEmail"] = creatorEmail
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of items to include in a single response page. The maximum
+// supported value is 100.
+func (c *TablesListCall) MaxResults(maxResults int64) *TablesListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// ModifiedAfter sets the optional parameter "modifiedAfter": An RFC
+// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned
+// assets will have been modified at or after this time.
+func (c *TablesListCall) ModifiedAfter(modifiedAfter string) *TablesListCall {
+	c.opt_["modifiedAfter"] = modifiedAfter
+	return c
+}
+
+// ModifiedBefore sets the optional parameter "modifiedBefore": An RFC
+// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned
+// assets will have been modified at or before this time.
+func (c *TablesListCall) ModifiedBefore(modifiedBefore string) *TablesListCall {
+	c.opt_["modifiedBefore"] = modifiedBefore
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": The continuation
+// token, used to page through large result sets. To get the next page
+// of results, set this parameter to the value of nextPageToken from the
+// previous response.
+func (c *TablesListCall) PageToken(pageToken string) *TablesListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+// ProjectId sets the optional parameter "projectId": The ID of a Maps
+// Engine project, used to filter the response. To list all available
+// projects with their IDs, send a Projects: list request. You can also
+// find your project ID as the value of the DashboardPlace:cid URL
+// parameter when signed in to mapsengine.google.com.
+func (c *TablesListCall) ProjectId(projectId string) *TablesListCall {
+	c.opt_["projectId"] = projectId
+	return c
+}
+
+// Role sets the optional parameter "role": The role parameter indicates
+// that the response should only contain assets where the current user
+// has the specified level of access.
+func (c *TablesListCall) Role(role string) *TablesListCall {
+	c.opt_["role"] = role
+	return c
+}
+
+// Tags sets the optional parameter "tags": A comma separated list of
+// tags. Returned assets will contain all the tags from the list.
+func (c *TablesListCall) Tags(tags string) *TablesListCall {
+	c.opt_["tags"] = tags
+	return c
+}
+
+func (c *TablesListCall) Do() (*TablesListResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	if v, ok := c.opt_["bbox"]; ok {
+		params.Set("bbox", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["createdAfter"]; ok {
+		params.Set("createdAfter", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["createdBefore"]; ok {
+		params.Set("createdBefore", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["creatorEmail"]; ok {
+		params.Set("creatorEmail", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["maxResults"]; ok {
+		params.Set("maxResults", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["modifiedAfter"]; ok {
+		params.Set("modifiedAfter", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["modifiedBefore"]; ok {
+		params.Set("modifiedBefore", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["pageToken"]; ok {
+		params.Set("pageToken", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["projectId"]; ok {
+		params.Set("projectId", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["role"]; ok {
+		params.Set("role", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["tags"]; ok {
+		params.Set("tags", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tables")
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *TablesListResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Return all tables readable by the current user.",
+	//   "httpMethod": "GET",
+	//   "id": "mapsengine.tables.list",
+	//   "parameters": {
+	//     "bbox": {
+	//       "description": "A bounding box, expressed as \"west,south,east,north\". If set, only assets which intersect this bounding box will be returned.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "createdAfter": {
+	//       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or after this time.",
+	//       "format": "date-time",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "createdBefore": {
+	//       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or before this time.",
+	//       "format": "date-time",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "creatorEmail": {
+	//       "description": "An email address representing a user. Returned assets that have been created by the user associated with the provided email address.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "description": "The maximum number of items to include in a single response page. The maximum supported value is 100.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "modifiedAfter": {
+	//       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or after this time.",
+	//       "format": "date-time",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "modifiedBefore": {
+	//       "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or before this time.",
+	//       "format": "date-time",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "pageToken": {
+	//       "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "projectId": {
+	//       "description": "The ID of a Maps Engine project, used to filter the response. To list all available projects with their IDs, send a Projects: list request. You can also find your project ID as the value of the DashboardPlace:cid URL parameter when signed in to mapsengine.google.com.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "role": {
+	//       "description": "The role parameter indicates that the response should only contain assets where the current user has the specified level of access.",
+	//       "enum": [
+	//         "owner",
+	//         "reader",
+	//         "writer"
+	//       ],
+	//       "enumDescriptions": [
+	//         "The user can read, write and administer the asset.",
+	//         "The user can read the asset.",
+	//         "The user can read and write the asset."
+	//       ],
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "tags": {
+	//       "description": "A comma separated list of tags. Returned assets will contain all the tags from the list.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "tables",
+	//   "response": {
+	//     "$ref": "TablesListResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine",
+	//     "https://www.googleapis.com/auth/mapsengine.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.tables.patch":
+
+type TablesPatchCall struct {
+	s     *Service
+	id    string
+	table *Table
+	opt_  map[string]interface{}
+}
+
+// Patch: Mutate a table asset.
+func (r *TablesService) Patch(id string, table *Table) *TablesPatchCall {
+	c := &TablesPatchCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	c.table = table
+	return c
+}
+
+func (c *TablesPatchCall) Do() error {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.table)
+	if err != nil {
+		return err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tables/{id}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("PATCH", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return err
+	}
+	return nil
+	// {
+	//   "description": "Mutate a table asset.",
+	//   "httpMethod": "PATCH",
+	//   "id": "mapsengine.tables.patch",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the table.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "tables/{id}",
+	//   "request": {
+	//     "$ref": "Table"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.tables.upload":
+
+type TablesUploadCall struct {
+	s     *Service
+	table *Table
+	opt_  map[string]interface{}
+}
+
+// Upload: Create a placeholder table asset to which table files can be
+// uploaded.
+// Once the placeholder has been created, files are uploaded
+// to the
+// https://www.googleapis.com/upload/mapsengine/v1/tables/table_id/files
+// endpoint.
+// See Table Upload in the Developer's Guide or Table.files:
+// insert in the reference documentation for more information.
+func (r *TablesService) Upload(table *Table) *TablesUploadCall {
+	c := &TablesUploadCall{s: r.s, opt_: make(map[string]interface{})}
+	c.table = table
+	return c
+}
+
+func (c *TablesUploadCall) Do() (*Table, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.table)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tables/upload")
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *Table
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Create a placeholder table asset to which table files can be uploaded.\nOnce the placeholder has been created, files are uploaded to the https://www.googleapis.com/upload/mapsengine/v1/tables/table_id/files endpoint.\nSee Table Upload in the Developer's Guide or Table.files: insert in the reference documentation for more information.",
+	//   "httpMethod": "POST",
+	//   "id": "mapsengine.tables.upload",
+	//   "path": "tables/upload",
+	//   "request": {
+	//     "$ref": "Table"
+	//   },
+	//   "response": {
+	//     "$ref": "Table"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.tables.features.batchDelete":
+
+type TablesFeaturesBatchDeleteCall struct {
+	s                          *Service
+	id                         string
+	featuresbatchdeleterequest *FeaturesBatchDeleteRequest
+	opt_                       map[string]interface{}
+}
+
+// BatchDelete: Delete all features matching the given IDs.
+func (r *TablesFeaturesService) BatchDelete(id string, featuresbatchdeleterequest *FeaturesBatchDeleteRequest) *TablesFeaturesBatchDeleteCall {
+	c := &TablesFeaturesBatchDeleteCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	c.featuresbatchdeleterequest = featuresbatchdeleterequest
+	return c
+}
+
+func (c *TablesFeaturesBatchDeleteCall) Do() error {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.featuresbatchdeleterequest)
+	if err != nil {
+		return err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tables/{id}/features/batchDelete")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return err
+	}
+	return nil
+	// {
+	//   "description": "Delete all features matching the given IDs.",
+	//   "httpMethod": "POST",
+	//   "id": "mapsengine.tables.features.batchDelete",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the table that contains the features to be deleted.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "tables/{id}/features/batchDelete",
+	//   "request": {
+	//     "$ref": "FeaturesBatchDeleteRequest"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.tables.features.batchInsert":
+
+type TablesFeaturesBatchInsertCall struct {
+	s                          *Service
+	id                         string
+	featuresbatchinsertrequest *FeaturesBatchInsertRequest
+	opt_                       map[string]interface{}
+}
+
+// BatchInsert: Append the supplied features.
+func (r *TablesFeaturesService) BatchInsert(id string, featuresbatchinsertrequest *FeaturesBatchInsertRequest) *TablesFeaturesBatchInsertCall {
+	c := &TablesFeaturesBatchInsertCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	c.featuresbatchinsertrequest = featuresbatchinsertrequest
+	return c
+}
+
+func (c *TablesFeaturesBatchInsertCall) Do() error {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.featuresbatchinsertrequest)
+	if err != nil {
+		return err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tables/{id}/features/batchInsert")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return err
+	}
+	return nil
+	// {
+	//   "description": "Append the supplied features.",
+	//   "httpMethod": "POST",
+	//   "id": "mapsengine.tables.features.batchInsert",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the table to append the features to.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "tables/{id}/features/batchInsert",
+	//   "request": {
+	//     "$ref": "FeaturesBatchInsertRequest"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.tables.features.batchPatch":
+
+type TablesFeaturesBatchPatchCall struct {
+	s                         *Service
+	id                        string
+	featuresbatchpatchrequest *FeaturesBatchPatchRequest
+	opt_                      map[string]interface{}
+}
+
+// BatchPatch: Patch the supplied features.
+func (r *TablesFeaturesService) BatchPatch(id string, featuresbatchpatchrequest *FeaturesBatchPatchRequest) *TablesFeaturesBatchPatchCall {
+	c := &TablesFeaturesBatchPatchCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	c.featuresbatchpatchrequest = featuresbatchpatchrequest
+	return c
+}
+
+func (c *TablesFeaturesBatchPatchCall) Do() error {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.featuresbatchpatchrequest)
+	if err != nil {
+		return err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tables/{id}/features/batchPatch")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return err
+	}
+	return nil
+	// {
+	//   "description": "Patch the supplied features.",
+	//   "httpMethod": "POST",
+	//   "id": "mapsengine.tables.features.batchPatch",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the table containing the features to be patched.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "tables/{id}/features/batchPatch",
+	//   "request": {
+	//     "$ref": "FeaturesBatchPatchRequest"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.tables.features.get":
+
+type TablesFeaturesGetCall struct {
+	s       *Service
+	tableId string
+	id      string
+	opt_    map[string]interface{}
+}
+
+// Get: Return a single feature, given its ID.
+func (r *TablesFeaturesService) Get(tableId string, id string) *TablesFeaturesGetCall {
+	c := &TablesFeaturesGetCall{s: r.s, opt_: make(map[string]interface{})}
+	c.tableId = tableId
+	c.id = id
+	return c
+}
+
+// Select sets the optional parameter "select": A SQL-like projection
+// clause used to specify returned properties. If this parameter is not
+// included, all properties are returned.
+func (c *TablesFeaturesGetCall) Select(select_ string) *TablesFeaturesGetCall {
+	c.opt_["select"] = select_
+	return c
+}
+
+// Version sets the optional parameter "version": The table version to
+// access. See Accessing Public Data for information.
+func (c *TablesFeaturesGetCall) Version(version string) *TablesFeaturesGetCall {
+	c.opt_["version"] = version
+	return c
+}
+
+func (c *TablesFeaturesGetCall) Do() (*Feature, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	if v, ok := c.opt_["select"]; ok {
+		params.Set("select", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["version"]; ok {
+		params.Set("version", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tables/{tableId}/features/{id}")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"tableId": c.tableId,
+		"id":      c.id,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *Feature
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Return a single feature, given its ID.",
+	//   "httpMethod": "GET",
+	//   "id": "mapsengine.tables.features.get",
+	//   "parameterOrder": [
+	//     "tableId",
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the feature to get.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "select": {
+	//       "description": "A SQL-like projection clause used to specify returned properties. If this parameter is not included, all properties are returned.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "tableId": {
+	//       "description": "The ID of the table.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "version": {
+	//       "description": "The table version to access. See Accessing Public Data for information.",
+	//       "enum": [
+	//         "draft",
+	//         "published"
+	//       ],
+	//       "enumDescriptions": [
+	//         "The draft version.",
+	//         "The published version."
+	//       ],
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "tables/{tableId}/features/{id}",
+	//   "response": {
+	//     "$ref": "Feature"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine",
+	//     "https://www.googleapis.com/auth/mapsengine.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.tables.features.list":
+
+type TablesFeaturesListCall struct {
+	s    *Service
+	id   string
+	opt_ map[string]interface{}
+}
+
+// List: Return all features readable by the current user.
+func (r *TablesFeaturesService) List(id string) *TablesFeaturesListCall {
+	c := &TablesFeaturesListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	return c
+}
+
+// Include sets the optional parameter "include": A comma separated list
+// of optional data to include. Optional data available: schema.
+func (c *TablesFeaturesListCall) Include(include string) *TablesFeaturesListCall {
+	c.opt_["include"] = include
+	return c
+}
+
+// Intersects sets the optional parameter "intersects": A geometry
+// literal that specifies the spatial restriction of the query.
+func (c *TablesFeaturesListCall) Intersects(intersects string) *TablesFeaturesListCall {
+	c.opt_["intersects"] = intersects
+	return c
+}
+
+// Limit sets the optional parameter "limit": The total number of
+// features to return from the query, irrespective of the number of
+// pages.
+func (c *TablesFeaturesListCall) Limit(limit int64) *TablesFeaturesListCall {
+	c.opt_["limit"] = limit
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of items to include in the response, used for paging.
+func (c *TablesFeaturesListCall) MaxResults(maxResults int64) *TablesFeaturesListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// OrderBy sets the optional parameter "orderBy": An SQL-like order by
+// clause used to sort results. If this parameter is not included, the
+// order of features is undefined.
+func (c *TablesFeaturesListCall) OrderBy(orderBy string) *TablesFeaturesListCall {
+	c.opt_["orderBy"] = orderBy
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": The continuation
+// token, used to page through large result sets. To get the next page
+// of results, set this parameter to the value of nextPageToken from the
+// previous response.
+func (c *TablesFeaturesListCall) PageToken(pageToken string) *TablesFeaturesListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+// Select sets the optional parameter "select": A SQL-like projection
+// clause used to specify returned properties. If this parameter is not
+// included, all properties are returned.
+func (c *TablesFeaturesListCall) Select(select_ string) *TablesFeaturesListCall {
+	c.opt_["select"] = select_
+	return c
+}
+
+// Version sets the optional parameter "version": The table version to
+// access. See Accessing Public Data for information.
+func (c *TablesFeaturesListCall) Version(version string) *TablesFeaturesListCall {
+	c.opt_["version"] = version
+	return c
+}
+
+// Where sets the optional parameter "where": An SQL-like predicate used
+// to filter results.
+func (c *TablesFeaturesListCall) Where(where string) *TablesFeaturesListCall {
+	c.opt_["where"] = where
+	return c
+}
+
+func (c *TablesFeaturesListCall) Do() (*FeaturesListResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	if v, ok := c.opt_["include"]; ok {
+		params.Set("include", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["intersects"]; ok {
+		params.Set("intersects", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["limit"]; ok {
+		params.Set("limit", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["maxResults"]; ok {
+		params.Set("maxResults", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["orderBy"]; ok {
+		params.Set("orderBy", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["pageToken"]; ok {
+		params.Set("pageToken", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["select"]; ok {
+		params.Set("select", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["version"]; ok {
+		params.Set("version", fmt.Sprintf("%v", v))
+	}
+	if v, ok := c.opt_["where"]; ok {
+		params.Set("where", fmt.Sprintf("%v", v))
+	}
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tables/{id}/features")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *FeaturesListResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Return all features readable by the current user.",
+	//   "httpMethod": "GET",
+	//   "id": "mapsengine.tables.features.list",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the table to which these features belong.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "include": {
+	//       "description": "A comma separated list of optional data to include. Optional data available: schema.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "intersects": {
+	//       "description": "A geometry literal that specifies the spatial restriction of the query.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "limit": {
+	//       "description": "The total number of features to return from the query, irrespective of the number of pages.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "maxResults": {
+	//       "description": "The maximum number of items to include in the response, used for paging.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "orderBy": {
+	//       "description": "An SQL-like order by clause used to sort results. If this parameter is not included, the order of features is undefined.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "pageToken": {
+	//       "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "select": {
+	//       "description": "A SQL-like projection clause used to specify returned properties. If this parameter is not included, all properties are returned.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "version": {
+	//       "description": "The table version to access. See Accessing Public Data for information.",
+	//       "enum": [
+	//         "draft",
+	//         "published"
+	//       ],
+	//       "enumDescriptions": [
+	//         "The draft version.",
+	//         "The published version."
+	//       ],
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "where": {
+	//       "description": "An SQL-like predicate used to filter results.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "tables/{id}/features",
+	//   "response": {
+	//     "$ref": "FeaturesListResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine",
+	//     "https://www.googleapis.com/auth/mapsengine.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.tables.files.insert":
+
+type TablesFilesInsertCall struct {
+	s        *Service
+	id       string
+	filename string
+	opt_     map[string]interface{}
+	media_   io.Reader
+}
+
+// Insert: Upload a file to a placeholder table asset. See Table Upload
+// in the Developer's Guide for more information.
+// Supported file types
+// are listed in the Supported data formats and limits article of the
+// Google Maps Engine help center.
+func (r *TablesFilesService) Insert(id string, filename string) *TablesFilesInsertCall {
+	c := &TablesFilesInsertCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	c.filename = filename
+	return c
+}
+func (c *TablesFilesInsertCall) Media(r io.Reader) *TablesFilesInsertCall {
+	c.media_ = r
+	return c
+}
+
+func (c *TablesFilesInsertCall) Do() error {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	params.Set("filename", fmt.Sprintf("%v", c.filename))
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tables/{id}/files")
+	if c.media_ != nil {
+		urls = strings.Replace(urls, "https://www.googleapis.com/", "https://www.googleapis.com/upload/", 1)
+		params.Set("uploadType", "multipart")
+	}
+	urls += "?" + params.Encode()
+	body = new(bytes.Buffer)
+	ctype := "application/json"
+	contentLength_, hasMedia_ := googleapi.ConditionallyIncludeMedia(c.media_, &body, &ctype)
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	if hasMedia_ {
+		req.ContentLength = contentLength_
+	}
+	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 err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return err
+	}
+	return nil
+	// {
+	//   "description": "Upload a file to a placeholder table asset. See Table Upload in the Developer's Guide for more information.\nSupported file types are listed in the Supported data formats and limits article of the Google Maps Engine help center.",
+	//   "httpMethod": "POST",
+	//   "id": "mapsengine.tables.files.insert",
+	//   "mediaUpload": {
+	//     "accept": [
+	//       "*/*"
+	//     ],
+	//     "maxSize": "1GB",
+	//     "protocols": {
+	//       "resumable": {
+	//         "multipart": true,
+	//         "path": "/resumable/upload/mapsengine/exp2/tables/{id}/files"
+	//       },
+	//       "simple": {
+	//         "multipart": true,
+	//         "path": "/upload/mapsengine/exp2/tables/{id}/files"
+	//       }
+	//     }
+	//   },
+	//   "parameterOrder": [
+	//     "id",
+	//     "filename"
+	//   ],
+	//   "parameters": {
+	//     "filename": {
+	//       "description": "The file name of this uploaded file.",
+	//       "location": "query",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "id": {
+	//       "description": "The ID of the table asset.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "tables/{id}/files",
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ],
+	//   "supportsMediaUpload": true
+	// }
+
+}
+
+// method id "mapsengine.tables.parents.list":
+
+type TablesParentsListCall struct {
+	s    *Service
+	id   string
+	opt_ map[string]interface{}
+}
+
+// List: Return all parent ids of the specified table.
+func (r *TablesParentsService) List(id string) *TablesParentsListCall {
+	c := &TablesParentsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of items to include in a single response page. The maximum
+// supported value is 50.
+func (c *TablesParentsListCall) MaxResults(maxResults int64) *TablesParentsListCall {
+	c.opt_["maxResults"] = maxResults
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": The continuation
+// token, used to page through large result sets. To get the next page
+// of results, set this parameter to the value of nextPageToken from the
+// previous response.
+func (c *TablesParentsListCall) PageToken(pageToken string) *TablesParentsListCall {
+	c.opt_["pageToken"] = pageToken
+	return c
+}
+
+func (c *TablesParentsListCall) Do() (*ParentsListResponse, 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(c.s.BasePath, "tables/{id}/parents")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *ParentsListResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Return all parent ids of the specified table.",
+	//   "httpMethod": "GET",
+	//   "id": "mapsengine.tables.parents.list",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the table whose parents will be listed.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "description": "The maximum number of items to include in a single response page. The maximum supported value is 50.",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "tables/{id}/parents",
+	//   "response": {
+	//     "$ref": "ParentsListResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine",
+	//     "https://www.googleapis.com/auth/mapsengine.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.tables.permissions.batchInsert":
+
+type TablesPermissionsBatchInsertCall struct {
+	s                             *Service
+	id                            string
+	permissionsbatchinsertrequest *PermissionsBatchInsertRequest
+	opt_                          map[string]interface{}
+}
+
+// BatchInsert: Add permission entries to an already existing asset.
+//
+// An
+// asset can hold up to 20 different permission entries. Each
+// batchInsert request is atomic.
+func (r *TablesPermissionsService) BatchInsert(id string, permissionsbatchinsertrequest *PermissionsBatchInsertRequest) *TablesPermissionsBatchInsertCall {
+	c := &TablesPermissionsBatchInsertCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	c.permissionsbatchinsertrequest = permissionsbatchinsertrequest
+	return c
+}
+
+func (c *TablesPermissionsBatchInsertCall) Do() (*PermissionsBatchInsertResponse, error) {
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.permissionsbatchinsertrequest)
+	if err != nil {
+		return nil, err
+	}
+	ctype := "application/json"
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tables/{id}/permissions/batchInsert")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *PermissionsBatchInsertResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Add permission entries to an already existing asset.\n\nAn asset can hold up to 20 different permission entries. Each batchInsert request is atomic.",
+	//   "httpMethod": "POST",
+	//   "id": "mapsengine.tables.permissions.batchInsert",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the asset to which permissions will be added.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "tables/{id}/permissions/batchInsert",
+	//   "request": {
+	//     "$ref": "PermissionsBatchInsertRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "PermissionsBatchInsertResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine"
+	//   ]
+	// }
+
+}
+
+// method id "mapsengine.tables.permissions.list":
+
+type TablesPermissionsListCall struct {
+	s    *Service
+	id   string
+	opt_ map[string]interface{}
+}
+
+// List: Return all of the permissions for the specified asset.
+func (r *TablesPermissionsService) List(id string) *TablesPermissionsListCall {
+	c := &TablesPermissionsListCall{s: r.s, opt_: make(map[string]interface{})}
+	c.id = id
+	return c
+}
+
+func (c *TablesPermissionsListCall) Do() (*PermissionsListResponse, error) {
+	var body io.Reader = nil
+	params := make(url.Values)
+	params.Set("alt", "json")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tables/{id}/permissions")
+	urls += "?" + params.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	googleapi.Expand(req.URL, map[string]string{
+		"id": c.id,
+	})
+	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 googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	var ret *PermissionsListResponse
+	if err := json.NewDecoder(res.Body).Decode(&ret); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Return all of the permissions for the specified asset.",
+	//   "httpMethod": "GET",
+	//   "id": "mapsengine.tables.permissions.list",
+	//   "parameterOrder": [
+	//     "id"
+	//   ],
+	//   "parameters": {
+	//     "id": {
+	//       "description": "The ID of the asset whose permissions will be listed.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "tables/{id}/permissions",
+	//   "response": {
+	//     "$ref": "PermissionsListResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/mapsengine",
+	//     "https://www.googleapis.com/auth/mapsengine.readonly"
+	//   ]
+	// }
+
+}
diff --git a/mapsengine/v1/mapsengine-api.json b/mapsengine/v1/mapsengine-api.json
index ef96a42..2c8d9e1 100644
--- a/mapsengine/v1/mapsengine-api.json
+++ b/mapsengine/v1/mapsengine-api.json
@@ -1,12 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/lXU4Ldyb8PUNFjDdYKoIcmxRcg0\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/s36IsyMFF_kMjrNCPamCYT76-rs\"",
  "discoveryVersion": "v1",
  "id": "mapsengine:v1",
  "name": "mapsengine",
  "canonicalName": "Maps Engine",
  "version": "v1",
- "revision": "20140722",
+ "revision": "20140813",
  "title": "Google Maps Engine API",
  "description": "The Google Maps Engine API allows developers to store and query geospatial vector and raster data.",
  "ownerDomain": "google.com",
@@ -205,7 +205,8 @@
     },
     "nextPageToken": {
      "type": "string",
-     "description": "Next page token."
+     "description": "Next page token.",
+     "format": "byte"
     }
    }
   },
@@ -274,6 +275,13 @@
     }
    }
   },
+  "Datasources": {
+   "id": "Datasources",
+   "type": "array",
+   "items": {
+    "$ref": "Datasource"
+   }
+  },
   "DisplayRule": {
    "id": "DisplayRule",
    "type": "object",
@@ -864,11 +872,8 @@
      }
     },
     "datasources": {
-     "type": "array",
-     "description": "An array of datasources used to build this Layer. If datasourceType is \"image\", then each element in this array is a reference to an Image or RasterCollection. If datasourceType is \"table\" then each element in this array is a reference to a Vector Table.",
-     "items": {
-      "$ref": "Datasource"
-     }
+     "$ref": "Datasources",
+     "description": "An array of datasources used to build this Layer. If datasourceType is \"image\", then each element in this array is a reference to an Image or RasterCollection. If datasourceType is \"table\" then each element in this array is a reference to a Vector Table."
     },
     "description": {
      "type": "string",
@@ -876,12 +881,7 @@
     },
     "draftAccessList": {
      "type": "string",
-     "description": "Deprecated: The name of an access list of the Map Editor type. The user on whose behalf the request is being sent must be an editor on that access list. Read About access lists in the Google Maps Engine help center for more information.",
-     "annotations": {
-      "required": [
-       "mapsengine.layers.create"
-      ]
-     }
+     "description": "Deprecated: The name of an access list of the Map Editor type. The user on whose behalf the request is being sent must be an editor on that access list. Note: Google Maps Engine no longer uses access lists. For backward compatibility, the API still accepts access lists for projects that are already using access lists. If you created a GME account/project after July 14th, 2014, you will not be able to send API requests that include access lists. The API does not yet support the new permissions model. When you create a map via the API without specifying permissions, the account that created the map is the owner and has effective administrator access. Users can then use the Maps Engine user interface to adjust the permissions. This is a temporary workaround until the API supports the new permissions model. Read Add new users and groups in the Google Maps Engine help center for more information."
     },
     "etag": {
      "type": "string",
@@ -934,18 +934,15 @@
     },
     "publishedAccessList": {
      "type": "string",
-     "description": "Deprecated: The access list to whom view permissions are granted. The value must be the name of a Maps Engine access list of the Map Viewer type, and the user must be a viewer on that list. Read About access lists in the Google Maps Engine help center for more information."
+     "description": "Deprecated: The access list to whom view permissions are granted. The value must be the name of a Maps Engine access list of the Map Viewer type, and the user must be a viewer on that list. Read Share data, layers, and maps in the Google Maps Engine help center for more information."
     },
     "style": {
      "$ref": "VectorStyle",
      "description": "The Styling information for a vector layer."
     },
     "tags": {
-     "type": "array",
-     "description": "Tags of this Layer.",
-     "items": {
-      "type": "string"
-     }
+     "$ref": "Tags",
+     "description": "Tags of this Layer."
     }
    }
   },
@@ -963,7 +960,8 @@
     },
     "nextPageToken": {
      "type": "string",
-     "description": "Next page token."
+     "description": "Next page token.",
+     "format": "byte"
     }
    }
   },
@@ -1036,11 +1034,8 @@
      }
     },
     "contents": {
-     "type": "array",
-     "description": "The contents of this Map.",
-     "items": {
-      "$ref": "MapItem"
-     }
+     "$ref": "MapContents",
+     "description": "The contents of this Map."
     },
     "creationTime": {
      "type": "string",
@@ -1057,12 +1052,7 @@
     },
     "draftAccessList": {
      "type": "string",
-     "description": "Deprecated: The name of an access list of the Map Editor type. The user on whose behalf the request is being sent must be an editor on that access list. Read About access lists in the Google Maps Engine help center for more information.",
-     "annotations": {
-      "required": [
-       "mapsengine.maps.create"
-      ]
-     }
+     "description": "Deprecated: The name of an access list of the Map Editor type. The user on whose behalf the request is being sent must be an editor on that access list. Note: Google Maps Engine no longer uses access lists. For backward compatibility, the API still accepts access lists for projects that are already using access lists. If you created a GME account/project after July 14th, 2014, you will not be able to send API requests that include access lists. The API does not yet support the new permissions model. When you create a map via the API without specifying permissions, the account that created the map is the owner and has effective administrator access. Users can then use the Maps Engine user interface to adjust the permissions. This is a temporary workaround until the API supports the new permissions model. Read Add new users and groups in the Google Maps Engine help center for more information."
     },
     "etag": {
      "type": "string",
@@ -1115,32 +1105,41 @@
     },
     "publishedAccessList": {
      "type": "string",
-     "description": "Deprecated: The access list to whom view permissions are granted. The value must be the name of a Maps Engine access list of the Map Viewer type, and the user must be a viewer on that list. Read About access lists in the Google Maps Engine help center for more information."
+     "description": "Deprecated: The access list to whom view permissions are granted. The value must be the name of a Maps Engine access list of the Map Viewer type, and the user must be a viewer on that list. Read Share data, layers, and maps in the Google Maps Engine help center for more information."
+    },
+    "publishingStatus": {
+     "type": "string",
+     "description": "The publishing status of this map.",
+     "enum": [
+      "notPublished",
+      "published"
+     ],
+     "enumDescriptions": [
+      "",
+      ""
+     ]
     },
     "tags": {
-     "type": "array",
-     "description": "Tags of this Map.",
-     "items": {
-      "type": "string"
-     }
+     "$ref": "Tags",
+     "description": "Tags of this Map."
     },
     "versions": {
      "type": "array",
-     "description": "An array containing the available versions of this Map. Currently may only contain \"published\".",
+     "description": "Deprecated: An array containing the available versions of this Map. Currently may only contain \"published\". The publishingStatus field should be used instead.",
      "items": {
       "type": "string",
-      "enum": [
-       "draft",
-       "published"
-      ],
-      "enumDescriptions": [
-       "",
-       ""
-      ]
+      "default": "published"
      }
     }
    }
   },
+  "MapContents": {
+   "id": "MapContents",
+   "type": "array",
+   "items": {
+    "$ref": "MapItem"
+   }
+  },
   "MapFolder": {
    "id": "MapFolder",
    "type": "object",
@@ -1340,7 +1339,8 @@
     },
     "nextPageToken": {
      "type": "string",
-     "description": "Next page token."
+     "description": "Next page token.",
+     "format": "byte"
     }
    }
   },
@@ -1480,12 +1480,7 @@
     },
     "draftAccessList": {
      "type": "string",
-     "description": "Deprecated: The name of an access list of the Map Editor type. The user on whose behalf the request is being sent must be an editor on that access list. Read About access lists in the Google Maps Engine help center for more information.",
-     "annotations": {
-      "required": [
-       "mapsengine.rasters.upload"
-      ]
-     }
+     "description": "Deprecated: The name of an access list of the Map Editor type. The user on whose behalf the request is being sent must be an editor on that access list. Note: Google Maps Engine no longer uses access lists. For backward compatibility, the API still accepts access lists for projects that are already using access lists. If you created a GME account/project after July 14th, 2014, you will not be able to send API requests that include access lists. The API does not yet support the new permissions model. When you create a map via the API without specifying permissions, the account that created the map is the owner and has effective administrator access. Users can then use the Maps Engine user interface to adjust the permissions. This is a temporary workaround until the API supports the new permissions model. Read Add new users and groups in the Google Maps Engine help center for more information."
     },
     "etag": {
      "type": "string",
@@ -1515,19 +1510,7 @@
     "maskType": {
      "type": "string",
      "description": "The mask processing type of this Raster.",
-     "default": "autoMask",
-     "enum": [
-      "alphaChannelMask",
-      "autoMask",
-      "imageMask",
-      "noMask"
-     ],
-     "enumDescriptions": [
-      "",
-      "",
-      "",
-      ""
-     ]
+     "default": "autoMask"
     },
     "name": {
      "type": "string",
@@ -1581,11 +1564,8 @@
      }
     },
     "tags": {
-     "type": "array",
-     "description": "Tags of this Raster.",
-     "items": {
-      "type": "string"
-     }
+     "$ref": "Tags",
+     "description": "Tags of this Raster."
     }
    }
   },
@@ -1617,12 +1597,7 @@
     },
     "draftAccessList": {
      "type": "string",
-     "description": "Deprecated: The name of an access list of the Map Editor type. The user on whose behalf the request is being sent must be an editor on that access list. Read About access lists in the Google Maps Engine help center for more information.",
-     "annotations": {
-      "required": [
-       "mapsengine.rasterCollections.create"
-      ]
-     }
+     "description": "Deprecated: The name of an access list of the Map Editor type. The user on whose behalf the request is being sent must be an editor on that access list. Note: Google Maps Engine no longer uses access lists. For backward compatibility, the API still accepts access lists for projects that are already using access lists. If you created a GME account/project after July 14th, 2014, you will not be able to send API requests that include access lists. The API does not yet support the new permissions model. When you create a map via the API without specifying permissions, the account that created the map is the owner and has effective administrator access. Users can then use the Maps Engine user interface to adjust the permissions. This is a temporary workaround until the API supports the new permissions model. Read Add new users and groups in the Google Maps Engine help center for more information."
     },
     "etag": {
      "type": "string",
@@ -1698,11 +1673,8 @@
      }
     },
     "tags": {
-     "type": "array",
-     "description": "Tags of this RasterCollection.",
-     "items": {
-      "type": "string"
-     }
+     "$ref": "Tags",
+     "description": "Tags of this RasterCollection."
     }
    }
   },
@@ -1713,7 +1685,8 @@
    "properties": {
     "nextPageToken": {
      "type": "string",
-     "description": "Next page token."
+     "description": "Next page token.",
+     "format": "byte"
     },
     "rasterCollections": {
      "type": "array",
@@ -1884,13 +1857,7 @@
     },
     "draftAccessList": {
      "type": "string",
-     "description": "Deprecated: The name of an access list of the Map Editor type. The user on whose behalf the request is being sent must be an editor on that access list. Read About access lists in the Google Maps Engine help center for more information.",
-     "annotations": {
-      "required": [
-       "mapsengine.tables.create",
-       "mapsengine.tables.upload"
-      ]
-     }
+     "description": "Deprecated: The name of an access list of the Map Editor type. The user on whose behalf the request is being sent must be an editor on that access list. Note: Google Maps Engine no longer uses access lists. For backward compatibility, the API still accepts access lists for projects that are already using access lists. If you created a GME account/project after July 14th, 2014, you will not be able to send API requests that include access lists. The API does not yet support the new permissions model. When you create a map via the API without specifying permissions, the account that created the map is the owner and has effective administrator access. Users can then use the Maps Engine user interface to adjust the permissions. This is a temporary workaround until the API supports the new permissions model. Read Add new users and groups in the Google Maps Engine help center for more information."
     },
     "etag": {
      "type": "string",
@@ -1957,7 +1924,7 @@
     },
     "publishedAccessList": {
      "type": "string",
-     "description": "Deprecated: The access list to whom view permissions are granted. The value must be the name of a Maps Engine access list of the Map Viewer type, and the user must be a viewer on that list. Read About access lists in the Google Maps Engine help center for more information."
+     "description": "Deprecated: The access list to whom view permissions are granted. The value must be the name of a Maps Engine access list of the Map Viewer type, and the user must be a viewer on that list. Read Share data, layers, and maps in the Google Maps Engine help center for more information."
     },
     "schema": {
      "$ref": "Schema",
@@ -1969,11 +1936,8 @@
      "default": "UTF-8"
     },
     "tags": {
-     "type": "array",
-     "description": "An array of text strings, with each string representing a tag. More information about tags can be found in the Tagging data article of the Maps Engine help center.",
-     "items": {
-      "type": "string"
-     }
+     "$ref": "Tags",
+     "description": "An array of text strings, with each string representing a tag. More information about tags can be found in the Tagging data article of the Maps Engine help center."
     }
    }
   },
@@ -1989,7 +1953,6 @@
      "type": "string",
      "description": "The type of data stored in this column.",
      "enum": [
-      "boolean",
       "datetime",
       "double",
       "integer",
@@ -2007,7 +1970,6 @@
       "",
       "",
       "",
-      "",
       ""
      ]
     }
@@ -2020,7 +1982,8 @@
    "properties": {
     "nextPageToken": {
      "type": "string",
-     "description": "Next page token."
+     "description": "Next page token.",
+     "format": "byte"
     },
     "tables": {
      "type": "array",
@@ -2031,6 +1994,13 @@
     }
    }
   },
+  "Tags": {
+   "id": "Tags",
+   "type": "array",
+   "items": {
+    "type": "string"
+   }
+  },
   "VectorStyle": {
    "id": "VectorStyle",
    "type": "object",
@@ -3671,7 +3641,7 @@
         },
         "maxResults": {
          "type": "integer",
-         "description": "The maximum number of items to include in the response, used for paging.",
+         "description": "The maximum number of items to include in the response, used for paging. The maximum supported value is 1000.",
          "format": "uint32",
          "location": "query"
         },
diff --git a/mapsengine/v1/mapsengine-gen.go b/mapsengine/v1/mapsengine-gen.go
index 6ec2dd7..e82df9e 100644
--- a/mapsengine/v1/mapsengine-gen.go
+++ b/mapsengine/v1/mapsengine-gen.go
@@ -629,8 +629,18 @@
 
 	// DraftAccessList: Deprecated: The name of an access list of the Map
 	// Editor type. The user on whose behalf the request is being sent must
-	// be an editor on that access list. Read About access lists in the
-	// Google Maps Engine help center for more information.
+	// be an editor on that access list. Note: Google Maps Engine no longer
+	// uses access lists. For backward compatibility, the API still accepts
+	// access lists for projects that are already using access lists. If you
+	// created a GME account/project after July 14th, 2014, you will not be
+	// able to send API requests that include access lists. The API does not
+	// yet support the new permissions model. When you create a map via the
+	// API without specifying permissions, the account that created the map
+	// is the owner and has effective administrator access. Users can then
+	// use the Maps Engine user interface to adjust the permissions. This is
+	// a temporary workaround until the API supports the new permissions
+	// model. Read Add new users and groups in the Google Maps Engine help
+	// center for more information.
 	DraftAccessList string `json:"draftAccessList,omitempty"`
 
 	// Etag: The ETag, used to refer to the current version of the asset.
@@ -655,8 +665,8 @@
 	// PublishedAccessList: Deprecated: The access list to whom view
 	// permissions are granted. The value must be the name of a Maps Engine
 	// access list of the Map Viewer type, and the user must be a viewer on
-	// that list. Read About access lists in the Google Maps Engine help
-	// center for more information.
+	// that list. Read Share data, layers, and maps in the Google Maps
+	// Engine help center for more information.
 	PublishedAccessList string `json:"publishedAccessList,omitempty"`
 
 	// Style: The Styling information for a vector layer.
@@ -726,8 +736,18 @@
 
 	// DraftAccessList: Deprecated: The name of an access list of the Map
 	// Editor type. The user on whose behalf the request is being sent must
-	// be an editor on that access list. Read About access lists in the
-	// Google Maps Engine help center for more information.
+	// be an editor on that access list. Note: Google Maps Engine no longer
+	// uses access lists. For backward compatibility, the API still accepts
+	// access lists for projects that are already using access lists. If you
+	// created a GME account/project after July 14th, 2014, you will not be
+	// able to send API requests that include access lists. The API does not
+	// yet support the new permissions model. When you create a map via the
+	// API without specifying permissions, the account that created the map
+	// is the owner and has effective administrator access. Users can then
+	// use the Maps Engine user interface to adjust the permissions. This is
+	// a temporary workaround until the API supports the new permissions
+	// model. Read Add new users and groups in the Google Maps Engine help
+	// center for more information.
 	DraftAccessList string `json:"draftAccessList,omitempty"`
 
 	// Etag: The ETag, used to refer to the current version of the asset.
@@ -753,15 +773,19 @@
 	// PublishedAccessList: Deprecated: The access list to whom view
 	// permissions are granted. The value must be the name of a Maps Engine
 	// access list of the Map Viewer type, and the user must be a viewer on
-	// that list. Read About access lists in the Google Maps Engine help
-	// center for more information.
+	// that list. Read Share data, layers, and maps in the Google Maps
+	// Engine help center for more information.
 	PublishedAccessList string `json:"publishedAccessList,omitempty"`
 
+	// PublishingStatus: The publishing status of this map.
+	PublishingStatus string `json:"publishingStatus,omitempty"`
+
 	// Tags: Tags of this Map.
 	Tags []string `json:"tags,omitempty"`
 
-	// Versions: An array containing the available versions of this Map.
-	// Currently may only contain "published".
+	// Versions: Deprecated: An array containing the available versions of
+	// this Map. Currently may only contain "published". The
+	// publishingStatus field should be used instead.
 	Versions []string `json:"versions,omitempty"`
 }
 
@@ -944,8 +968,18 @@
 
 	// DraftAccessList: Deprecated: The name of an access list of the Map
 	// Editor type. The user on whose behalf the request is being sent must
-	// be an editor on that access list. Read About access lists in the
-	// Google Maps Engine help center for more information.
+	// be an editor on that access list. Note: Google Maps Engine no longer
+	// uses access lists. For backward compatibility, the API still accepts
+	// access lists for projects that are already using access lists. If you
+	// created a GME account/project after July 14th, 2014, you will not be
+	// able to send API requests that include access lists. The API does not
+	// yet support the new permissions model. When you create a map via the
+	// API without specifying permissions, the account that created the map
+	// is the owner and has effective administrator access. Users can then
+	// use the Maps Engine user interface to adjust the permissions. This is
+	// a temporary workaround until the API supports the new permissions
+	// model. Read Add new users and groups in the Google Maps Engine help
+	// center for more information.
 	DraftAccessList string `json:"draftAccessList,omitempty"`
 
 	// Etag: The ETag, used to refer to the current version of the asset.
@@ -1000,8 +1034,18 @@
 
 	// DraftAccessList: Deprecated: The name of an access list of the Map
 	// Editor type. The user on whose behalf the request is being sent must
-	// be an editor on that access list. Read About access lists in the
-	// Google Maps Engine help center for more information.
+	// be an editor on that access list. Note: Google Maps Engine no longer
+	// uses access lists. For backward compatibility, the API still accepts
+	// access lists for projects that are already using access lists. If you
+	// created a GME account/project after July 14th, 2014, you will not be
+	// able to send API requests that include access lists. The API does not
+	// yet support the new permissions model. When you create a map via the
+	// API without specifying permissions, the account that created the map
+	// is the owner and has effective administrator access. Users can then
+	// use the Maps Engine user interface to adjust the permissions. This is
+	// a temporary workaround until the API supports the new permissions
+	// model. Read Add new users and groups in the Google Maps Engine help
+	// center for more information.
 	DraftAccessList string `json:"draftAccessList,omitempty"`
 
 	// Etag: The ETag, used to refer to the current version of the asset.
@@ -1134,8 +1178,18 @@
 
 	// DraftAccessList: Deprecated: The name of an access list of the Map
 	// Editor type. The user on whose behalf the request is being sent must
-	// be an editor on that access list. Read About access lists in the
-	// Google Maps Engine help center for more information.
+	// be an editor on that access list. Note: Google Maps Engine no longer
+	// uses access lists. For backward compatibility, the API still accepts
+	// access lists for projects that are already using access lists. If you
+	// created a GME account/project after July 14th, 2014, you will not be
+	// able to send API requests that include access lists. The API does not
+	// yet support the new permissions model. When you create a map via the
+	// API without specifying permissions, the account that created the map
+	// is the owner and has effective administrator access. Users can then
+	// use the Maps Engine user interface to adjust the permissions. This is
+	// a temporary workaround until the API supports the new permissions
+	// model. Read Add new users and groups in the Google Maps Engine help
+	// center for more information.
 	DraftAccessList string `json:"draftAccessList,omitempty"`
 
 	// Etag: The ETag, used to refer to the current version of the asset.
@@ -1163,8 +1217,8 @@
 	// PublishedAccessList: Deprecated: The access list to whom view
 	// permissions are granted. The value must be the name of a Maps Engine
 	// access list of the Map Viewer type, and the user must be a viewer on
-	// that list. Read About access lists in the Google Maps Engine help
-	// center for more information.
+	// that list. Read Share data, layers, and maps in the Google Maps
+	// Engine help center for more information.
 	PublishedAccessList string `json:"publishedAccessList,omitempty"`
 
 	// Schema: The schema for this table.
@@ -5677,7 +5731,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": The maximum
-// number of items to include in the response, used for paging.
+// number of items to include in the response, used for paging. The
+// maximum supported value is 1000.
 func (c *TablesFeaturesListCall) MaxResults(maxResults int64) *TablesFeaturesListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -5804,7 +5859,7 @@
 	//       "type": "integer"
 	//     },
 	//     "maxResults": {
-	//       "description": "The maximum number of items to include in the response, used for paging.",
+	//       "description": "The maximum number of items to include in the response, used for paging. The maximum supported value is 1000.",
 	//       "format": "uint32",
 	//       "location": "query",
 	//       "type": "integer"
diff --git a/mirror/v1/mirror-api.json b/mirror/v1/mirror-api.json
index 8745050..275aacb 100644
--- a/mirror/v1/mirror-api.json
+++ b/mirror/v1/mirror-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"C11OM5Qtr9122-scy_WeqND9D3o/P_6QqcENeFe4mOWvklmxjxxN35k\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/2W5eGtDxcJnyE2i634mO8QryaN8\"",
  "discoveryVersion": "v1",
  "id": "mirror:v1",
  "name": "mirror",
  "version": "v1",
+ "revision": "20140813",
  "title": "Google Mirror API",
  "description": "API for interacting with Glass users via the timeline.",
  "ownerDomain": "google.com",
@@ -455,7 +456,7 @@
    "properties": {
     "id": {
      "type": "string",
-     "description": "The setting's ID. The following IDs are valid:  \n- locale - The key to the user’s language/locale (BCP 47 identifier) that Glassware should use to render localized content."
+     "description": "The setting's ID. The following IDs are valid:  \n- locale - The key to the user’s language/locale (BCP 47 identifier) that Glassware should use to render localized content.  \n- timezone - The key to the user’s current time zone region as defined in the tz database. Example: America/Los_Angeles."
     },
     "kind": {
      "type": "string",
@@ -942,7 +943,7 @@
      "parameters": {
       "id": {
        "type": "string",
-       "description": "The ID of the setting. The following IDs are valid: \n- locale - The key to the user’s language/locale (BCP 47 identifier) that Glassware should use to render localized content.",
+       "description": "The ID of the setting. The following IDs are valid: \n- locale - The key to the user’s language/locale (BCP 47 identifier) that Glassware should use to render localized content. \n- timezone - The key to the user’s current time zone region as defined in the tz database. Example: America/Los_Angeles.",
        "required": true,
        "location": "path"
       }
diff --git a/mirror/v1/mirror-gen.go b/mirror/v1/mirror-gen.go
index aa62128..471de02 100644
--- a/mirror/v1/mirror-gen.go
+++ b/mirror/v1/mirror-gen.go
@@ -437,6 +437,9 @@
 	// - locale - The
 	// key to the user’s language/locale (BCP 47 identifier) that
 	// Glassware should use to render localized content.
+	// - timezone - The
+	// key to the user’s current time zone region as defined in the tz
+	// database. Example: America/Los_Angeles.
 	Id string `json:"id,omitempty"`
 
 	// Kind: The type of resource. This is always mirror#setting.
@@ -1368,7 +1371,7 @@
 	//   ],
 	//   "parameters": {
 	//     "id": {
-	//       "description": "The ID of the setting. The following IDs are valid: \n- locale - The key to the user’s language/locale (BCP 47 identifier) that Glassware should use to render localized content.",
+	//       "description": "The ID of the setting. The following IDs are valid: \n- locale - The key to the user’s language/locale (BCP 47 identifier) that Glassware should use to render localized content. \n- timezone - The key to the user’s current time zone region as defined in the tz database. Example: America/Los_Angeles.",
 	//       "location": "path",
 	//       "required": true,
 	//       "type": "string"
diff --git a/oauth2/v1/oauth2-api.json b/oauth2/v1/oauth2-api.json
index 64dee21..18754ea 100644
--- a/oauth2/v1/oauth2-api.json
+++ b/oauth2/v1/oauth2-api.json
@@ -1,11 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/WnsDEOWuKteGyxrkkrdhoGfx6k0\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/VsFo3jtXJ9eGew_4Uk1DU4fszu4\"",
  "discoveryVersion": "v1",
  "id": "oauth2:v1",
  "name": "oauth2",
  "version": "v1",
- "revision": "20140710",
+ "revision": "20140719",
  "title": "Google OAuth2 API",
  "description": "Lets you access OAuth2 protocol related APIs.",
  "ownerDomain": "google.com",
diff --git a/oauth2/v2/oauth2-api.json b/oauth2/v2/oauth2-api.json
index 25073d4..c04ff21 100644
--- a/oauth2/v2/oauth2-api.json
+++ b/oauth2/v2/oauth2-api.json
@@ -1,11 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/UsfvCGeoLnuM7BeL9MiiwEUuUtw\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/6OZFb6T-g1z4mvV2ygH74OSkga0\"",
  "discoveryVersion": "v1",
  "id": "oauth2:v2",
  "name": "oauth2",
  "version": "v2",
- "revision": "20140710",
+ "revision": "20140719",
  "title": "Google OAuth2 API",
  "description": "Lets you access OAuth2 protocol related APIs.",
  "ownerDomain": "google.com",
diff --git a/orkut/v2/orkut-api.json b/orkut/v2/orkut-api.json
index aee0d74..2020b72 100644
--- a/orkut/v2/orkut-api.json
+++ b/orkut/v2/orkut-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/xiMdcGrwm4vNaftUqbcmg_X46_0\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/qCYcIF9SU9Hl8Qg-et4yd-nbiwI\"",
  "discoveryVersion": "v1",
  "id": "orkut:v2",
  "name": "orkut",
  "version": "v2",
+ "revision": "20120223",
  "title": "Orkut API",
  "description": "Lets you manage activities, comments and badges in Orkut. More stuff coming in time.",
  "ownerDomain": "google.com",
diff --git a/pagespeedonline/v1/pagespeedonline-api.json b/pagespeedonline/v1/pagespeedonline-api.json
index 32b1a07..202257a 100644
--- a/pagespeedonline/v1/pagespeedonline-api.json
+++ b/pagespeedonline/v1/pagespeedonline-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"C11OM5Qtr9122-scy_WeqND9D3o/tevBz-thgzH_ImSvqLYeF9mOfTw\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/i9zrKH7a71FIACHf4pP1Da2VYE4\"",
  "discoveryVersion": "v1",
  "id": "pagespeedonline:v1",
  "name": "pagespeedonline",
  "version": "v1",
+ "revision": "20140528",
  "title": "PageSpeed Insights API",
  "description": "Lets you analyze the performance of a web page and get tailored suggestions to make that page faster.",
  "ownerDomain": "google.com",
diff --git a/plus/v1/plus-api.json b/plus/v1/plus-api.json
index 647d7a6..aa4053e 100644
--- a/plus/v1/plus-api.json
+++ b/plus/v1/plus-api.json
@@ -1,11 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/fov4uc5XJ7Fg-ZZdDHGI3tWBqr8\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/W6HiT3juzZas7FxprzaFoyamSVI\"",
  "discoveryVersion": "v1",
  "id": "plus:v1",
  "name": "plus",
  "version": "v1",
- "revision": "20140718",
+ "revision": "20140817",
  "title": "Google+ API",
  "description": "The Google+ API enables developers to build on top of the Google+ platform.",
  "ownerDomain": "google.com",
diff --git a/plusdomains/v1/plusdomains-api.json b/plusdomains/v1/plusdomains-api.json
index 6d4e9dc..4b912b1 100644
--- a/plusdomains/v1/plusdomains-api.json
+++ b/plusdomains/v1/plusdomains-api.json
@@ -1,11 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/tbwQ2vsOQc910gnFzUqE0UEarNg\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/u5b77C1yhyKRAS8j69E4Zz3j9qI\"",
  "discoveryVersion": "v1",
  "id": "plusDomains:v1",
  "name": "plusDomains",
  "version": "v1",
- "revision": "20140718",
+ "revision": "20140817",
  "title": "Google+ Domains API",
  "description": "The Google+ API enables developers to build on top of the Google+ platform.",
  "ownerDomain": "google.com",
diff --git a/prediction/v1.2/prediction-api.json b/prediction/v1.2/prediction-api.json
index 2f587c5..83b7b2d 100644
--- a/prediction/v1.2/prediction-api.json
+++ b/prediction/v1.2/prediction-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/09e1Ml5Gun7YuEJCdDnZKGXCSr8\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/vqbJcfoFrtPpK9W2dvUTdM5aWmI\"",
  "discoveryVersion": "v1",
  "id": "prediction:v1.2",
  "name": "prediction",
  "version": "v1.2",
+ "revision": "20140522",
  "title": "Prediction API",
  "description": "Lets you access a cloud hosted machine learning service that makes it easy to build smart apps",
  "ownerDomain": "google.com",
diff --git a/prediction/v1.3/prediction-api.json b/prediction/v1.3/prediction-api.json
index cbcdd73..612b454 100644
--- a/prediction/v1.3/prediction-api.json
+++ b/prediction/v1.3/prediction-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/LnKBxoqCwKX9VdR55fP9N9U7tho\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/AH0kDxitXVy6ezxE7JaWy7alDdY\"",
  "discoveryVersion": "v1",
  "id": "prediction:v1.3",
  "name": "prediction",
  "version": "v1.3",
+ "revision": "20140522",
  "title": "Prediction API",
  "description": "Lets you access a cloud hosted machine learning service that makes it easy to build smart apps",
  "ownerDomain": "google.com",
diff --git a/prediction/v1.4/prediction-api.json b/prediction/v1.4/prediction-api.json
index 9796320..93dc2e1 100644
--- a/prediction/v1.4/prediction-api.json
+++ b/prediction/v1.4/prediction-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/UHTvp9INyqQZLFiUGGWOxf3PFTA\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/vTEPhd5Iea8_7PtKnWKo1lkHwg8\"",
  "discoveryVersion": "v1",
  "id": "prediction:v1.4",
  "name": "prediction",
  "version": "v1.4",
+ "revision": "20140522",
  "title": "Prediction API",
  "description": "Lets you access a cloud hosted machine learning service that makes it easy to build smart apps",
  "ownerDomain": "google.com",
diff --git a/prediction/v1.5/prediction-api.json b/prediction/v1.5/prediction-api.json
index 630bc35..9708d93 100644
--- a/prediction/v1.5/prediction-api.json
+++ b/prediction/v1.5/prediction-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/ym-BJa5yGEZsHgX-PiovxSth2PY\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/07rbeW7QivPtt7IIYTOaHuwiDFw\"",
  "discoveryVersion": "v1",
  "id": "prediction:v1.5",
  "name": "prediction",
  "version": "v1.5",
+ "revision": "20140522",
  "title": "Prediction API",
  "description": "Lets you access a cloud hosted machine learning service that makes it easy to build smart apps",
  "ownerDomain": "google.com",
diff --git a/pubsub/v1beta1/pubsub-api.json b/pubsub/v1beta1/pubsub-api.json
index 58a253c..40ea2a3 100644
--- a/pubsub/v1beta1/pubsub-api.json
+++ b/pubsub/v1beta1/pubsub-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"C11OM5Qtr9122-scy_WeqND9D3o/cp0KDkMehu3SqUw99RgMeyF5zdU\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/i_qPP_WIS-3-N2T8CIrQnHeWSiE\"",
  "discoveryVersion": "v1",
  "id": "pubsub:v1beta1",
  "name": "pubsub",
  "version": "v1beta1",
+ "revision": "20140723",
  "title": "Cloud Pub/Sub API",
  "description": "Provides reliable, many-to-many, asynchronous messaging between applications.",
  "ownerDomain": "google.com",
@@ -111,10 +112,12 @@
     },
     "numValue": {
      "type": "string",
+     "description": "An integer value.",
      "format": "int64"
     },
     "strValue": {
-     "type": "string"
+     "type": "string",
+     "description": "A string value."
     }
    }
   },
diff --git a/pubsub/v1beta1/pubsub-gen.go b/pubsub/v1beta1/pubsub-gen.go
index 04856e0..ce03cf6 100644
--- a/pubsub/v1beta1/pubsub-gen.go
+++ b/pubsub/v1beta1/pubsub-gen.go
@@ -117,8 +117,10 @@
 	// spanner.google.com/universe
 	Key string `json:"key,omitempty"`
 
+	// NumValue: An integer value.
 	NumValue int64 `json:"numValue,omitempty,string"`
 
+	// StrValue: A string value.
 	StrValue string `json:"strValue,omitempty"`
 }
 
diff --git a/qpxexpress/v1/qpxexpress-api.json b/qpxexpress/v1/qpxexpress-api.json
index 47b5a77..c863e0f 100644
--- a/qpxexpress/v1/qpxexpress-api.json
+++ b/qpxexpress/v1/qpxexpress-api.json
@@ -1,11 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/Z2cCLQpb_4OOaORWyNRnzCLe6ag\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/oRXkfQJbU2CyvfsUv40EHopWGd0\"",
  "discoveryVersion": "v1",
  "id": "qpxExpress:v1",
  "name": "qpxExpress",
  "canonicalName": "QPX Express",
  "version": "v1",
+ "revision": "20140321",
  "title": "QPX Express API",
  "description": "Lets you find the least expensive flights between an origin and a destination.",
  "ownerDomain": "google.com",
diff --git a/replicapool/v1beta1/replicapool-api.json b/replicapool/v1beta1/replicapool-api.json
index 6246c93..bfe44e9 100644
--- a/replicapool/v1beta1/replicapool-api.json
+++ b/replicapool/v1beta1/replicapool-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"C11OM5Qtr9122-scy_WeqND9D3o/TfqVrl1FllgJa1w8F40ZhNul9GY\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/MU2uMG1apLmVn-PBkLrFG-V1Qes\"",
  "discoveryVersion": "v1",
  "id": "replicapool:v1beta1",
  "name": "replicapool",
  "version": "v1beta1",
+ "revision": "20140727",
  "title": "Replica Pool API",
  "description": "The Replica Pool API allows users to declaratively provision and manage groups of Google Compute Engine instances based on a common template.",
  "ownerDomain": "google.com",
diff --git a/reseller/v1/reseller-api.json b/reseller/v1/reseller-api.json
index 2607dc6..5243d62 100644
--- a/reseller/v1/reseller-api.json
+++ b/reseller/v1/reseller-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/Qaw4O4xIZ1X1A6NR-C3D43AiI0M\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/WKsRWBQXvzPbkJLogUZV4PnpLRk\"",
  "discoveryVersion": "v1",
  "id": "reseller:v1",
  "name": "reseller",
  "version": "v1",
+ "revision": "20131109",
  "title": "Enterprise Apps Reseller API",
  "description": "Lets you create and manage your customers and their subscriptions.",
  "ownerDomain": "google.com",
diff --git a/reseller/v1sandbox/reseller-api.json b/reseller/v1sandbox/reseller-api.json
index 29d71cb..47c4283 100644
--- a/reseller/v1sandbox/reseller-api.json
+++ b/reseller/v1sandbox/reseller-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/lCOFlgVtGlgupSVNF85eEEfwphE\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/75BYrgCdMdHqCupPK8UXGNZ39xA\"",
  "discoveryVersion": "v1",
  "id": "reseller:v1sandbox",
  "name": "reseller",
  "version": "v1sandbox",
+ "revision": "20131109",
  "title": "Enterprise Apps Reseller API",
  "description": "Lets you create and manage your customers and their subscriptions.",
  "ownerDomain": "google.com",
diff --git a/resourceviews/v1beta1/resourceviews-api.json b/resourceviews/v1beta1/resourceviews-api.json
index 804a55a..10fa056 100644
--- a/resourceviews/v1beta1/resourceviews-api.json
+++ b/resourceviews/v1beta1/resourceviews-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"C11OM5Qtr9122-scy_WeqND9D3o/Ork0VN4Xb-PDd9GiQ69V3C5zjl0\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/pVZ6N4zg8YUBo0usXnyYxvGf15U\"",
  "discoveryVersion": "v1",
  "id": "resourceviews:v1beta1",
  "name": "resourceviews",
  "version": "v1beta1",
+ "revision": "20140806",
  "title": "Resource Views API",
  "description": "The Resource View API allows users to create and manage logical sets of Google Compute Engine instances.",
  "ownerDomain": "google.com",
@@ -74,6 +75,12 @@
     "https://www.googleapis.com/auth/cloud-platform": {
      "description": "View and manage your data across Google Cloud Platform services"
     },
+    "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/ndev.cloudman": {
      "description": "View and manage your Google Cloud Platform management resources and deployment status information"
     },
@@ -189,7 +196,7 @@
     },
     "id": {
      "type": "string",
-     "description": "The ID of the resource view. For internal use only."
+     "description": "[Output Only] The ID of the resource view."
     },
     "kind": {
      "type": "string",
@@ -261,7 +268,7 @@
    "properties": {
     "members": {
      "type": "array",
-     "description": "The resources in the view.",
+     "description": "The full URL of resources in the view.",
      "items": {
       "type": "string"
      }
@@ -343,6 +350,7 @@
      },
      "scopes": [
       "https://www.googleapis.com/auth/cloud-platform",
+      "https://www.googleapis.com/auth/compute",
       "https://www.googleapis.com/auth/ndev.cloudman"
      ]
     },
@@ -378,6 +386,7 @@
      ],
      "scopes": [
       "https://www.googleapis.com/auth/cloud-platform",
+      "https://www.googleapis.com/auth/compute",
       "https://www.googleapis.com/auth/ndev.cloudman"
      ]
     },
@@ -416,6 +425,8 @@
      },
      "scopes": [
       "https://www.googleapis.com/auth/cloud-platform",
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly",
       "https://www.googleapis.com/auth/ndev.cloudman",
       "https://www.googleapis.com/auth/ndev.cloudman.readonly"
      ]
@@ -451,6 +462,7 @@
      },
      "scopes": [
       "https://www.googleapis.com/auth/cloud-platform",
+      "https://www.googleapis.com/auth/compute",
       "https://www.googleapis.com/auth/ndev.cloudman"
      ]
     },
@@ -462,11 +474,11 @@
      "parameters": {
       "maxResults": {
        "type": "integer",
-       "description": "Maximum count of results to be returned. Acceptable values are 0 to 500, inclusive. (Default: 50)",
-       "default": "50",
+       "description": "Maximum count of results to be returned. Acceptable values are 0 to 5000, inclusive. (Default: 5000)",
+       "default": "5000",
        "format": "int32",
        "minimum": "0",
-       "maximum": "500",
+       "maximum": "5000",
        "location": "query"
       },
       "pageToken": {
@@ -496,6 +508,8 @@
      },
      "scopes": [
       "https://www.googleapis.com/auth/cloud-platform",
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly",
       "https://www.googleapis.com/auth/ndev.cloudman",
       "https://www.googleapis.com/auth/ndev.cloudman.readonly"
      ]
@@ -508,11 +522,11 @@
      "parameters": {
       "maxResults": {
        "type": "integer",
-       "description": "Maximum count of results to be returned. Acceptable values are 0 to 500, inclusive. (Default: 50)",
-       "default": "50",
+       "description": "Maximum count of results to be returned. Acceptable values are 0 to 5000, inclusive. (Default: 5000)",
+       "default": "5000",
        "format": "int32",
        "minimum": "0",
-       "maximum": "500",
+       "maximum": "5000",
        "location": "query"
       },
       "pageToken": {
@@ -549,6 +563,8 @@
      },
      "scopes": [
       "https://www.googleapis.com/auth/cloud-platform",
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly",
       "https://www.googleapis.com/auth/ndev.cloudman",
       "https://www.googleapis.com/auth/ndev.cloudman.readonly"
      ]
@@ -588,6 +604,7 @@
      },
      "scopes": [
       "https://www.googleapis.com/auth/cloud-platform",
+      "https://www.googleapis.com/auth/compute",
       "https://www.googleapis.com/auth/ndev.cloudman"
      ]
     }
@@ -630,6 +647,7 @@
      },
      "scopes": [
       "https://www.googleapis.com/auth/cloud-platform",
+      "https://www.googleapis.com/auth/compute",
       "https://www.googleapis.com/auth/ndev.cloudman"
      ]
     },
@@ -665,6 +683,7 @@
      ],
      "scopes": [
       "https://www.googleapis.com/auth/cloud-platform",
+      "https://www.googleapis.com/auth/compute",
       "https://www.googleapis.com/auth/ndev.cloudman"
      ]
     },
@@ -703,6 +722,8 @@
      },
      "scopes": [
       "https://www.googleapis.com/auth/cloud-platform",
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly",
       "https://www.googleapis.com/auth/ndev.cloudman",
       "https://www.googleapis.com/auth/ndev.cloudman.readonly"
      ]
@@ -738,6 +759,7 @@
      },
      "scopes": [
       "https://www.googleapis.com/auth/cloud-platform",
+      "https://www.googleapis.com/auth/compute",
       "https://www.googleapis.com/auth/ndev.cloudman"
      ]
     },
@@ -749,11 +771,11 @@
      "parameters": {
       "maxResults": {
        "type": "integer",
-       "description": "Maximum count of results to be returned. Acceptable values are 0 to 500, inclusive. (Default: 50)",
-       "default": "50",
+       "description": "Maximum count of results to be returned. Acceptable values are 0 to 5000, inclusive. (Default: 5000)",
+       "default": "5000",
        "format": "int32",
        "minimum": "0",
-       "maximum": "500",
+       "maximum": "5000",
        "location": "query"
       },
       "pageToken": {
@@ -783,6 +805,8 @@
      },
      "scopes": [
       "https://www.googleapis.com/auth/cloud-platform",
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly",
       "https://www.googleapis.com/auth/ndev.cloudman",
       "https://www.googleapis.com/auth/ndev.cloudman.readonly"
      ]
@@ -795,11 +819,11 @@
      "parameters": {
       "maxResults": {
        "type": "integer",
-       "description": "Maximum count of results to be returned. Acceptable values are 0 to 500, inclusive. (Default: 50)",
-       "default": "50",
+       "description": "Maximum count of results to be returned. Acceptable values are 0 to 5000, inclusive. (Default: 5000)",
+       "default": "5000",
        "format": "int32",
        "minimum": "0",
-       "maximum": "500",
+       "maximum": "5000",
        "location": "query"
       },
       "pageToken": {
@@ -836,6 +860,8 @@
      },
      "scopes": [
       "https://www.googleapis.com/auth/cloud-platform",
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly",
       "https://www.googleapis.com/auth/ndev.cloudman",
       "https://www.googleapis.com/auth/ndev.cloudman.readonly"
      ]
@@ -875,6 +901,7 @@
      },
      "scopes": [
       "https://www.googleapis.com/auth/cloud-platform",
+      "https://www.googleapis.com/auth/compute",
       "https://www.googleapis.com/auth/ndev.cloudman"
      ]
     }
diff --git a/resourceviews/v1beta1/resourceviews-gen.go b/resourceviews/v1beta1/resourceviews-gen.go
index 38cb3ab..eb7374e 100644
--- a/resourceviews/v1beta1/resourceviews-gen.go
+++ b/resourceviews/v1beta1/resourceviews-gen.go
@@ -44,6 +44,12 @@
 	// View and manage your data across Google Cloud Platform services
 	CloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform"
 
+	// 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"
+
 	// View and manage your Google Cloud Platform management resources and
 	// deployment status information
 	NdevCloudmanScope = "https://www.googleapis.com/auth/ndev.cloudman"
@@ -136,7 +142,7 @@
 	// Description: The detailed description of the resource view.
 	Description string `json:"description,omitempty"`
 
-	// Id: The ID of the resource view. For internal use only.
+	// Id: [Output Only] The ID of the resource view.
 	Id string `json:"id,omitempty"`
 
 	// Kind: Type of the resource.
@@ -172,7 +178,7 @@
 }
 
 type ZoneViewsListResourcesResponse struct {
-	// Members: The resources in the view.
+	// Members: The full URL of resources in the view.
 	Members []string `json:"members,omitempty"`
 
 	// NextPageToken: A token used for pagination.
@@ -277,6 +283,7 @@
 	//   },
 	//   "scopes": [
 	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute",
 	//     "https://www.googleapis.com/auth/ndev.cloudman"
 	//   ]
 	// }
@@ -356,6 +363,7 @@
 	//   "path": "{projectName}/regions/{region}/resourceViews/{resourceViewName}",
 	//   "scopes": [
 	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute",
 	//     "https://www.googleapis.com/auth/ndev.cloudman"
 	//   ]
 	// }
@@ -442,6 +450,8 @@
 	//   },
 	//   "scopes": [
 	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly",
 	//     "https://www.googleapis.com/auth/ndev.cloudman",
 	//     "https://www.googleapis.com/auth/ndev.cloudman.readonly"
 	//   ]
@@ -530,6 +540,7 @@
 	//   },
 	//   "scopes": [
 	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute",
 	//     "https://www.googleapis.com/auth/ndev.cloudman"
 	//   ]
 	// }
@@ -554,8 +565,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Acceptable values are 0 to 500, inclusive.
-// (Default: 50)
+// results to be returned. Acceptable values are 0 to 5000, inclusive.
+// (Default: 5000)
 func (c *RegionViewsListCall) MaxResults(maxResults int64) *RegionViewsListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -611,11 +622,11 @@
 	//   ],
 	//   "parameters": {
 	//     "maxResults": {
-	//       "default": "50",
-	//       "description": "Maximum count of results to be returned. Acceptable values are 0 to 500, inclusive. (Default: 50)",
+	//       "default": "5000",
+	//       "description": "Maximum count of results to be returned. Acceptable values are 0 to 5000, inclusive. (Default: 5000)",
 	//       "format": "int32",
 	//       "location": "query",
-	//       "maximum": "500",
+	//       "maximum": "5000",
 	//       "minimum": "0",
 	//       "type": "integer"
 	//     },
@@ -643,6 +654,8 @@
 	//   },
 	//   "scopes": [
 	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly",
 	//     "https://www.googleapis.com/auth/ndev.cloudman",
 	//     "https://www.googleapis.com/auth/ndev.cloudman.readonly"
 	//   ]
@@ -670,8 +683,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Acceptable values are 0 to 500, inclusive.
-// (Default: 50)
+// results to be returned. Acceptable values are 0 to 5000, inclusive.
+// (Default: 5000)
 func (c *RegionViewsListresourcesCall) MaxResults(maxResults int64) *RegionViewsListresourcesCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -729,11 +742,11 @@
 	//   ],
 	//   "parameters": {
 	//     "maxResults": {
-	//       "default": "50",
-	//       "description": "Maximum count of results to be returned. Acceptable values are 0 to 500, inclusive. (Default: 50)",
+	//       "default": "5000",
+	//       "description": "Maximum count of results to be returned. Acceptable values are 0 to 5000, inclusive. (Default: 5000)",
 	//       "format": "int32",
 	//       "location": "query",
-	//       "maximum": "500",
+	//       "maximum": "5000",
 	//       "minimum": "0",
 	//       "type": "integer"
 	//     },
@@ -767,6 +780,8 @@
 	//   },
 	//   "scopes": [
 	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly",
 	//     "https://www.googleapis.com/auth/ndev.cloudman",
 	//     "https://www.googleapis.com/auth/ndev.cloudman.readonly"
 	//   ]
@@ -858,6 +873,7 @@
 	//   },
 	//   "scopes": [
 	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute",
 	//     "https://www.googleapis.com/auth/ndev.cloudman"
 	//   ]
 	// }
@@ -948,6 +964,7 @@
 	//   },
 	//   "scopes": [
 	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute",
 	//     "https://www.googleapis.com/auth/ndev.cloudman"
 	//   ]
 	// }
@@ -1027,6 +1044,7 @@
 	//   "path": "{projectName}/zones/{zone}/resourceViews/{resourceViewName}",
 	//   "scopes": [
 	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute",
 	//     "https://www.googleapis.com/auth/ndev.cloudman"
 	//   ]
 	// }
@@ -1113,6 +1131,8 @@
 	//   },
 	//   "scopes": [
 	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly",
 	//     "https://www.googleapis.com/auth/ndev.cloudman",
 	//     "https://www.googleapis.com/auth/ndev.cloudman.readonly"
 	//   ]
@@ -1201,6 +1221,7 @@
 	//   },
 	//   "scopes": [
 	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute",
 	//     "https://www.googleapis.com/auth/ndev.cloudman"
 	//   ]
 	// }
@@ -1225,8 +1246,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Acceptable values are 0 to 500, inclusive.
-// (Default: 50)
+// results to be returned. Acceptable values are 0 to 5000, inclusive.
+// (Default: 5000)
 func (c *ZoneViewsListCall) MaxResults(maxResults int64) *ZoneViewsListCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -1282,11 +1303,11 @@
 	//   ],
 	//   "parameters": {
 	//     "maxResults": {
-	//       "default": "50",
-	//       "description": "Maximum count of results to be returned. Acceptable values are 0 to 500, inclusive. (Default: 50)",
+	//       "default": "5000",
+	//       "description": "Maximum count of results to be returned. Acceptable values are 0 to 5000, inclusive. (Default: 5000)",
 	//       "format": "int32",
 	//       "location": "query",
-	//       "maximum": "500",
+	//       "maximum": "5000",
 	//       "minimum": "0",
 	//       "type": "integer"
 	//     },
@@ -1314,6 +1335,8 @@
 	//   },
 	//   "scopes": [
 	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly",
 	//     "https://www.googleapis.com/auth/ndev.cloudman",
 	//     "https://www.googleapis.com/auth/ndev.cloudman.readonly"
 	//   ]
@@ -1341,8 +1364,8 @@
 }
 
 // MaxResults sets the optional parameter "maxResults": Maximum count of
-// results to be returned. Acceptable values are 0 to 500, inclusive.
-// (Default: 50)
+// results to be returned. Acceptable values are 0 to 5000, inclusive.
+// (Default: 5000)
 func (c *ZoneViewsListresourcesCall) MaxResults(maxResults int64) *ZoneViewsListresourcesCall {
 	c.opt_["maxResults"] = maxResults
 	return c
@@ -1400,11 +1423,11 @@
 	//   ],
 	//   "parameters": {
 	//     "maxResults": {
-	//       "default": "50",
-	//       "description": "Maximum count of results to be returned. Acceptable values are 0 to 500, inclusive. (Default: 50)",
+	//       "default": "5000",
+	//       "description": "Maximum count of results to be returned. Acceptable values are 0 to 5000, inclusive. (Default: 5000)",
 	//       "format": "int32",
 	//       "location": "query",
-	//       "maximum": "500",
+	//       "maximum": "5000",
 	//       "minimum": "0",
 	//       "type": "integer"
 	//     },
@@ -1438,6 +1461,8 @@
 	//   },
 	//   "scopes": [
 	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly",
 	//     "https://www.googleapis.com/auth/ndev.cloudman",
 	//     "https://www.googleapis.com/auth/ndev.cloudman.readonly"
 	//   ]
@@ -1529,6 +1554,7 @@
 	//   },
 	//   "scopes": [
 	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute",
 	//     "https://www.googleapis.com/auth/ndev.cloudman"
 	//   ]
 	// }
diff --git a/siteverification/v1/siteverification-api.json b/siteverification/v1/siteverification-api.json
index eff2196..af2132e 100644
--- a/siteverification/v1/siteverification-api.json
+++ b/siteverification/v1/siteverification-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/T-KUOZ6MW3qGb2TywsMrS2SH2E4\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/RwYHc_wr_RI-M8LU9rCXtGC2FOg\"",
  "discoveryVersion": "v1",
  "id": "siteVerification:v1",
  "name": "siteVerification",
  "version": "v1",
+ "revision": "20131007",
  "title": "Google Site Verification API",
  "description": "Lets you programatically verify ownership of websites or domains with Google.",
  "ownerDomain": "google.com",
diff --git a/spectrum/v1explorer/spectrum-api.json b/spectrum/v1explorer/spectrum-api.json
index e406367..8c61315 100644
--- a/spectrum/v1explorer/spectrum-api.json
+++ b/spectrum/v1explorer/spectrum-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/W1KBbX-gDHMUVgPHQ9VDTGhsP9o\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/jtiRFZ7Of630nldzteZT7PS1eKw\"",
  "discoveryVersion": "v1",
  "id": "spectrum:v1explorer",
  "name": "spectrum",
  "version": "v1explorer",
+ "revision": "20140815",
  "title": "Google Spectrum Database API",
  "description": "API for spectrum-management functions.",
  "ownerDomain": "google.com",
diff --git a/sqladmin/v1beta1/sqladmin-api.json b/sqladmin/v1beta1/sqladmin-api.json
index 0749584..8e5c298 100644
--- a/sqladmin/v1beta1/sqladmin-api.json
+++ b/sqladmin/v1beta1/sqladmin-api.json
@@ -1,11 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/rzbC1mbXRnaKYIRTl-o1XFsAXnM\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/Zxf2TG9gEVluGqqAEtGILrBT_e8\"",
  "discoveryVersion": "v1",
  "id": "sqladmin:v1beta1",
  "name": "sqladmin",
  "canonicalName": "SQL Admin",
  "version": "v1beta1",
+ "revision": "20140507",
  "title": "Cloud SQL Administration API",
  "description": "API for Cloud SQL database instance management.",
  "ownerDomain": "google.com",
diff --git a/sqladmin/v1beta3/sqladmin-api.json b/sqladmin/v1beta3/sqladmin-api.json
index c78ccd4..bb3e262 100644
--- a/sqladmin/v1beta3/sqladmin-api.json
+++ b/sqladmin/v1beta3/sqladmin-api.json
@@ -1,11 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"C11OM5Qtr9122-scy_WeqND9D3o/-0C9cgBAK-bO0svRKvwX8Or1F7I\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/xNgpBqUls7Y0IlwCuXKSgLvZPco\"",
  "discoveryVersion": "v1",
  "id": "sqladmin:v1beta3",
  "name": "sqladmin",
  "canonicalName": "SQL Admin",
  "version": "v1beta3",
+ "revision": "20140507",
  "title": "Cloud SQL Administration API",
  "description": "API for Cloud SQL database instance management.",
  "ownerDomain": "google.com",
diff --git a/storage/v1/storage-api.json b/storage/v1/storage-api.json
index c82eaee..2c5ddbe 100644
--- a/storage/v1/storage-api.json
+++ b/storage/v1/storage-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"C11OM5Qtr9122-scy_WeqND9D3o/Tv0zkakVglJzjuEeKblaGZkWCGE\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/ESEMb6iTrEwlZgUunU7wiP8nloU\"",
  "discoveryVersion": "v1",
  "id": "storage:v1",
  "name": "storage",
  "version": "v1",
+ "revision": "20140809",
  "title": "Cloud Storage API",
  "description": "Lets you store and retrieve potentially-large, immutable data objects.",
  "ownerDomain": "google.com",
diff --git a/storage/v1beta1/storage-api.json b/storage/v1beta1/storage-api.json
index e365387..15d8ce5 100644
--- a/storage/v1beta1/storage-api.json
+++ b/storage/v1beta1/storage-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/IpR4V709mf4kvv_yPnB7Gmo_IHU\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/WTxjtxxdjLbhPCaGTX9oFmwLVuo\"",
  "discoveryVersion": "v1",
  "id": "storage:v1beta1",
  "name": "storage",
  "version": "v1beta1",
+ "revision": "20140809",
  "title": "Cloud Storage API",
  "description": "Lets you store and retrieve potentially-large, immutable data objects.",
  "ownerDomain": "google.com",
diff --git a/storage/v1beta2/storage-api.json b/storage/v1beta2/storage-api.json
index 2181368..6d7bdd0 100644
--- a/storage/v1beta2/storage-api.json
+++ b/storage/v1beta2/storage-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"C11OM5Qtr9122-scy_WeqND9D3o/Y17JpHMU7hxxaCh8xMxuKXh2SnY\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/9zUezMrmgGh9aIl8Sa2KkMyS-9I\"",
  "discoveryVersion": "v1",
  "id": "storage:v1beta2",
  "name": "storage",
  "version": "v1beta2",
+ "revision": "20140809",
  "title": "Cloud Storage API",
  "description": "Lets you store and retrieve potentially-large, immutable data objects.",
  "ownerDomain": "google.com",
diff --git a/taskqueue/v1beta1/taskqueue-api.json b/taskqueue/v1beta1/taskqueue-api.json
index 417944b..95810b2 100644
--- a/taskqueue/v1beta1/taskqueue-api.json
+++ b/taskqueue/v1beta1/taskqueue-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/fu8k3FukjBIEHIV-twy8lOq39to\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/Rq5ZUxOQv3EpPxhPSvrsthtH0_4\"",
  "discoveryVersion": "v1",
  "id": "taskqueue:v1beta1",
  "name": "taskqueue",
  "version": "v1beta1",
+ "revision": "20130318",
  "title": "TaskQueue API",
  "description": "Lets you access a Google App Engine Pull Task Queue over REST.",
  "ownerDomain": "google.com",
diff --git a/taskqueue/v1beta2/taskqueue-api.json b/taskqueue/v1beta2/taskqueue-api.json
index 10ef90a..deb1862 100644
--- a/taskqueue/v1beta2/taskqueue-api.json
+++ b/taskqueue/v1beta2/taskqueue-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/5Hs2SYZ6tc8V9isLu4EuE8s9_qg\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/NdbJrHMoZLPwtpKFHEyZMJzpuTM\"",
  "discoveryVersion": "v1",
  "id": "taskqueue:v1beta2",
  "name": "taskqueue",
  "version": "v1beta2",
+ "revision": "20130318",
  "title": "TaskQueue API",
  "description": "Lets you access a Google App Engine Pull Task Queue over REST.",
  "ownerDomain": "google.com",
diff --git a/tasks/v1/tasks-api.json b/tasks/v1/tasks-api.json
index 54932b1..1230df3 100644
--- a/tasks/v1/tasks-api.json
+++ b/tasks/v1/tasks-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/5PpVnub_x8uBzIigVf3YlGXAlmA\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/2OzpktTyb8G1n0lJqDrsLrojoIY\"",
  "discoveryVersion": "v1",
  "id": "tasks:v1",
  "name": "tasks",
  "version": "v1",
+ "revision": "20130403",
  "title": "Tasks API",
  "description": "Lets you manage your tasks and task lists.",
  "ownerDomain": "google.com",
diff --git a/translate/v2/translate-api.json b/translate/v2/translate-api.json
index 804f495..adb5ff8 100644
--- a/translate/v2/translate-api.json
+++ b/translate/v2/translate-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/4Ip-FKZqF7Vovq8mU1yMUQ2gvUM\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/x8y0eeapVY09xfAj-RIWaraLUFU\"",
  "discoveryVersion": "v1",
  "id": "translate:v2",
  "name": "translate",
  "version": "v2",
+ "revision": "20140417",
  "title": "Translate API",
  "description": "Lets you translate text from one language to another",
  "ownerDomain": "google.com",
diff --git a/webfonts/v1/webfonts-api.json b/webfonts/v1/webfonts-api.json
index e77f8d6..fc0fe8c 100644
--- a/webfonts/v1/webfonts-api.json
+++ b/webfonts/v1/webfonts-api.json
@@ -1,10 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/oPNy63UO0fYNZSm0s2bZIqE4DWs\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/uRZcMEbTVS9rWZxqJQOe5kJsXfo\"",
  "discoveryVersion": "v1",
  "id": "webfonts:v1",
  "name": "webfonts",
  "version": "v1",
+ "revision": "20140210",
  "title": "Google Fonts Developer API",
  "description": "The Google Fonts Developer API.",
  "ownerDomain": "google.com",
diff --git a/youtube/v3/youtube-api.json b/youtube/v3/youtube-api.json
index a0a4f17..e612a68 100644
--- a/youtube/v3/youtube-api.json
+++ b/youtube/v3/youtube-api.json
@@ -1,11 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"C11OM5Qtr9122-scy_WeqND9D3o/kMIQvX-x3mQnPFOGOYSnPK4w0oU\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/P2eMkJQM500-13h6vk2JDkt0YV4\"",
  "discoveryVersion": "v1",
  "id": "youtube:v3",
  "name": "youtube",
  "canonicalName": "YouTube",
  "version": "v3",
+ "revision": "20140724",
  "title": "YouTube Data API",
  "description": "Programmatic access to YouTube features.",
  "ownerDomain": "google.com",
diff --git a/youtubeanalytics/v1/youtubeanalytics-api.json b/youtubeanalytics/v1/youtubeanalytics-api.json
index 9dda3e0..3afb068 100644
--- a/youtubeanalytics/v1/youtubeanalytics-api.json
+++ b/youtubeanalytics/v1/youtubeanalytics-api.json
@@ -1,11 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/Bu-EyG-olBWjKSwf5NrgtWtFq0I\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/nlDKGR94Mbaj_YAIBNSZijmIvJQ\"",
  "discoveryVersion": "v1",
  "id": "youtubeAnalytics:v1",
  "name": "youtubeAnalytics",
  "canonicalName": "YouTube Analytics",
  "version": "v1",
+ "revision": "20140724",
  "title": "YouTube Analytics API",
  "description": "Retrieve your YouTube Analytics reports.",
  "ownerDomain": "google.com",
diff --git a/youtubeanalytics/v1beta1/youtubeanalytics-api.json b/youtubeanalytics/v1beta1/youtubeanalytics-api.json
index 4a37324..60ada83 100644
--- a/youtubeanalytics/v1beta1/youtubeanalytics-api.json
+++ b/youtubeanalytics/v1beta1/youtubeanalytics-api.json
@@ -1,11 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/zftu6P08mwQ08Bn9saV3KAwwkFg\"",
+ "etag": "\"FrPV2U6xXFUq8eRv_PO3IoAURkc/ftj4wM943DrdwThGiQlnCPLSJZc\"",
  "discoveryVersion": "v1",
  "id": "youtubeAnalytics:v1beta1",
  "name": "youtubeAnalytics",
  "canonicalName": "YouTube Analytics",
  "version": "v1beta1",
+ "revision": "20140724",
  "title": "YouTube Analytics API",
  "description": "Retrieve your YouTube Analytics reports.",
  "ownerDomain": "google.com",