all: autogenerated update (2019-06-21)

Update:
- bigquerydatatransfer/v1
- compute/v0.alpha
- compute/v0.beta
- compute/v1
- dataflow/v1b3
- tagmanager/v2
diff --git a/api-list.json b/api-list.json
index b5acb72..04a1b8c 100644
--- a/api-list.json
+++ b/api-list.json
@@ -1,3910 +1,3910 @@
 {
- "kind": "discovery#directoryList",
- "discoveryVersion": "v1",
- "items": [
-  {
-   "kind": "discovery#directoryItem",
-   "id": "abusiveexperiencereport:v1",
-   "name": "abusiveexperiencereport",
-   "version": "v1",
-   "title": "Abusive Experience Report API",
-   "description": "Views Abusive Experience Report data, and gets a list of sites that have a significant number of abusive experiences.",
-   "discoveryRestUrl": "https://abusiveexperiencereport.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/abusive-experience-report/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "acceleratedmobilepageurl:v1",
-   "name": "acceleratedmobilepageurl",
-   "version": "v1",
-   "title": "Accelerated Mobile Pages (AMP) URL API",
-   "description": "This API contains a single method, batchGet. Call this method to retrieve the AMP URL (and equivalent AMP Cache URL) for given public URL(s).",
-   "discoveryRestUrl": "https://acceleratedmobilepageurl.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/amp/cache/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "accessapproval:v1beta1",
-   "name": "accessapproval",
-   "version": "v1beta1",
-   "title": "Access Approval API",
-   "description": "An API for controlling access to data by Google personnel.",
-   "discoveryRestUrl": "https://accessapproval.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/access-approval/docs",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "accesscontextmanager:v1beta",
-   "name": "accesscontextmanager",
-   "version": "v1beta",
-   "title": "Access Context Manager API",
-   "description": "An API for setting attribute based access control to requests to GCP services.",
-   "discoveryRestUrl": "https://accesscontextmanager.googleapis.com/$discovery/rest?version=v1beta",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/access-context-manager/docs/reference/rest/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "accesscontextmanager:v1",
-   "name": "accesscontextmanager",
-   "version": "v1",
-   "title": "Access Context Manager API",
-   "description": "An API for setting attribute based access control to requests to GCP services.",
-   "discoveryRestUrl": "https://accesscontextmanager.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/access-context-manager/docs/reference/rest/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "adexchangebuyer:v1.2",
-   "name": "adexchangebuyer",
-   "version": "v1.2",
-   "title": "Ad Exchange Buyer API",
-   "description": "Accesses your bidding-account information, submits creatives for validation, finds available direct deals, and retrieves performance reports.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/adexchangebuyer/v1.2/rest",
-   "discoveryLink": "./apis/adexchangebuyer/v1.2/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/doubleclick-16.gif",
-    "x32": "https://www.google.com/images/icons/product/doubleclick-32.gif"
-   },
-   "documentationLink": "https://developers.google.com/ad-exchange/buyer-rest",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "adexchangebuyer:v1.3",
-   "name": "adexchangebuyer",
-   "version": "v1.3",
-   "title": "Ad Exchange Buyer API",
-   "description": "Accesses your bidding-account information, submits creatives for validation, finds available direct deals, and retrieves performance reports.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/adexchangebuyer/v1.3/rest",
-   "discoveryLink": "./apis/adexchangebuyer/v1.3/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/doubleclick-16.gif",
-    "x32": "https://www.google.com/images/icons/product/doubleclick-32.gif"
-   },
-   "documentationLink": "https://developers.google.com/ad-exchange/buyer-rest",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "adexchangebuyer:v1.4",
-   "name": "adexchangebuyer",
-   "version": "v1.4",
-   "title": "Ad Exchange Buyer API",
-   "description": "Accesses your bidding-account information, submits creatives for validation, finds available direct deals, and retrieves performance reports.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/adexchangebuyer/v1.4/rest",
-   "discoveryLink": "./apis/adexchangebuyer/v1.4/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/doubleclick-16.gif",
-    "x32": "https://www.google.com/images/icons/product/doubleclick-32.gif"
-   },
-   "documentationLink": "https://developers.google.com/ad-exchange/buyer-rest",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "adexchangebuyer2:v2beta1",
-   "name": "adexchangebuyer2",
-   "version": "v2beta1",
-   "title": "Ad Exchange Buyer API II",
-   "description": "Accesses the latest features for managing Ad Exchange accounts, Real-Time Bidding configurations and auction metrics, and Marketplace programmatic deals.",
-   "discoveryRestUrl": "https://adexchangebuyer.googleapis.com/$discovery/rest?version=v2beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/ad-exchange/buyer-rest/reference/rest/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "adexperiencereport:v1",
-   "name": "adexperiencereport",
-   "version": "v1",
-   "title": "Ad Experience Report API",
-   "description": "Views Ad Experience Report data, and gets a list of sites that have a significant number of annoying ads.",
-   "discoveryRestUrl": "https://adexperiencereport.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/ad-experience-report/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "admin:datatransfer_v1",
-   "name": "admin",
-   "version": "datatransfer_v1",
-   "title": "Admin Data Transfer API",
-   "description": "Transfers user data from one user to another.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/admin/datatransfer_v1/rest",
-   "discoveryLink": "./apis/admin/datatransfer_v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/admin-sdk/data-transfer/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "admin:directory_v1",
-   "name": "admin",
-   "version": "directory_v1",
-   "title": "Admin Directory API",
-   "description": "Manages enterprise resources such as users and groups, administrative notifications, security features, and more.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/admin/directory_v1/rest",
-   "discoveryLink": "./apis/admin/directory_v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/admin-sdk/directory/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "admin:reports_v1",
-   "name": "admin",
-   "version": "reports_v1",
-   "title": "Admin Reports API",
-   "description": "Fetches reports for the administrators of G Suite customers about the usage, collaboration, security, and risk for their users.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/admin/reports_v1/rest",
-   "discoveryLink": "./apis/admin/reports_v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/admin-sdk/reports/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "adsense:v1.4",
-   "name": "adsense",
-   "version": "v1.4",
-   "title": "AdSense Management API",
-   "description": "Accesses AdSense publishers' inventory and generates performance reports.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/adsense/v1.4/rest",
-   "discoveryLink": "./apis/adsense/v1.4/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/adsense-16.png",
-    "x32": "https://www.google.com/images/icons/product/adsense-32.png"
-   },
-   "documentationLink": "https://developers.google.com/adsense/management/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "adsensehost:v4.1",
-   "name": "adsensehost",
-   "version": "v4.1",
-   "title": "AdSense Host API",
-   "description": "Generates performance reports, generates ad codes, and provides publisher management capabilities for AdSense Hosts.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/adsensehost/v4.1/rest",
-   "discoveryLink": "./apis/adsensehost/v4.1/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/adsense-16.png",
-    "x32": "https://www.google.com/images/icons/product/adsense-32.png"
-   },
-   "documentationLink": "https://developers.google.com/adsense/host/",
-   "labels": [
-    "limited_availability"
-   ],
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "alertcenter:v1beta1",
-   "name": "alertcenter",
-   "version": "v1beta1",
-   "title": "G Suite Alert Center API",
-   "description": "Manages alerts on issues affecting your domain.",
-   "discoveryRestUrl": "https://alertcenter.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/admin-sdk/alertcenter/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "analytics:v2.4",
-   "name": "analytics",
-   "version": "v2.4",
-   "title": "Google Analytics API",
-   "description": "Views and manages your Google Analytics data.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/analytics/v2.4/rest",
-   "discoveryLink": "./apis/analytics/v2.4/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/analytics-16.png",
-    "x32": "https://www.google.com/images/icons/product/analytics-32.png"
-   },
-   "documentationLink": "https://developers.google.com/analytics/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "analytics:v3",
-   "name": "analytics",
-   "version": "v3",
-   "title": "Google Analytics API",
-   "description": "Views and manages your Google Analytics data.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/analytics/v3/rest",
-   "discoveryLink": "./apis/analytics/v3/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/analytics-16.png",
-    "x32": "https://www.google.com/images/icons/product/analytics-32.png"
-   },
-   "documentationLink": "https://developers.google.com/analytics/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "analyticsreporting:v4",
-   "name": "analyticsreporting",
-   "version": "v4",
-   "title": "Analytics Reporting API",
-   "description": "Accesses Analytics report data.",
-   "discoveryRestUrl": "https://analyticsreporting.googleapis.com/$discovery/rest?version=v4",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/analytics/devguides/reporting/core/v4/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "androiddeviceprovisioning:v1",
-   "name": "androiddeviceprovisioning",
-   "version": "v1",
-   "title": "Android Device Provisioning Partner API",
-   "description": "Automates Android zero-touch enrollment for device resellers, customers, and EMMs.",
-   "discoveryRestUrl": "https://androiddeviceprovisioning.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/zero-touch/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "androidenterprise:v1",
-   "name": "androidenterprise",
-   "version": "v1",
-   "title": "Google Play EMM API",
-   "description": "Manages the deployment of apps to Android for Work users.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/androidenterprise/v1/rest",
-   "discoveryLink": "./apis/androidenterprise/v1/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/android-16.png",
-    "x32": "https://www.google.com/images/icons/product/android-32.png"
-   },
-   "documentationLink": "https://developers.google.com/android/work/play/emm-api",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "androidmanagement:v1",
-   "name": "androidmanagement",
-   "version": "v1",
-   "title": "Android Management API",
-   "description": "The Android Management API provides remote enterprise management of Android devices and apps.",
-   "discoveryRestUrl": "https://androidmanagement.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/android/management",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "androidpublisher:v1",
-   "name": "androidpublisher",
-   "version": "v1",
-   "title": "Google Play Developer API",
-   "description": "Accesses Android application developers' Google Play accounts.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/androidpublisher/v1/rest",
-   "discoveryLink": "./apis/androidpublisher/v1/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/android-16.png",
-    "x32": "https://www.google.com/images/icons/product/android-32.png"
-   },
-   "documentationLink": "https://developers.google.com/android-publisher",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "androidpublisher:v1.1",
-   "name": "androidpublisher",
-   "version": "v1.1",
-   "title": "Google Play Developer API",
-   "description": "Accesses Android application developers' Google Play accounts.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/androidpublisher/v1.1/rest",
-   "discoveryLink": "./apis/androidpublisher/v1.1/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/android-16.png",
-    "x32": "https://www.google.com/images/icons/product/android-32.png"
-   },
-   "documentationLink": "https://developers.google.com/android-publisher",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "androidpublisher:v2",
-   "name": "androidpublisher",
-   "version": "v2",
-   "title": "Google Play Developer API",
-   "description": "Accesses Android application developers' Google Play accounts.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/androidpublisher/v2/rest",
-   "discoveryLink": "./apis/androidpublisher/v2/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/android-16.png",
-    "x32": "https://www.google.com/images/icons/product/android-32.png"
-   },
-   "documentationLink": "https://developers.google.com/android-publisher",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "androidpublisher:v3",
-   "name": "androidpublisher",
-   "version": "v3",
-   "title": "Google Play Developer API",
-   "description": "Accesses Android application developers' Google Play accounts.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/androidpublisher/v3/rest",
-   "discoveryLink": "./apis/androidpublisher/v3/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/android-16.png",
-    "x32": "https://www.google.com/images/icons/product/android-32.png"
-   },
-   "documentationLink": "https://developers.google.com/android-publisher",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "appengine:v1alpha",
-   "name": "appengine",
-   "version": "v1alpha",
-   "title": "App Engine Admin API",
-   "description": "Provisions and manages developers' App Engine applications.",
-   "discoveryRestUrl": "https://appengine.googleapis.com/$discovery/rest?version=v1alpha",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/appengine/docs/admin-api/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "appengine:v1beta",
-   "name": "appengine",
-   "version": "v1beta",
-   "title": "App Engine Admin API",
-   "description": "Provisions and manages developers' App Engine applications.",
-   "discoveryRestUrl": "https://appengine.googleapis.com/$discovery/rest?version=v1beta",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/appengine/docs/admin-api/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "appengine:v1",
-   "name": "appengine",
-   "version": "v1",
-   "title": "App Engine Admin API",
-   "description": "Provisions and manages developers' App Engine applications.",
-   "discoveryRestUrl": "https://appengine.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/appengine/docs/admin-api/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "appengine:v1beta4",
-   "name": "appengine",
-   "version": "v1beta4",
-   "title": "App Engine Admin API",
-   "description": "Provisions and manages developers' App Engine applications.",
-   "discoveryRestUrl": "https://appengine.googleapis.com/$discovery/rest?version=v1beta4",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/appengine/docs/admin-api/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "appengine:v1beta5",
-   "name": "appengine",
-   "version": "v1beta5",
-   "title": "App Engine Admin API",
-   "description": "Provisions and manages developers' App Engine applications.",
-   "discoveryRestUrl": "https://appengine.googleapis.com/$discovery/rest?version=v1beta5",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/appengine/docs/admin-api/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "appsactivity:v1",
-   "name": "appsactivity",
-   "version": "v1",
-   "title": "Drive Activity API",
-   "description": "Provides a historical view of activity.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/appsactivity/v1/rest",
-   "discoveryLink": "./apis/appsactivity/v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/google-apps/activity/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "appstate:v1",
-   "name": "appstate",
-   "version": "v1",
-   "title": "Google App State API",
-   "description": "The Google App State API.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/appstate/v1/rest",
-   "discoveryLink": "./apis/appstate/v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/games/services/web/api/states",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "bigquery:v2",
-   "name": "bigquery",
-   "version": "v2",
-   "title": "BigQuery API",
-   "description": "A data platform for customers to create, manage, share and query data.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/bigquery/v2/rest",
-   "discoveryLink": "./apis/bigquery/v2/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/search-16.gif",
-    "x32": "https://www.google.com/images/icons/product/search-32.gif"
-   },
-   "documentationLink": "https://cloud.google.com/bigquery/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "bigquerydatatransfer:v1",
-   "name": "bigquerydatatransfer",
-   "version": "v1",
-   "title": "BigQuery Data Transfer API",
-   "description": "Schedule queries or transfer external data from SaaS applications to Google BigQuery on a regular basis.",
-   "discoveryRestUrl": "https://bigquerydatatransfer.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/bigquery/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "bigtableadmin:v1",
-   "name": "bigtableadmin",
-   "version": "v1",
-   "title": "Cloud Bigtable Admin API",
-   "description": "Administer your Cloud Bigtable tables and instances.",
-   "discoveryRestUrl": "https://bigtableadmin.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/bigtable/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "bigtableadmin:v2",
-   "name": "bigtableadmin",
-   "version": "v2",
-   "title": "Cloud Bigtable Admin API",
-   "description": "Administer your Cloud Bigtable tables and instances.",
-   "discoveryRestUrl": "https://bigtableadmin.googleapis.com/$discovery/rest?version=v2",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/bigtable/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "binaryauthorization:v1beta1",
-   "name": "binaryauthorization",
-   "version": "v1beta1",
-   "title": "Binary Authorization API",
-   "description": "The management interface for Binary Authorization, a system providing policy control for images deployed to Kubernetes Engine clusters.",
-   "discoveryRestUrl": "https://binaryauthorization.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/binary-authorization/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "blogger:v2",
-   "name": "blogger",
-   "version": "v2",
-   "title": "Blogger API",
-   "description": "API for access to the data within Blogger.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/blogger/v2/rest",
-   "discoveryLink": "./apis/blogger/v2/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/blogger-16.png",
-    "x32": "https://www.google.com/images/icons/product/blogger-32.png"
-   },
-   "documentationLink": "https://developers.google.com/blogger/docs/2.0/json/getting_started",
-   "labels": [
-    "limited_availability"
-   ],
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "blogger:v3",
-   "name": "blogger",
-   "version": "v3",
-   "title": "Blogger API",
-   "description": "API for access to the data within Blogger.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/blogger/v3/rest",
-   "discoveryLink": "./apis/blogger/v3/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/blogger-16.png",
-    "x32": "https://www.google.com/images/icons/product/blogger-32.png"
-   },
-   "documentationLink": "https://developers.google.com/blogger/docs/3.0/getting_started",
-   "labels": [
-    "limited_availability"
-   ],
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "books:v1",
-   "name": "books",
-   "version": "v1",
-   "title": "Books API",
-   "description": "Searches for books and manages your Google Books library.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/books/v1/rest",
-   "discoveryLink": "./apis/books/v1/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/ebooks-16.png",
-    "x32": "https://www.google.com/images/icons/product/ebooks-32.png"
-   },
-   "documentationLink": "https://developers.google.com/books/docs/v1/getting_started",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "calendar:v3",
-   "name": "calendar",
-   "version": "v3",
-   "title": "Calendar API",
-   "description": "Manipulates events and other calendar data.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/calendar/v3/rest",
-   "discoveryLink": "./apis/calendar/v3/rest",
-   "icons": {
-    "x16": "http://www.google.com/images/icons/product/calendar-16.png",
-    "x32": "http://www.google.com/images/icons/product/calendar-32.png"
-   },
-   "documentationLink": "https://developers.google.com/google-apps/calendar/firstapp",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "chat:v1",
-   "name": "chat",
-   "version": "v1",
-   "title": "Hangouts Chat API",
-   "description": "Create bots and extend the new Hangouts Chat.",
-   "discoveryRestUrl": "https://chat.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/hangouts/chat",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "civicinfo:v2",
-   "name": "civicinfo",
-   "version": "v2",
-   "title": "Google Civic Information API",
-   "description": "Provides polling places, early vote locations, contest data, election officials, and government representatives for U.S. residential addresses.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/civicinfo/v2/rest",
-   "discoveryLink": "./apis/civicinfo/v2/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/civic-information",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "classroom:v1",
-   "name": "classroom",
-   "version": "v1",
-   "title": "Google Classroom API",
-   "description": "Manages classes, rosters, and invitations in Google Classroom.",
-   "discoveryRestUrl": "https://classroom.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/classroom",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudasset:v1",
-   "name": "cloudasset",
-   "version": "v1",
-   "title": "Cloud Asset API",
-   "description": "The cloud asset API manages the history and inventory of cloud resources.",
-   "discoveryRestUrl": "https://cloudasset.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/quickstart-cloud-asset-inventory",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudasset:v1beta1",
-   "name": "cloudasset",
-   "version": "v1beta1",
-   "title": "Cloud Asset API",
-   "description": "The cloud asset API manages the history and inventory of cloud resources.",
-   "discoveryRestUrl": "https://cloudasset.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/quickstart-cloud-asset-inventory",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudbilling:v1",
-   "name": "cloudbilling",
-   "version": "v1",
-   "title": "Cloud Billing API",
-   "description": "Allows developers to manage billing for their Google Cloud Platform projects programmatically.",
-   "discoveryRestUrl": "https://cloudbilling.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/billing/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudbuild:v1alpha1",
-   "name": "cloudbuild",
-   "version": "v1alpha1",
-   "title": "Cloud Build API",
-   "description": "Creates and manages builds on Google Cloud Platform.",
-   "discoveryRestUrl": "https://cloudbuild.googleapis.com/$discovery/rest?version=v1alpha1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/cloud-build/docs/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudbuild:v1",
-   "name": "cloudbuild",
-   "version": "v1",
-   "title": "Cloud Build API",
-   "description": "Creates and manages builds on Google Cloud Platform.",
-   "discoveryRestUrl": "https://cloudbuild.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/cloud-build/docs/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "clouddebugger:v2",
-   "name": "clouddebugger",
-   "version": "v2",
-   "title": "Stackdriver Debugger API",
-   "description": "Examines the call stack and variables of a running application without stopping or slowing it down.",
-   "discoveryRestUrl": "https://clouddebugger.googleapis.com/$discovery/rest?version=v2",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/debugger",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "clouderrorreporting:v1beta1",
-   "name": "clouderrorreporting",
-   "version": "v1beta1",
-   "title": "Stackdriver Error Reporting API",
-   "description": "Groups and counts similar errors from cloud services and applications, reports new errors, and provides access to error groups and their associated errors.",
-   "discoveryRestUrl": "https://clouderrorreporting.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/error-reporting/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudfunctions:v1",
-   "name": "cloudfunctions",
-   "version": "v1",
-   "title": "Cloud Functions API",
-   "description": "Manages lightweight user-provided functions executed in response to events.",
-   "discoveryRestUrl": "https://cloudfunctions.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/functions",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudfunctions:v1beta2",
-   "name": "cloudfunctions",
-   "version": "v1beta2",
-   "title": "Cloud Functions API",
-   "description": "Manages lightweight user-provided functions executed in response to events.",
-   "discoveryRestUrl": "https://cloudfunctions.googleapis.com/$discovery/rest?version=v1beta2",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/functions",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudidentity:v1",
-   "name": "cloudidentity",
-   "version": "v1",
-   "title": "Cloud Identity API",
-   "description": "API for provisioning and managing identity resources.",
-   "discoveryRestUrl": "https://cloudidentity.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/identity/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudidentity:v1beta1",
-   "name": "cloudidentity",
-   "version": "v1beta1",
-   "title": "Cloud Identity API",
-   "description": "API for provisioning and managing identity resources.",
-   "discoveryRestUrl": "https://cloudidentity.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/identity/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudiot:v1alpha1",
-   "name": "cloudiot",
-   "version": "v1alpha1",
-   "title": "Cloud IoT API",
-   "description": "Registers and manages IoT (Internet of Things) devices that connect to the Google Cloud Platform.",
-   "discoveryRestUrl": "https://cloudiot.googleapis.com/$discovery/rest?version=v1alpha1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/iot",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudiot:v1",
-   "name": "cloudiot",
-   "version": "v1",
-   "title": "Cloud IoT API",
-   "description": "Registers and manages IoT (Internet of Things) devices that connect to the Google Cloud Platform.",
-   "discoveryRestUrl": "https://cloudiot.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/iot",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudkms:v1",
-   "name": "cloudkms",
-   "version": "v1",
-   "title": "Cloud Key Management Service (KMS) API",
-   "description": "Manages keys and performs cryptographic operations in a central cloud service, for direct use by other cloud resources and applications.",
-   "discoveryRestUrl": "https://cloudkms.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/kms/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudprivatecatalog:v1beta1",
-   "name": "cloudprivatecatalog",
-   "version": "v1beta1",
-   "title": "Cloud Private Catalog API",
-   "description": "Enable cloud users to discover enterprise catalogs and products in their organizations.",
-   "discoveryRestUrl": "https://cloudprivatecatalog.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/private-catalog/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudprivatecatalogproducer:v1beta1",
-   "name": "cloudprivatecatalogproducer",
-   "version": "v1beta1",
-   "title": "Cloud Private Catalog Producer API",
-   "description": "Enables cloud users to manage and share enterprise catalogs intheir organizations.",
-   "discoveryRestUrl": "https://cloudprivatecatalogproducer.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/private-catalog/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudprofiler:v2",
-   "name": "cloudprofiler",
-   "version": "v2",
-   "title": "Stackdriver Profiler API",
-   "description": "Manages continuous profiling information.",
-   "discoveryRestUrl": "https://cloudprofiler.googleapis.com/$discovery/rest?version=v2",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/profiler/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudresourcemanager:v1",
-   "name": "cloudresourcemanager",
-   "version": "v1",
-   "title": "Cloud Resource Manager API",
-   "description": "Creates, reads, and updates metadata for Google Cloud Platform resource containers.",
-   "discoveryRestUrl": "https://cloudresourcemanager.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/resource-manager",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudresourcemanager:v1beta1",
-   "name": "cloudresourcemanager",
-   "version": "v1beta1",
-   "title": "Cloud Resource Manager API",
-   "description": "Creates, reads, and updates metadata for Google Cloud Platform resource containers.",
-   "discoveryRestUrl": "https://cloudresourcemanager.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/resource-manager",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudresourcemanager:v2",
-   "name": "cloudresourcemanager",
-   "version": "v2",
-   "title": "Cloud Resource Manager API",
-   "description": "Creates, reads, and updates metadata for Google Cloud Platform resource containers.",
-   "discoveryRestUrl": "https://cloudresourcemanager.googleapis.com/$discovery/rest?version=v2",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/resource-manager",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudresourcemanager:v2beta1",
-   "name": "cloudresourcemanager",
-   "version": "v2beta1",
-   "title": "Cloud Resource Manager API",
-   "description": "Creates, reads, and updates metadata for Google Cloud Platform resource containers.",
-   "discoveryRestUrl": "https://cloudresourcemanager.googleapis.com/$discovery/rest?version=v2beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/resource-manager",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudscheduler:v1",
-   "name": "cloudscheduler",
-   "version": "v1",
-   "title": "Cloud Scheduler API",
-   "description": "Creates and manages jobs run on a regular recurring schedule.",
-   "discoveryRestUrl": "https://cloudscheduler.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/scheduler/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudscheduler:v1beta1",
-   "name": "cloudscheduler",
-   "version": "v1beta1",
-   "title": "Cloud Scheduler API",
-   "description": "Creates and manages jobs run on a regular recurring schedule.",
-   "discoveryRestUrl": "https://cloudscheduler.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/scheduler/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudsearch:v1",
-   "name": "cloudsearch",
-   "version": "v1",
-   "title": "Cloud Search API",
-   "description": "Cloud Search provides cloud-based search capabilities over G Suite data. The Cloud Search API allows indexing of non-G Suite data into Cloud Search.",
-   "discoveryRestUrl": "https://cloudsearch.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://gsuite.google.com/products/cloud-search/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudshell:v1alpha1",
-   "name": "cloudshell",
-   "version": "v1alpha1",
-   "title": "Cloud Shell API",
-   "description": "Allows users to start, configure, and connect to interactive shell sessions running in the cloud.",
-   "discoveryRestUrl": "https://cloudshell.googleapis.com/$discovery/rest?version=v1alpha1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/shell/docs/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudshell:v1",
-   "name": "cloudshell",
-   "version": "v1",
-   "title": "Cloud Shell API",
-   "description": "Allows users to start, configure, and connect to interactive shell sessions running in the cloud.",
-   "discoveryRestUrl": "https://cloudshell.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/shell/docs/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudtasks:v2",
-   "name": "cloudtasks",
-   "version": "v2",
-   "title": "Cloud Tasks API",
-   "description": "Manages the execution of large numbers of distributed requests.",
-   "discoveryRestUrl": "https://cloudtasks.googleapis.com/$discovery/rest?version=v2",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/tasks/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudtasks:v2beta2",
-   "name": "cloudtasks",
-   "version": "v2beta2",
-   "title": "Cloud Tasks API",
-   "description": "Manages the execution of large numbers of distributed requests.",
-   "discoveryRestUrl": "https://cloudtasks.googleapis.com/$discovery/rest?version=v2beta2",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/tasks/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudtasks:v2beta3",
-   "name": "cloudtasks",
-   "version": "v2beta3",
-   "title": "Cloud Tasks API",
-   "description": "Manages the execution of large numbers of distributed requests.",
-   "discoveryRestUrl": "https://cloudtasks.googleapis.com/$discovery/rest?version=v2beta3",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/tasks/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudtrace:v2alpha1",
-   "name": "cloudtrace",
-   "version": "v2alpha1",
-   "title": "Stackdriver Trace API",
-   "description": "Sends application trace data to Stackdriver Trace for viewing. Trace data is collected for all App Engine applications by default. Trace data from other applications can be provided using this API. This library is used to interact with the Trace API directly. If you are looking to instrument your application for Stackdriver Trace, we recommend using OpenCensus.",
-   "discoveryRestUrl": "https://cloudtrace.googleapis.com/$discovery/rest?version=v2alpha1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/trace",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudtrace:v1",
-   "name": "cloudtrace",
-   "version": "v1",
-   "title": "Stackdriver Trace API",
-   "description": "Sends application trace data to Stackdriver Trace for viewing. Trace data is collected for all App Engine applications by default. Trace data from other applications can be provided using this API. This library is used to interact with the Trace API directly. If you are looking to instrument your application for Stackdriver Trace, we recommend using OpenCensus.",
-   "discoveryRestUrl": "https://cloudtrace.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/trace",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "cloudtrace:v2",
-   "name": "cloudtrace",
-   "version": "v2",
-   "title": "Stackdriver Trace API",
-   "description": "Sends application trace data to Stackdriver Trace for viewing. Trace data is collected for all App Engine applications by default. Trace data from other applications can be provided using this API. This library is used to interact with the Trace API directly. If you are looking to instrument your application for Stackdriver Trace, we recommend using OpenCensus.",
-   "discoveryRestUrl": "https://cloudtrace.googleapis.com/$discovery/rest?version=v2",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/trace",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "commentanalyzer:v1alpha1",
-   "name": "commentanalyzer",
-   "version": "v1alpha1",
-   "title": "Perspective Comment Analyzer API",
-   "description": "The Perspective Comment Analyzer API provides information about the potential impact of a comment on a conversation (e.g. it can provide a score for the \"toxicity\" of a comment). Users can leverage the \"SuggestCommentScore\" method to submit corrections to improve Perspective over time. Users can set the \"doNotStore\" flag to ensure that all submitted comments are automatically deleted after scores are returned.",
-   "discoveryRestUrl": "https://commentanalyzer.googleapis.com/$discovery/rest?version=v1alpha1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://github.com/conversationai/perspectiveapi/blob/master/README.md",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "composer:v1",
-   "name": "composer",
-   "version": "v1",
-   "title": "Cloud Composer API",
-   "description": "Manages Apache Airflow environments on Google Cloud Platform.",
-   "discoveryRestUrl": "https://composer.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/composer/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "composer:v1beta1",
-   "name": "composer",
-   "version": "v1beta1",
-   "title": "Cloud Composer API",
-   "description": "Manages Apache Airflow environments on Google Cloud Platform.",
-   "discoveryRestUrl": "https://composer.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/composer/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "compute:alpha",
-   "name": "compute",
-   "version": "alpha",
-   "title": "Compute Engine API",
-   "description": "Creates and runs virtual machines on Google Cloud Platform.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/compute/alpha/rest",
-   "discoveryLink": "./apis/compute/alpha/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/compute_engine-16.png",
-    "x32": "https://www.google.com/images/icons/product/compute_engine-32.png"
-   },
-   "documentationLink": "https://developers.google.com/compute/docs/reference/latest/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "compute:beta",
-   "name": "compute",
-   "version": "beta",
-   "title": "Compute Engine API",
-   "description": "Creates and runs virtual machines on Google Cloud Platform.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/compute/beta/rest",
-   "discoveryLink": "./apis/compute/beta/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/compute_engine-16.png",
-    "x32": "https://www.google.com/images/icons/product/compute_engine-32.png"
-   },
-   "documentationLink": "https://developers.google.com/compute/docs/reference/latest/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "compute:v1",
-   "name": "compute",
-   "version": "v1",
-   "title": "Compute Engine API",
-   "description": "Creates and runs virtual machines on Google Cloud Platform.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/compute/v1/rest",
-   "discoveryLink": "./apis/compute/v1/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/compute_engine-16.png",
-    "x32": "https://www.google.com/images/icons/product/compute_engine-32.png"
-   },
-   "documentationLink": "https://developers.google.com/compute/docs/reference/latest/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "container:v1",
-   "name": "container",
-   "version": "v1",
-   "title": "Kubernetes Engine API",
-   "description": "Builds and manages container-based applications, powered by the open source Kubernetes technology.",
-   "discoveryRestUrl": "https://container.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/container-engine/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "container:v1beta1",
-   "name": "container",
-   "version": "v1beta1",
-   "title": "Kubernetes Engine API",
-   "description": "Builds and manages container-based applications, powered by the open source Kubernetes technology.",
-   "discoveryRestUrl": "https://container.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/container-engine/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "containeranalysis:v1alpha1",
-   "name": "containeranalysis",
-   "version": "v1alpha1",
-   "title": "Container Analysis API",
-   "description": "An implementation of the Grafeas API, which stores, and enables querying and retrieval of critical metadata about all of your software artifacts.",
-   "discoveryRestUrl": "https://containeranalysis.googleapis.com/$discovery/rest?version=v1alpha1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/container-analysis/api/reference/rest/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "containeranalysis:v1beta1",
-   "name": "containeranalysis",
-   "version": "v1beta1",
-   "title": "Container Analysis API",
-   "description": "An implementation of the Grafeas API, which stores, and enables querying and retrieval of critical metadata about all of your software artifacts.",
-   "discoveryRestUrl": "https://containeranalysis.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/container-analysis/api/reference/rest/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "content:v2",
-   "name": "content",
-   "version": "v2",
-   "title": "Content API for Shopping",
-   "description": "Manages product items, inventory, and Merchant Center accounts for Google Shopping.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/content/v2/rest",
-   "discoveryLink": "./apis/content/v2/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/shopping-content",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "content:v2.1",
-   "name": "content",
-   "version": "v2.1",
-   "title": "Content API for Shopping",
-   "description": "Manages product items, inventory, and Merchant Center accounts for Google Shopping.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/content/v2.1/rest",
-   "discoveryLink": "./apis/content/v2.1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/shopping-content",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "customsearch:v1",
-   "name": "customsearch",
-   "version": "v1",
-   "title": "CustomSearch API",
-   "description": "Searches over a website or collection of websites",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/customsearch/v1/rest",
-   "discoveryLink": "./apis/customsearch/v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/custom-search/v1/using_rest",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "dataflow:v1b3",
-   "name": "dataflow",
-   "version": "v1b3",
-   "title": "Dataflow API",
-   "description": "Manages Google Cloud Dataflow projects on Google Cloud Platform.",
-   "discoveryRestUrl": "https://dataflow.googleapis.com/$discovery/rest?version=v1b3",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/dataflow",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "datafusion:v1beta1",
-   "name": "datafusion",
-   "version": "v1beta1",
-   "title": "Cloud Data Fusion API",
-   "description": "Cloud Data Fusion is a fully-managed, cloud native, enterprise data integration service for quickly building and managing data pipelines. It provides a graphical interface to increase time efficiency and reduce complexity, and allows business users, developers, and data scientists to easily and reliably build scalable data integration solutions to cleanse, prepare, blend, transfer and transform data without having to wrestle with infrastructure.",
-   "discoveryRestUrl": "https://datafusion.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/data-fusion/docs",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "dataproc:v1",
-   "name": "dataproc",
-   "version": "v1",
-   "title": "Cloud Dataproc API",
-   "description": "Manages Hadoop-based clusters and jobs on Google Cloud Platform.",
-   "discoveryRestUrl": "https://dataproc.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/dataproc/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "dataproc:v1beta2",
-   "name": "dataproc",
-   "version": "v1beta2",
-   "title": "Cloud Dataproc API",
-   "description": "Manages Hadoop-based clusters and jobs on Google Cloud Platform.",
-   "discoveryRestUrl": "https://dataproc.googleapis.com/$discovery/rest?version=v1beta2",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/dataproc/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "datastore:v1",
-   "name": "datastore",
-   "version": "v1",
-   "title": "Cloud Datastore API",
-   "description": "Accesses the schemaless NoSQL database to provide fully managed, robust, scalable storage for your application.",
-   "discoveryRestUrl": "https://datastore.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/datastore/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "datastore:v1beta1",
-   "name": "datastore",
-   "version": "v1beta1",
-   "title": "Cloud Datastore API",
-   "description": "Accesses the schemaless NoSQL database to provide fully managed, robust, scalable storage for your application.",
-   "discoveryRestUrl": "https://datastore.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/datastore/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "datastore:v1beta3",
-   "name": "datastore",
-   "version": "v1beta3",
-   "title": "Cloud Datastore API",
-   "description": "Accesses the schemaless NoSQL database to provide fully managed, robust, scalable storage for your application.",
-   "discoveryRestUrl": "https://datastore.googleapis.com/$discovery/rest?version=v1beta3",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/datastore/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "deploymentmanager:alpha",
-   "name": "deploymentmanager",
-   "version": "alpha",
-   "title": "Google Cloud Deployment Manager Alpha API",
-   "description": "The Deployment Manager API allows users to declaratively configure, deploy and run complex solutions on the Google Cloud Platform.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/deploymentmanager/alpha/rest",
-   "discoveryLink": "./apis/deploymentmanager/alpha/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/deployment-manager/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "deploymentmanager:v2beta",
-   "name": "deploymentmanager",
-   "version": "v2beta",
-   "title": "Google Cloud Deployment Manager API V2Beta Methods",
-   "description": "The Deployment Manager API allows users to declaratively configure, deploy and run complex solutions on the Google Cloud Platform.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/deploymentmanager/v2beta/rest",
-   "discoveryLink": "./apis/deploymentmanager/v2beta/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/deployment-manager/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "deploymentmanager:v2",
-   "name": "deploymentmanager",
-   "version": "v2",
-   "title": "Google Cloud Deployment Manager API",
-   "description": "Declares, configures, and deploys complex solutions on Google Cloud Platform.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/deploymentmanager/v2/rest",
-   "discoveryLink": "./apis/deploymentmanager/v2/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/deployment-manager/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "dfareporting:v3.1",
-   "name": "dfareporting",
-   "version": "v3.1",
-   "title": "DCM/DFA Reporting And Trafficking API",
-   "description": "Manages your DoubleClick Campaign Manager ad campaigns and reports.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/dfareporting/v3.1/rest",
-   "discoveryLink": "./apis/dfareporting/v3.1/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/doubleclick-16.gif",
-    "x32": "https://www.google.com/images/icons/product/doubleclick-32.gif"
-   },
-   "documentationLink": "https://developers.google.com/doubleclick-advertisers/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "dfareporting:v3.2",
-   "name": "dfareporting",
-   "version": "v3.2",
-   "title": "DCM/DFA Reporting And Trafficking API",
-   "description": "Manages your DoubleClick Campaign Manager ad campaigns and reports.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/dfareporting/v3.2/rest",
-   "discoveryLink": "./apis/dfareporting/v3.2/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/doubleclick-16.gif",
-    "x32": "https://www.google.com/images/icons/product/doubleclick-32.gif"
-   },
-   "documentationLink": "https://developers.google.com/doubleclick-advertisers/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "dfareporting:v3.3",
-   "name": "dfareporting",
-   "version": "v3.3",
-   "title": "DCM/DFA Reporting And Trafficking API",
-   "description": "Manages your DoubleClick Campaign Manager ad campaigns and reports.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/dfareporting/v3.3/rest",
-   "discoveryLink": "./apis/dfareporting/v3.3/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/doubleclick-16.gif",
-    "x32": "https://www.google.com/images/icons/product/doubleclick-32.gif"
-   },
-   "documentationLink": "https://developers.google.com/doubleclick-advertisers/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "dialogflow:v2",
-   "name": "dialogflow",
-   "version": "v2",
-   "title": "Dialogflow API",
-   "description": "Builds conversational interfaces (for example, chatbots, and voice-powered apps and devices).",
-   "discoveryRestUrl": "https://dialogflow.googleapis.com/$discovery/rest?version=v2",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/dialogflow/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "dialogflow:v2beta1",
-   "name": "dialogflow",
-   "version": "v2beta1",
-   "title": "Dialogflow API",
-   "description": "Builds conversational interfaces (for example, chatbots, and voice-powered apps and devices).",
-   "discoveryRestUrl": "https://dialogflow.googleapis.com/$discovery/rest?version=v2beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/dialogflow/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "digitalassetlinks:v1",
-   "name": "digitalassetlinks",
-   "version": "v1",
-   "title": "Digital Asset Links API",
-   "description": "Discovers relationships between online assets such as websites or mobile apps.",
-   "discoveryRestUrl": "https://digitalassetlinks.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/digital-asset-links/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "discovery:v1",
-   "name": "discovery",
-   "version": "v1",
-   "title": "API Discovery Service",
-   "description": "Provides information about other Google APIs, such as what APIs are available, the resource, and method details for each API.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/discovery/v1/rest",
-   "discoveryLink": "./apis/discovery/v1/rest",
-   "icons": {
-    "x16": "http://www.google.com/images/icons/feature/filing_cabinet_search-g16.png",
-    "x32": "http://www.google.com/images/icons/feature/filing_cabinet_search-g32.png"
-   },
-   "documentationLink": "https://developers.google.com/discovery/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "dlp:v2",
-   "name": "dlp",
-   "version": "v2",
-   "title": "Cloud Data Loss Prevention (DLP) API",
-   "description": "Provides methods for detection, risk analysis, and de-identification of privacy-sensitive fragments in text, images, and Google Cloud Platform storage repositories.",
-   "discoveryRestUrl": "https://dlp.googleapis.com/$discovery/rest?version=v2",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/dlp/docs/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "dns:v1",
-   "name": "dns",
-   "version": "v1",
-   "title": "Google Cloud DNS API",
-   "description": "Configures and serves authoritative DNS records.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/dns/v1/rest",
-   "discoveryLink": "./apis/dns/v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/cloud-dns",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "dns:v1beta2",
-   "name": "dns",
-   "version": "v1beta2",
-   "title": "Google Cloud DNS API",
-   "description": "Configures and serves authoritative DNS records.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/dns/v1beta2/rest",
-   "discoveryLink": "./apis/dns/v1beta2/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/cloud-dns",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "dns:v2beta1",
-   "name": "dns",
-   "version": "v2beta1",
-   "title": "Google Cloud DNS API",
-   "description": "Configures and serves authoritative DNS records.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/dns/v2beta1/rest",
-   "discoveryLink": "./apis/dns/v2beta1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/cloud-dns",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "docs:v1",
-   "name": "docs",
-   "version": "v1",
-   "title": "Google Docs API",
-   "description": "Reads and writes Google Docs documents.",
-   "discoveryRestUrl": "https://docs.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/docs/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "doubleclickbidmanager:v1",
-   "name": "doubleclickbidmanager",
-   "version": "v1",
-   "title": "DoubleClick Bid Manager API",
-   "description": "API for viewing and managing your reports in DoubleClick Bid Manager.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/doubleclickbidmanager/v1/rest",
-   "discoveryLink": "./apis/doubleclickbidmanager/v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/bid-manager/",
-   "labels": [
-    "limited_availability"
-   ],
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "doubleclicksearch:v2",
-   "name": "doubleclicksearch",
-   "version": "v2",
-   "title": "DoubleClick Search API",
-   "description": "Reports and modifies your advertising data in DoubleClick Search (for example, campaigns, ad groups, keywords, and conversions).",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/doubleclicksearch/v2/rest",
-   "discoveryLink": "./apis/doubleclicksearch/v2/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/doubleclick-search/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "drive:v2",
-   "name": "drive",
-   "version": "v2",
-   "title": "Drive API",
-   "description": "Manages files in Drive including uploading, downloading, searching, detecting changes, and updating sharing permissions.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/drive/v2/rest",
-   "discoveryLink": "./apis/drive/v2/rest",
-   "icons": {
-    "x16": "https://ssl.gstatic.com/docs/doclist/images/drive_icon_16.png",
-    "x32": "https://ssl.gstatic.com/docs/doclist/images/drive_icon_32.png"
-   },
-   "documentationLink": "https://developers.google.com/drive/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "drive:v3",
-   "name": "drive",
-   "version": "v3",
-   "title": "Drive API",
-   "description": "Manages files in Drive including uploading, downloading, searching, detecting changes, and updating sharing permissions.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/drive/v3/rest",
-   "discoveryLink": "./apis/drive/v3/rest",
-   "icons": {
-    "x16": "https://ssl.gstatic.com/docs/doclist/images/drive_icon_16.png",
-    "x32": "https://ssl.gstatic.com/docs/doclist/images/drive_icon_32.png"
-   },
-   "documentationLink": "https://developers.google.com/drive/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "driveactivity:v2",
-   "name": "driveactivity",
-   "version": "v2",
-   "title": "Drive Activity API",
-   "description": "Provides a historical view of activity in Google Drive.",
-   "discoveryRestUrl": "https://driveactivity.googleapis.com/$discovery/rest?version=v2",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/drive/activity/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "factchecktools:v1alpha1",
-   "name": "factchecktools",
-   "version": "v1alpha1",
-   "title": "Fact Check Tools API",
-   "description": "",
-   "discoveryRestUrl": "https://factchecktools.googleapis.com/$discovery/rest?version=v1alpha1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/fact-check/tools/api/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "fcm:v1",
-   "name": "fcm",
-   "version": "v1",
-   "title": "Firebase Cloud Messaging API",
-   "description": "FCM send API that provides a cross-platform messaging solution to reliably deliver messages at no cost.",
-   "discoveryRestUrl": "https://fcm.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://firebase.google.com/docs/cloud-messaging",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "file:v1",
-   "name": "file",
-   "version": "v1",
-   "title": "Cloud Filestore API",
-   "description": "The Cloud Filestore API is used for creating and managing cloud file servers.",
-   "discoveryRestUrl": "https://file.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/filestore/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "file:v1beta1",
-   "name": "file",
-   "version": "v1beta1",
-   "title": "Cloud Filestore API",
-   "description": "The Cloud Filestore API is used for creating and managing cloud file servers.",
-   "discoveryRestUrl": "https://file.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/filestore/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "firebase:v1beta1",
-   "name": "firebase",
-   "version": "v1beta1",
-   "title": "Firebase Management API",
-   "description": "The Firebase Management API enables programmatic setup and management of Firebase projects, including a project's Firebase resources and Firebase apps.",
-   "discoveryRestUrl": "https://firebase.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://firebase.google.com",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "firebasedynamiclinks:v1",
-   "name": "firebasedynamiclinks",
-   "version": "v1",
-   "title": "Firebase Dynamic Links API",
-   "description": "Programmatically creates and manages Firebase Dynamic Links.",
-   "discoveryRestUrl": "https://firebasedynamiclinks.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://firebase.google.com/docs/dynamic-links/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "firebasehosting:v1beta1",
-   "name": "firebasehosting",
-   "version": "v1beta1",
-   "title": "Firebase Hosting API",
-   "description": "",
-   "discoveryRestUrl": "https://firebasehosting.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://firebase.google.com/docs/hosting/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "firebaserules:v1",
-   "name": "firebaserules",
-   "version": "v1",
-   "title": "Firebase Rules API",
-   "description": "Creates and manages rules that determine when a Firebase Rules-enabled service should permit a request.",
-   "discoveryRestUrl": "https://firebaserules.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://firebase.google.com/docs/storage/security",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "firestore:v1",
-   "name": "firestore",
-   "version": "v1",
-   "title": "Cloud Firestore API",
-   "description": "Accesses the NoSQL document database built for automatic scaling, high performance, and ease of application development.",
-   "discoveryRestUrl": "https://firestore.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/firestore",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "firestore:v1beta1",
-   "name": "firestore",
-   "version": "v1beta1",
-   "title": "Cloud Firestore API",
-   "description": "Accesses the NoSQL document database built for automatic scaling, high performance, and ease of application development.",
-   "discoveryRestUrl": "https://firestore.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/firestore",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "firestore:v1beta2",
-   "name": "firestore",
-   "version": "v1beta2",
-   "title": "Cloud Firestore API",
-   "description": "Accesses the NoSQL document database built for automatic scaling, high performance, and ease of application development.",
-   "discoveryRestUrl": "https://firestore.googleapis.com/$discovery/rest?version=v1beta2",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/firestore",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "fitness:v1",
-   "name": "fitness",
-   "version": "v1",
-   "title": "Fitness",
-   "description": "Stores and accesses user data in the fitness store from apps on any platform.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/fitness/v1/rest",
-   "discoveryLink": "./apis/fitness/v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/fit/rest/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "fusiontables:v1",
-   "name": "fusiontables",
-   "version": "v1",
-   "title": "Fusion Tables API",
-   "description": "API for working with Fusion Tables data.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/fusiontables/v1/rest",
-   "discoveryLink": "./apis/fusiontables/v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/fusiontables",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "fusiontables:v2",
-   "name": "fusiontables",
-   "version": "v2",
-   "title": "Fusion Tables API",
-   "description": "API for working with Fusion Tables data.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/fusiontables/v2/rest",
-   "discoveryLink": "./apis/fusiontables/v2/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/fusiontables",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "games:v1",
-   "name": "games",
-   "version": "v1",
-   "title": "Google Play Game Services API",
-   "description": "The API for Google Play Game Services.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/games/v1/rest",
-   "discoveryLink": "./apis/games/v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/games/services/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "gamesConfiguration:v1configuration",
-   "name": "gamesConfiguration",
-   "version": "v1configuration",
-   "title": "Google Play Game Services Publishing API",
-   "description": "The Publishing API for Google Play Game Services.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/gamesConfiguration/v1configuration/rest",
-   "discoveryLink": "./apis/gamesConfiguration/v1configuration/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/games/services",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "gamesManagement:v1management",
-   "name": "gamesManagement",
-   "version": "v1management",
-   "title": "Google Play Game Services Management API",
-   "description": "The Management API for Google Play Game Services.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/gamesManagement/v1management/rest",
-   "discoveryLink": "./apis/gamesManagement/v1management/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/games/services",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "genomics:v1alpha2",
-   "name": "genomics",
-   "version": "v1alpha2",
-   "title": "Genomics API",
-   "description": "Uploads, processes, queries, and searches Genomics data in the cloud.",
-   "discoveryRestUrl": "https://genomics.googleapis.com/$discovery/rest?version=v1alpha2",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/genomics",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "genomics:v2alpha1",
-   "name": "genomics",
-   "version": "v2alpha1",
-   "title": "Genomics API",
-   "description": "Uploads, processes, queries, and searches Genomics data in the cloud.",
-   "discoveryRestUrl": "https://genomics.googleapis.com/$discovery/rest?version=v2alpha1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/genomics",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "genomics:v1",
-   "name": "genomics",
-   "version": "v1",
-   "title": "Genomics API",
-   "description": "Uploads, processes, queries, and searches Genomics data in the cloud.",
-   "discoveryRestUrl": "https://genomics.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/genomics",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "gmail:v1",
-   "name": "gmail",
-   "version": "v1",
-   "title": "Gmail API",
-   "description": "Access Gmail mailboxes including sending user email.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/gmail/v1/rest",
-   "discoveryLink": "./apis/gmail/v1/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/googlemail-16.png",
-    "x32": "https://www.google.com/images/icons/product/googlemail-32.png"
-   },
-   "documentationLink": "https://developers.google.com/gmail/api/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "groupsmigration:v1",
-   "name": "groupsmigration",
-   "version": "v1",
-   "title": "Groups Migration API",
-   "description": "Groups Migration Api.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/groupsmigration/v1/rest",
-   "discoveryLink": "./apis/groupsmigration/v1/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/discussions-16.gif",
-    "x32": "https://www.google.com/images/icons/product/discussions-32.gif"
-   },
-   "documentationLink": "https://developers.google.com/google-apps/groups-migration/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "groupssettings:v1",
-   "name": "groupssettings",
-   "version": "v1",
-   "title": "Groups Settings API",
-   "description": "Manages permission levels and related settings of a group.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/groupssettings/v1/rest",
-   "discoveryLink": "./apis/groupssettings/v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/google-apps/groups-settings/get_started",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "healthcare:v1alpha2",
-   "name": "healthcare",
-   "version": "v1alpha2",
-   "title": "Cloud Healthcare API",
-   "description": "Manage, store, and access healthcare data in Google Cloud Platform.",
-   "discoveryRestUrl": "https://healthcare.googleapis.com/$discovery/rest?version=v1alpha2",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/healthcare",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "healthcare:v1beta1",
-   "name": "healthcare",
-   "version": "v1beta1",
-   "title": "Cloud Healthcare API",
-   "description": "Manage, store, and access healthcare data in Google Cloud Platform.",
-   "discoveryRestUrl": "https://healthcare.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/healthcare",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "iam:v1",
-   "name": "iam",
-   "version": "v1",
-   "title": "Identity and Access Management (IAM) API",
-   "description": "Manages identity and access control for Google Cloud Platform resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls.",
-   "discoveryRestUrl": "https://iam.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/iam/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "iamcredentials:v1",
-   "name": "iamcredentials",
-   "version": "v1",
-   "title": "IAM Service Account Credentials API",
-   "description": "Creates short-lived, limited-privilege credentials for IAM service accounts.",
-   "discoveryRestUrl": "https://iamcredentials.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/iam/docs/creating-short-lived-service-account-credentials",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "iap:v1",
-   "name": "iap",
-   "version": "v1",
-   "title": "Cloud Identity-Aware Proxy API",
-   "description": "Controls access to cloud applications running on Google Cloud Platform.",
-   "discoveryRestUrl": "https://iap.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/iap",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "iap:v1beta1",
-   "name": "iap",
-   "version": "v1beta1",
-   "title": "Cloud Identity-Aware Proxy API",
-   "description": "Controls access to cloud applications running on Google Cloud Platform.",
-   "discoveryRestUrl": "https://iap.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/iap",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "identitytoolkit:v3",
-   "name": "identitytoolkit",
-   "version": "v3",
-   "title": "Google Identity Toolkit API",
-   "description": "Help the third party sites to implement federated login.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/identitytoolkit/v3/rest",
-   "discoveryLink": "./apis/identitytoolkit/v3/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/identity-toolkit/v3/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "indexing:v3",
-   "name": "indexing",
-   "version": "v3",
-   "title": "Indexing API",
-   "description": "Notifies Google when your web pages change.",
-   "discoveryRestUrl": "https://indexing.googleapis.com/$discovery/rest?version=v3",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/search/apis/indexing-api/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "jobs:v3p1beta1",
-   "name": "jobs",
-   "version": "v3p1beta1",
-   "title": "Cloud Talent Solution API",
-   "description": "Cloud Talent Solution provides the capability to create, read, update, and delete job postings, as well as search jobs based on keywords and filters.",
-   "discoveryRestUrl": "https://jobs.googleapis.com/$discovery/rest?version=v3p1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/talent-solution/job-search/docs/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "jobs:v2",
-   "name": "jobs",
-   "version": "v2",
-   "title": "Cloud Talent Solution API",
-   "description": "Cloud Talent Solution provides the capability to create, read, update, and delete job postings, as well as search jobs based on keywords and filters.",
-   "discoveryRestUrl": "https://jobs.googleapis.com/$discovery/rest?version=v2",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/talent-solution/job-search/docs/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "jobs:v3",
-   "name": "jobs",
-   "version": "v3",
-   "title": "Cloud Talent Solution API",
-   "description": "Cloud Talent Solution provides the capability to create, read, update, and delete job postings, as well as search jobs based on keywords and filters.",
-   "discoveryRestUrl": "https://jobs.googleapis.com/$discovery/rest?version=v3",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/talent-solution/job-search/docs/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "kgsearch:v1",
-   "name": "kgsearch",
-   "version": "v1",
-   "title": "Knowledge Graph Search API",
-   "description": "Searches the Google Knowledge Graph for entities.",
-   "discoveryRestUrl": "https://kgsearch.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/knowledge-graph/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "language:v1",
-   "name": "language",
-   "version": "v1",
-   "title": "Cloud Natural Language API",
-   "description": "Provides natural language understanding technologies, such as sentiment analysis, entity recognition, entity sentiment analysis, and other text annotations, to developers.",
-   "discoveryRestUrl": "https://language.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/natural-language/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "language:v1beta1",
-   "name": "language",
-   "version": "v1beta1",
-   "title": "Cloud Natural Language API",
-   "description": "Provides natural language understanding technologies, such as sentiment analysis, entity recognition, entity sentiment analysis, and other text annotations, to developers.",
-   "discoveryRestUrl": "https://language.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/natural-language/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "language:v1beta2",
-   "name": "language",
-   "version": "v1beta2",
-   "title": "Cloud Natural Language API",
-   "description": "Provides natural language understanding technologies, such as sentiment analysis, entity recognition, entity sentiment analysis, and other text annotations, to developers.",
-   "discoveryRestUrl": "https://language.googleapis.com/$discovery/rest?version=v1beta2",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/natural-language/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "libraryagent:v1",
-   "name": "libraryagent",
-   "version": "v1",
-   "title": "Library Agent API",
-   "description": "A simple Google Example Library API.",
-   "discoveryRestUrl": "https://libraryagent.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/docs/quota",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "licensing:v1",
-   "name": "licensing",
-   "version": "v1",
-   "title": "Enterprise License Manager API",
-   "description": "Views and manages licenses for your domain.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/licensing/v1/rest",
-   "discoveryLink": "./apis/licensing/v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/google-apps/licensing/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "logging:v2",
-   "name": "logging",
-   "version": "v2",
-   "title": "Stackdriver Logging API",
-   "description": "Writes log entries and manages your Stackdriver Logging configuration. The table entries below are presented in alphabetical order, not in order of common use. For explanations of the concepts found in the table entries, read the [Stackdriver Logging documentation](/logging/docs).",
-   "discoveryRestUrl": "https://logging.googleapis.com/$discovery/rest?version=v2",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/logging/docs/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "manufacturers:v1",
-   "name": "manufacturers",
-   "version": "v1",
-   "title": "Manufacturer Center API",
-   "description": "Public API for managing Manufacturer Center related data.",
-   "discoveryRestUrl": "https://manufacturers.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/manufacturers/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "mirror:v1",
-   "name": "mirror",
-   "version": "v1",
-   "title": "Google Mirror API",
-   "description": "Interacts with Glass users via the timeline.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/mirror/v1/rest",
-   "discoveryLink": "./apis/mirror/v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/glass",
-   "labels": [
-    "limited_availability"
-   ],
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "ml:v1",
-   "name": "ml",
-   "version": "v1",
-   "title": "Cloud Machine Learning Engine",
-   "description": "An API to enable creating and using machine learning models.",
-   "discoveryRestUrl": "https://ml.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/ml/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "monitoring:v3p1alpha1",
-   "name": "monitoring",
-   "version": "v3p1alpha1",
-   "title": "Stackdriver Monitoring API",
-   "description": "Manages your Stackdriver Monitoring data and configurations. Most projects must be associated with a Stackdriver account, with a few exceptions as noted on the individual method pages. The table entries below are presented in alphabetical order, not in order of common use. For explanations of the concepts found in the table entries, read the [Stackdriver Monitoring documentation](/monitoring/docs).",
-   "discoveryRestUrl": "https://monitoring.googleapis.com/$discovery/rest?version=v3p1alpha1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/monitoring/api/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "monitoring:v3",
-   "name": "monitoring",
-   "version": "v3",
-   "title": "Stackdriver Monitoring API",
-   "description": "Manages your Stackdriver Monitoring data and configurations. Most projects must be associated with a Stackdriver account, with a few exceptions as noted on the individual method pages. The table entries below are presented in alphabetical order, not in order of common use. For explanations of the concepts found in the table entries, read the [Stackdriver Monitoring documentation](/monitoring/docs).",
-   "discoveryRestUrl": "https://monitoring.googleapis.com/$discovery/rest?version=v3",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/monitoring/api/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "oauth2:v1",
-   "name": "oauth2",
-   "version": "v1",
-   "title": "Google OAuth2 API",
-   "description": "Obtains end-user authorization grants for use with other Google APIs.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/oauth2/v1/rest",
-   "discoveryLink": "./apis/oauth2/v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/accounts/docs/OAuth2",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "oauth2:v2",
-   "name": "oauth2",
-   "version": "v2",
-   "title": "Google OAuth2 API",
-   "description": "Obtains end-user authorization grants for use with other Google APIs.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/oauth2/v2/rest",
-   "discoveryLink": "./apis/oauth2/v2/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/accounts/docs/OAuth2",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "osconfig:v1alpha1",
-   "name": "osconfig",
-   "version": "v1alpha1",
-   "title": "Cloud OS Config API",
-   "description": "Manages OS configurations for GCE VM instances.",
-   "discoveryRestUrl": "https://osconfig.googleapis.com/$discovery/rest?version=v1alpha1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "osconfig:v1alpha2",
-   "name": "osconfig",
-   "version": "v1alpha2",
-   "title": "Cloud OS Config API",
-   "description": "Manages OS configurations for GCE VM instances.",
-   "discoveryRestUrl": "https://osconfig.googleapis.com/$discovery/rest?version=v1alpha2",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "oslogin:v1alpha",
-   "name": "oslogin",
-   "version": "v1alpha",
-   "title": "Cloud OS Login API",
-   "description": "Manages OS login configuration for Google account users.",
-   "discoveryRestUrl": "https://oslogin.googleapis.com/$discovery/rest?version=v1alpha",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/compute/docs/oslogin/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "oslogin:v1beta",
-   "name": "oslogin",
-   "version": "v1beta",
-   "title": "Cloud OS Login API",
-   "description": "Manages OS login configuration for Google account users.",
-   "discoveryRestUrl": "https://oslogin.googleapis.com/$discovery/rest?version=v1beta",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/compute/docs/oslogin/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "oslogin:v1",
-   "name": "oslogin",
-   "version": "v1",
-   "title": "Cloud OS Login API",
-   "description": "Manages OS login configuration for Google account users.",
-   "discoveryRestUrl": "https://oslogin.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/compute/docs/oslogin/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "pagespeedonline:v1",
-   "name": "pagespeedonline",
-   "version": "v1",
-   "title": "PageSpeed Insights API",
-   "description": "Analyzes the performance of a web page and provides tailored suggestions to make that page faster.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/pagespeedonline/v1/rest",
-   "discoveryLink": "./apis/pagespeedonline/v1/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/pagespeed-16.png",
-    "x32": "https://www.google.com/images/icons/product/pagespeed-32.png"
-   },
-   "documentationLink": "https://developers.google.com/speed/docs/insights/v1/getting_started",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "pagespeedonline:v2",
-   "name": "pagespeedonline",
-   "version": "v2",
-   "title": "PageSpeed Insights API",
-   "description": "Analyzes the performance of a web page and provides tailored suggestions to make that page faster.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/pagespeedonline/v2/rest",
-   "discoveryLink": "./apis/pagespeedonline/v2/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/pagespeed-16.png",
-    "x32": "https://www.google.com/images/icons/product/pagespeed-32.png"
-   },
-   "documentationLink": "https://developers.google.com/speed/docs/insights/v2/getting-started",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "pagespeedonline:v4",
-   "name": "pagespeedonline",
-   "version": "v4",
-   "title": "PageSpeed Insights API",
-   "description": "Analyzes the performance of a web page and provides tailored suggestions to make that page faster.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/pagespeedonline/v4/rest",
-   "discoveryLink": "./apis/pagespeedonline/v4/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/pagespeed-16.png",
-    "x32": "https://www.google.com/images/icons/product/pagespeed-32.png"
-   },
-   "documentationLink": "https://developers.google.com/speed/docs/insights/v4/getting-started",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "pagespeedonline:v5",
-   "name": "pagespeedonline",
-   "version": "v5",
-   "title": "PageSpeed Insights API",
-   "description": "Analyzes the performance of a web page and provides tailored suggestions to make that page faster.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/pagespeedonline/v5/rest",
-   "discoveryLink": "./apis/pagespeedonline/v5/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/pagespeed-16.png",
-    "x32": "https://www.google.com/images/icons/product/pagespeed-32.png"
-   },
-   "documentationLink": "https://developers.google.com/speed/docs/insights/v5/get-started",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "people:v1",
-   "name": "people",
-   "version": "v1",
-   "title": "People API",
-   "description": "Provides access to information about profiles and contacts.",
-   "discoveryRestUrl": "https://people.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/people/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "playcustomapp:v1",
-   "name": "playcustomapp",
-   "version": "v1",
-   "title": "Google Play Custom App Publishing API",
-   "description": "An API to publish custom Android apps.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/playcustomapp/v1/rest",
-   "discoveryLink": "./apis/playcustomapp/v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/android/work/play/custom-app-api",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "plus:v1",
-   "name": "plus",
-   "version": "v1",
-   "title": "Google+ API",
-   "description": "Builds on top of the Google+ platform.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/plus/v1/rest",
-   "discoveryLink": "./apis/plus/v1/rest",
-   "icons": {
-    "x16": "http://www.google.com/images/icons/product/gplus-16.png",
-    "x32": "http://www.google.com/images/icons/product/gplus-32.png"
-   },
-   "documentationLink": "https://developers.google.com/+/api/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "plusDomains:v1",
-   "name": "plusDomains",
-   "version": "v1",
-   "title": "Google+ Domains API",
-   "description": "Builds on top of the Google+ platform for Google Apps Domains.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/plusDomains/v1/rest",
-   "discoveryLink": "./apis/plusDomains/v1/rest",
-   "icons": {
-    "x16": "http://www.google.com/images/icons/product/gplus-16.png",
-    "x32": "http://www.google.com/images/icons/product/gplus-32.png"
-   },
-   "documentationLink": "https://developers.google.com/+/domains/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "poly:v1",
-   "name": "poly",
-   "version": "v1",
-   "title": "Poly API",
-   "description": "The Poly API provides read access to assets hosted on poly.google.com to all, and upload access to poly.google.com for whitelisted accounts.",
-   "discoveryRestUrl": "https://poly.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/poly/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "proximitybeacon:v1beta1",
-   "name": "proximitybeacon",
-   "version": "v1beta1",
-   "title": "Proximity Beacon API",
-   "description": "Registers, manages, indexes, and searches beacons.",
-   "discoveryRestUrl": "https://proximitybeacon.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/beacons/proximity/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "pubsub:v1beta1a",
-   "name": "pubsub",
-   "version": "v1beta1a",
-   "title": "Cloud Pub/Sub API",
-   "description": "Provides reliable, many-to-many, asynchronous messaging between applications.",
-   "discoveryRestUrl": "https://pubsub.googleapis.com/$discovery/rest?version=v1beta1a",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/pubsub/docs",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "pubsub:v1",
-   "name": "pubsub",
-   "version": "v1",
-   "title": "Cloud Pub/Sub API",
-   "description": "Provides reliable, many-to-many, asynchronous messaging between applications.",
-   "discoveryRestUrl": "https://pubsub.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/pubsub/docs",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "pubsub:v1beta2",
-   "name": "pubsub",
-   "version": "v1beta2",
-   "title": "Cloud Pub/Sub API",
-   "description": "Provides reliable, many-to-many, asynchronous messaging between applications.",
-   "discoveryRestUrl": "https://pubsub.googleapis.com/$discovery/rest?version=v1beta2",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/pubsub/docs",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "redis:v1",
-   "name": "redis",
-   "version": "v1",
-   "title": "Google Cloud Memorystore for Redis API",
-   "description": "Creates and manages Redis instances on the Google Cloud Platform.",
-   "discoveryRestUrl": "https://redis.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/memorystore/docs/redis/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "redis:v1beta1",
-   "name": "redis",
-   "version": "v1beta1",
-   "title": "Google Cloud Memorystore for Redis API",
-   "description": "Creates and manages Redis instances on the Google Cloud Platform.",
-   "discoveryRestUrl": "https://redis.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/memorystore/docs/redis/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "remotebuildexecution:v1alpha",
-   "name": "remotebuildexecution",
-   "version": "v1alpha",
-   "title": "Remote Build Execution API",
-   "description": "Supplies a Remote Execution API service for tools such as bazel.",
-   "discoveryRestUrl": "https://remotebuildexecution.googleapis.com/$discovery/rest?version=v1alpha",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/remote-build-execution/docs/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "remotebuildexecution:v1",
-   "name": "remotebuildexecution",
-   "version": "v1",
-   "title": "Remote Build Execution API",
-   "description": "Supplies a Remote Execution API service for tools such as bazel.",
-   "discoveryRestUrl": "https://remotebuildexecution.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/remote-build-execution/docs/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "remotebuildexecution:v2",
-   "name": "remotebuildexecution",
-   "version": "v2",
-   "title": "Remote Build Execution API",
-   "description": "Supplies a Remote Execution API service for tools such as bazel.",
-   "discoveryRestUrl": "https://remotebuildexecution.googleapis.com/$discovery/rest?version=v2",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/remote-build-execution/docs/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "replicapool:v1beta1",
-   "name": "replicapool",
-   "version": "v1beta1",
-   "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.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/replicapool/v1beta1/rest",
-   "discoveryLink": "./apis/replicapool/v1beta1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/compute/docs/replica-pool/",
-   "labels": [
-    "limited_availability"
-   ],
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "reseller:v1",
-   "name": "reseller",
-   "version": "v1",
-   "title": "Enterprise Apps Reseller API",
-   "description": "Creates and manages your customers and their subscriptions.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/reseller/v1/rest",
-   "discoveryLink": "./apis/reseller/v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/google-apps/reseller/",
-   "labels": [
-    "limited_availability"
-   ],
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "run:v1alpha1",
-   "name": "run",
-   "version": "v1alpha1",
-   "title": "Cloud Run API",
-   "description": "Deploy and manage user provided container images that scale automatically based on HTTP traffic.",
-   "discoveryRestUrl": "https://run.googleapis.com/$discovery/rest?version=v1alpha1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/run/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "run:v1",
-   "name": "run",
-   "version": "v1",
-   "title": "Cloud Run API",
-   "description": "Deploy and manage user provided container images that scale automatically based on HTTP traffic.",
-   "discoveryRestUrl": "https://run.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/run/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "run:v1beta1",
-   "name": "run",
-   "version": "v1beta1",
-   "title": "Cloud Run API",
-   "description": "Deploy and manage user provided container images that scale automatically based on HTTP traffic.",
-   "discoveryRestUrl": "https://run.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/run/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "runtimeconfig:v1",
-   "name": "runtimeconfig",
-   "version": "v1",
-   "title": "Cloud Runtime Configuration API",
-   "description": "The Runtime Configurator allows you to dynamically configure and expose variables through Google Cloud Platform. In addition, you can also set Watchers and Waiters that will watch for changes to your data and return based on certain conditions.",
-   "discoveryRestUrl": "https://runtimeconfig.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/deployment-manager/runtime-configurator/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "runtimeconfig:v1beta1",
-   "name": "runtimeconfig",
-   "version": "v1beta1",
-   "title": "Cloud Runtime Configuration API",
-   "description": "The Runtime Configurator allows you to dynamically configure and expose variables through Google Cloud Platform. In addition, you can also set Watchers and Waiters that will watch for changes to your data and return based on certain conditions.",
-   "discoveryRestUrl": "https://runtimeconfig.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/deployment-manager/runtime-configurator/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "safebrowsing:v4",
-   "name": "safebrowsing",
-   "version": "v4",
-   "title": "Safe Browsing API",
-   "description": "Enables client applications to check web resources (most commonly URLs) against Google-generated lists of unsafe web resources.",
-   "discoveryRestUrl": "https://safebrowsing.googleapis.com/$discovery/rest?version=v4",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/safe-browsing/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "script:v1",
-   "name": "script",
-   "version": "v1",
-   "title": "Apps Script API",
-   "description": "Manages and executes Google Apps Script projects.",
-   "discoveryRestUrl": "https://script.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/apps-script/api/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "searchconsole:v1",
-   "name": "searchconsole",
-   "version": "v1",
-   "title": "Google Search Console URL Testing Tools API",
-   "description": "Provides tools for running validation tests against single URLs",
-   "discoveryRestUrl": "https://searchconsole.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/webmaster-tools/search-console-api/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "securitycenter:v1p1alpha1",
-   "name": "securitycenter",
-   "version": "v1p1alpha1",
-   "title": "Cloud Security Command Center API",
-   "description": "Cloud Security Command Center API provides access to temporal views of assets and findings within an organization.",
-   "discoveryRestUrl": "https://securitycenter.googleapis.com/$discovery/rest?version=v1p1alpha1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://console.cloud.google.com/apis/api/securitycenter.googleapis.com/overview",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "securitycenter:v1",
-   "name": "securitycenter",
-   "version": "v1",
-   "title": "Cloud Security Command Center API",
-   "description": "Cloud Security Command Center API provides access to temporal views of assets and findings within an organization.",
-   "discoveryRestUrl": "https://securitycenter.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://console.cloud.google.com/apis/api/securitycenter.googleapis.com/overview",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "securitycenter:v1beta1",
-   "name": "securitycenter",
-   "version": "v1beta1",
-   "title": "Cloud Security Command Center API",
-   "description": "Cloud Security Command Center API provides access to temporal views of assets and findings within an organization.",
-   "discoveryRestUrl": "https://securitycenter.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://console.cloud.google.com/apis/api/securitycenter.googleapis.com/overview",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "servicebroker:v1alpha1",
-   "name": "servicebroker",
-   "version": "v1alpha1",
-   "title": "Service Broker API",
-   "description": "The Google Cloud Platform Service Broker API provides Google hosted implementation of the Open Service Broker API (https://www.openservicebrokerapi.org/).",
-   "discoveryRestUrl": "https://servicebroker.googleapis.com/$discovery/rest?version=v1alpha1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/kubernetes-engine/docs/concepts/add-on/service-broker",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "servicebroker:v1",
-   "name": "servicebroker",
-   "version": "v1",
-   "title": "Service Broker API",
-   "description": "The Google Cloud Platform Service Broker API provides Google hosted implementation of the Open Service Broker API (https://www.openservicebrokerapi.org/).",
-   "discoveryRestUrl": "https://servicebroker.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/kubernetes-engine/docs/concepts/add-on/service-broker",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "servicebroker:v1beta1",
-   "name": "servicebroker",
-   "version": "v1beta1",
-   "title": "Service Broker API",
-   "description": "The Google Cloud Platform Service Broker API provides Google hosted implementation of the Open Service Broker API (https://www.openservicebrokerapi.org/).",
-   "discoveryRestUrl": "https://servicebroker.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/kubernetes-engine/docs/concepts/add-on/service-broker",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "serviceconsumermanagement:v1",
-   "name": "serviceconsumermanagement",
-   "version": "v1",
-   "title": "Service Consumer Management API",
-   "description": "Manages the service consumers of a Service Infrastructure service.",
-   "discoveryRestUrl": "https://serviceconsumermanagement.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/service-consumer-management/docs/overview",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "servicecontrol:v1",
-   "name": "servicecontrol",
-   "version": "v1",
-   "title": "Service Control API",
-   "description": "Provides control plane functionality to managed services, such as logging, monitoring, and status checks.",
-   "discoveryRestUrl": "https://servicecontrol.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/service-control/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "servicemanagement:v1",
-   "name": "servicemanagement",
-   "version": "v1",
-   "title": "Service Management API",
-   "description": "Google Service Management allows service producers to publish their services on Google Cloud Platform so that they can be discovered and used by service consumers.",
-   "discoveryRestUrl": "https://servicemanagement.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/service-management/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "servicenetworking:v1beta",
-   "name": "servicenetworking",
-   "version": "v1beta",
-   "title": "Service Networking API",
-   "description": "Provides automatic management of network configurations necessary for certain services.",
-   "discoveryRestUrl": "https://servicenetworking.googleapis.com/$discovery/rest?version=v1beta",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/service-infrastructure/docs/service-networking/getting-started",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "servicenetworking:v1",
-   "name": "servicenetworking",
-   "version": "v1",
-   "title": "Service Networking API",
-   "description": "Provides automatic management of network configurations necessary for certain services.",
-   "discoveryRestUrl": "https://servicenetworking.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/service-infrastructure/docs/service-networking/getting-started",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "serviceusage:v1",
-   "name": "serviceusage",
-   "version": "v1",
-   "title": "Service Usage API",
-   "description": "Enables services that service consumers want to use on Google Cloud Platform, lists the available or enabled services, or disables services that service consumers no longer use.",
-   "discoveryRestUrl": "https://serviceusage.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/service-usage/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "serviceusage:v1beta1",
-   "name": "serviceusage",
-   "version": "v1beta1",
-   "title": "Service Usage API",
-   "description": "Enables services that service consumers want to use on Google Cloud Platform, lists the available or enabled services, or disables services that service consumers no longer use.",
-   "discoveryRestUrl": "https://serviceusage.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/service-usage/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "sheets:v4",
-   "name": "sheets",
-   "version": "v4",
-   "title": "Google Sheets API",
-   "description": "Reads and writes Google Sheets.",
-   "discoveryRestUrl": "https://sheets.googleapis.com/$discovery/rest?version=v4",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/sheets/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "siteVerification:v1",
-   "name": "siteVerification",
-   "version": "v1",
-   "title": "Google Site Verification API",
-   "description": "Verifies ownership of websites or domains with Google.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/siteVerification/v1/rest",
-   "discoveryLink": "./apis/siteVerification/v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/site-verification/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "slides:v1",
-   "name": "slides",
-   "version": "v1",
-   "title": "Google Slides API",
-   "description": "Reads and writes Google Slides presentations.",
-   "discoveryRestUrl": "https://slides.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/slides/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "sourcerepo:v1",
-   "name": "sourcerepo",
-   "version": "v1",
-   "title": "Cloud Source Repositories API",
-   "description": "Accesses source code repositories hosted by Google.",
-   "discoveryRestUrl": "https://sourcerepo.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/source-repositories/docs/apis",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "spanner:v1",
-   "name": "spanner",
-   "version": "v1",
-   "title": "Cloud Spanner API",
-   "description": "Cloud Spanner is a managed, mission-critical, globally consistent and scalable relational database service.",
-   "discoveryRestUrl": "https://spanner.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/spanner/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "speech:v1p1beta1",
-   "name": "speech",
-   "version": "v1p1beta1",
-   "title": "Cloud Speech-to-Text API",
-   "description": "Converts audio to text by applying powerful neural network models.",
-   "discoveryRestUrl": "https://speech.googleapis.com/$discovery/rest?version=v1p1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/speech-to-text/docs/quickstart-protocol",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "speech:v1",
-   "name": "speech",
-   "version": "v1",
-   "title": "Cloud Speech-to-Text API",
-   "description": "Converts audio to text by applying powerful neural network models.",
-   "discoveryRestUrl": "https://speech.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/speech-to-text/docs/quickstart-protocol",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "sqladmin:v1beta4",
-   "name": "sqladmin",
-   "version": "v1beta4",
-   "title": "Cloud SQL Admin API",
-   "description": "Creates and manages Cloud SQL instances, which provide fully managed MySQL or PostgreSQL databases.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/sqladmin/v1beta4/rest",
-   "discoveryLink": "./apis/sqladmin/v1beta4/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/sql/docs/reference/latest",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "storage:v1",
-   "name": "storage",
-   "version": "v1",
-   "title": "Cloud Storage JSON API",
-   "description": "Stores and retrieves potentially large, immutable data objects.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/storage/v1/rest",
-   "discoveryLink": "./apis/storage/v1/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/cloud_storage-16.png",
-    "x32": "https://www.google.com/images/icons/product/cloud_storage-32.png"
-   },
-   "documentationLink": "https://developers.google.com/storage/docs/json_api/",
-   "labels": [
-    "labs"
-   ],
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "storage:v1beta1",
-   "name": "storage",
-   "version": "v1beta1",
-   "title": "Cloud Storage JSON API",
-   "description": "Lets you store and retrieve potentially-large, immutable data objects.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/storage/v1beta1/rest",
-   "discoveryLink": "./apis/storage/v1beta1/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/cloud_storage-16.png",
-    "x32": "https://www.google.com/images/icons/product/cloud_storage-32.png"
-   },
-   "documentationLink": "https://developers.google.com/storage/docs/json_api/",
-   "labels": [
-    "labs"
-   ],
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "storage:v1beta2",
-   "name": "storage",
-   "version": "v1beta2",
-   "title": "Cloud Storage JSON API",
-   "description": "Lets you store and retrieve potentially-large, immutable data objects.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/storage/v1beta2/rest",
-   "discoveryLink": "./apis/storage/v1beta2/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/cloud_storage-16.png",
-    "x32": "https://www.google.com/images/icons/product/cloud_storage-32.png"
-   },
-   "documentationLink": "https://developers.google.com/storage/docs/json_api/",
-   "labels": [
-    "labs"
-   ],
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "storagetransfer:v1",
-   "name": "storagetransfer",
-   "version": "v1",
-   "title": "Storage Transfer API",
-   "description": "Transfers data from external data sources to a Google Cloud Storage bucket or between Google Cloud Storage buckets.",
-   "discoveryRestUrl": "https://storagetransfer.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/storage-transfer/docs",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "streetviewpublish:v1",
-   "name": "streetviewpublish",
-   "version": "v1",
-   "title": "Street View Publish API",
-   "description": "Publishes 360 photos to Google Maps, along with position, orientation, and connectivity metadata. Apps can offer an interface for positioning, connecting, and uploading user-generated Street View images.",
-   "discoveryRestUrl": "https://streetviewpublish.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/streetview/publish/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "surveys:v2",
-   "name": "surveys",
-   "version": "v2",
-   "title": "Surveys API",
-   "description": "Creates and conducts surveys, lists the surveys that an authenticated user owns, and retrieves survey results and information about specified surveys.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/surveys/v2/rest",
-   "discoveryLink": "./apis/surveys/v2/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "tagmanager:v1",
-   "name": "tagmanager",
-   "version": "v1",
-   "title": "Tag Manager API",
-   "description": "Accesses Tag Manager accounts and containers.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/tagmanager/v1/rest",
-   "discoveryLink": "./apis/tagmanager/v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/tag-manager/api/v1/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "tagmanager:v2",
-   "name": "tagmanager",
-   "version": "v2",
-   "title": "Tag Manager API",
-   "description": "Accesses Tag Manager accounts and containers.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/tagmanager/v2/rest",
-   "discoveryLink": "./apis/tagmanager/v2/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/tag-manager/api/v2/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "tasks:v1",
-   "name": "tasks",
-   "version": "v1",
-   "title": "Tasks API",
-   "description": "Manages your tasks and task lists.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/tasks/v1/rest",
-   "discoveryLink": "./apis/tasks/v1/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/tasks-16.png",
-    "x32": "https://www.google.com/images/icons/product/tasks-32.png"
-   },
-   "documentationLink": "https://developers.google.com/google-apps/tasks/firstapp",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "testing:v1",
-   "name": "testing",
-   "version": "v1",
-   "title": "Cloud Testing API",
-   "description": "Allows developers to run automated tests for their mobile applications on Google infrastructure.",
-   "discoveryRestUrl": "https://testing.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/cloud-test-lab/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "texttospeech:v1",
-   "name": "texttospeech",
-   "version": "v1",
-   "title": "Cloud Text-to-Speech API",
-   "description": "Synthesizes natural-sounding speech by applying powerful neural network models.",
-   "discoveryRestUrl": "https://texttospeech.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/text-to-speech/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "texttospeech:v1beta1",
-   "name": "texttospeech",
-   "version": "v1beta1",
-   "title": "Cloud Text-to-Speech API",
-   "description": "Synthesizes natural-sounding speech by applying powerful neural network models.",
-   "discoveryRestUrl": "https://texttospeech.googleapis.com/$discovery/rest?version=v1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/text-to-speech/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "toolresults:v1beta3",
-   "name": "toolresults",
-   "version": "v1beta3",
-   "title": "Cloud Tool Results API",
-   "description": "Reads and publishes results from Firebase Test Lab.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/toolresults/v1beta3/rest",
-   "discoveryLink": "./apis/toolresults/v1beta3/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://firebase.google.com/docs/test-lab/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "tpu:v1alpha1",
-   "name": "tpu",
-   "version": "v1alpha1",
-   "title": "Cloud TPU API",
-   "description": "TPU API provides customers with access to Google TPU technology.",
-   "discoveryRestUrl": "https://tpu.googleapis.com/$discovery/rest?version=v1alpha1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/tpu/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "tpu:v1",
-   "name": "tpu",
-   "version": "v1",
-   "title": "Cloud TPU API",
-   "description": "TPU API provides customers with access to Google TPU technology.",
-   "discoveryRestUrl": "https://tpu.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/tpu/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "translate:v2",
-   "name": "translate",
-   "version": "v2",
-   "title": "Cloud Translation API",
-   "description": "Integrates text translation into your website or application.",
-   "discoveryRestUrl": "https://translation.googleapis.com/$discovery/rest?version=v2",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/translate/docs/quickstarts",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "urlshortener:v1",
-   "name": "urlshortener",
-   "version": "v1",
-   "title": "URL Shortener API",
-   "description": "Lets you create, inspect, and manage goo.gl short URLs",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/urlshortener/v1/rest",
-   "discoveryLink": "./apis/urlshortener/v1/rest",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/url-shortener/v1/getting_started",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "vault:v1",
-   "name": "vault",
-   "version": "v1",
-   "title": "G Suite Vault API",
-   "description": "Archiving and eDiscovery for G Suite.",
-   "discoveryRestUrl": "https://vault.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/vault",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "videointelligence:v1p1beta1",
-   "name": "videointelligence",
-   "version": "v1p1beta1",
-   "title": "Cloud Video Intelligence API",
-   "description": "Detects objects, explicit content, and scene changes in videos. It also specifies the region for annotation and transcribes speech to text. Supports both asynchronous API and streaming API.",
-   "discoveryRestUrl": "https://videointelligence.googleapis.com/$discovery/rest?version=v1p1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/video-intelligence/docs/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "videointelligence:v1p2beta1",
-   "name": "videointelligence",
-   "version": "v1p2beta1",
-   "title": "Cloud Video Intelligence API",
-   "description": "Detects objects, explicit content, and scene changes in videos. It also specifies the region for annotation and transcribes speech to text. Supports both asynchronous API and streaming API.",
-   "discoveryRestUrl": "https://videointelligence.googleapis.com/$discovery/rest?version=v1p2beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/video-intelligence/docs/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "videointelligence:v1p3beta1",
-   "name": "videointelligence",
-   "version": "v1p3beta1",
-   "title": "Cloud Video Intelligence API",
-   "description": "Detects objects, explicit content, and scene changes in videos. It also specifies the region for annotation and transcribes speech to text. Supports both asynchronous API and streaming API.",
-   "discoveryRestUrl": "https://videointelligence.googleapis.com/$discovery/rest?version=v1p3beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/video-intelligence/docs/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "videointelligence:v1",
-   "name": "videointelligence",
-   "version": "v1",
-   "title": "Cloud Video Intelligence API",
-   "description": "Detects objects, explicit content, and scene changes in videos. It also specifies the region for annotation and transcribes speech to text. Supports both asynchronous API and streaming API.",
-   "discoveryRestUrl": "https://videointelligence.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/video-intelligence/docs/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "videointelligence:v1beta2",
-   "name": "videointelligence",
-   "version": "v1beta2",
-   "title": "Cloud Video Intelligence API",
-   "description": "Detects objects, explicit content, and scene changes in videos. It also specifies the region for annotation and transcribes speech to text. Supports both asynchronous API and streaming API.",
-   "discoveryRestUrl": "https://videointelligence.googleapis.com/$discovery/rest?version=v1beta2",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/video-intelligence/docs/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "vision:v1p1beta1",
-   "name": "vision",
-   "version": "v1p1beta1",
-   "title": "Cloud Vision API",
-   "description": "Integrates Google Vision features, including image labeling, face, logo, and landmark detection, optical character recognition (OCR), and detection of explicit content, into applications.",
-   "discoveryRestUrl": "https://vision.googleapis.com/$discovery/rest?version=v1p1beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/vision/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "vision:v1p2beta1",
-   "name": "vision",
-   "version": "v1p2beta1",
-   "title": "Cloud Vision API",
-   "description": "Integrates Google Vision features, including image labeling, face, logo, and landmark detection, optical character recognition (OCR), and detection of explicit content, into applications.",
-   "discoveryRestUrl": "https://vision.googleapis.com/$discovery/rest?version=v1p2beta1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/vision/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "vision:v1",
-   "name": "vision",
-   "version": "v1",
-   "title": "Cloud Vision API",
-   "description": "Integrates Google Vision features, including image labeling, face, logo, and landmark detection, optical character recognition (OCR), and detection of explicit content, into applications.",
-   "discoveryRestUrl": "https://vision.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/vision/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "webfonts:v1",
-   "name": "webfonts",
-   "version": "v1",
-   "title": "Google Fonts Developer API",
-   "description": "Accesses the metadata for all families served by Google Fonts, providing a list of families currently available (including available styles and a list of supported script subsets).",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/webfonts/v1/rest",
-   "discoveryLink": "./apis/webfonts/v1/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/feature/font_api-16.png",
-    "x32": "https://www.google.com/images/icons/feature/font_api-32.gif"
-   },
-   "documentationLink": "https://developers.google.com/fonts/docs/developer_api",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "webmasters:v3",
-   "name": "webmasters",
-   "version": "v3",
-   "title": "Search Console API",
-   "description": "View Google Search Console data for your verified sites.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/webmasters/v3/rest",
-   "discoveryLink": "./apis/webmasters/v3/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/webmaster_tools-16.png",
-    "x32": "https://www.google.com/images/icons/product/webmaster_tools-32.png"
-   },
-   "documentationLink": "https://developers.google.com/webmaster-tools/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "websecurityscanner:v1alpha",
-   "name": "websecurityscanner",
-   "version": "v1alpha",
-   "title": "Web Security Scanner API",
-   "description": "Scans your Compute and App Engine apps for common web vulnerabilities.",
-   "discoveryRestUrl": "https://websecurityscanner.googleapis.com/$discovery/rest?version=v1alpha",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/security-scanner/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "websecurityscanner:v1beta",
-   "name": "websecurityscanner",
-   "version": "v1beta",
-   "title": "Web Security Scanner API",
-   "description": "Scans your Compute and App Engine apps for common web vulnerabilities.",
-   "discoveryRestUrl": "https://websecurityscanner.googleapis.com/$discovery/rest?version=v1beta",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://cloud.google.com/security-scanner/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "youtube:v3",
-   "name": "youtube",
-   "version": "v3",
-   "title": "YouTube Data API",
-   "description": "Supports core YouTube features, such as uploading videos, creating and managing playlists, searching for content, and much more.",
-   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/youtube/v3/rest",
-   "discoveryLink": "./apis/youtube/v3/rest",
-   "icons": {
-    "x16": "https://www.google.com/images/icons/product/youtube-16.png",
-    "x32": "https://www.google.com/images/icons/product/youtube-32.png"
-   },
-   "documentationLink": "https://developers.google.com/youtube/v3",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "youtubeAnalytics:v1",
-   "name": "youtubeAnalytics",
-   "version": "v1",
-   "title": "YouTube Analytics API",
-   "description": "Retrieves your YouTube Analytics data.",
-   "discoveryRestUrl": "https://youtubeanalytics.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/youtube/analytics",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "youtubeAnalytics:v2",
-   "name": "youtubeAnalytics",
-   "version": "v2",
-   "title": "YouTube Analytics API",
-   "description": "Retrieves your YouTube Analytics data.",
-   "discoveryRestUrl": "https://youtubeanalytics.googleapis.com/$discovery/rest?version=v2",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/youtube/analytics",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "youtubereporting:v1",
-   "name": "youtubereporting",
-   "version": "v1",
-   "title": "YouTube Reporting API",
-   "description": "Schedules reporting jobs containing your YouTube Analytics data and downloads the resulting bulk data reports in the form of CSV files.",
-   "discoveryRestUrl": "https://youtubereporting.googleapis.com/$discovery/rest?version=v1",
-   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-   },
-   "documentationLink": "https://developers.google.com/youtube/reporting/v1/reports/",
-   "preferred": true
-  }
- ]
+  "kind": "discovery#directoryList",
+  "discoveryVersion": "v1",
+  "items": [
+    {
+      "kind": "discovery#directoryItem",
+      "id": "abusiveexperiencereport:v1",
+      "name": "abusiveexperiencereport",
+      "version": "v1",
+      "title": "Abusive Experience Report API",
+      "description": "Views Abusive Experience Report data, and gets a list of sites that have a significant number of abusive experiences.",
+      "discoveryRestUrl": "https://abusiveexperiencereport.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/abusive-experience-report/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "acceleratedmobilepageurl:v1",
+      "name": "acceleratedmobilepageurl",
+      "version": "v1",
+      "title": "Accelerated Mobile Pages (AMP) URL API",
+      "description": "This API contains a single method, batchGet. Call this method to retrieve the AMP URL (and equivalent AMP Cache URL) for given public URL(s).",
+      "discoveryRestUrl": "https://acceleratedmobilepageurl.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/amp/cache/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "accessapproval:v1beta1",
+      "name": "accessapproval",
+      "version": "v1beta1",
+      "title": "Access Approval API",
+      "description": "An API for controlling access to data by Google personnel.",
+      "discoveryRestUrl": "https://accessapproval.googleapis.com/$discovery/rest?version=v1beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/access-approval/docs",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "accesscontextmanager:v1beta",
+      "name": "accesscontextmanager",
+      "version": "v1beta",
+      "title": "Access Context Manager API",
+      "description": "An API for setting attribute based access control to requests to GCP services.",
+      "discoveryRestUrl": "https://accesscontextmanager.googleapis.com/$discovery/rest?version=v1beta",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/access-context-manager/docs/reference/rest/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "accesscontextmanager:v1",
+      "name": "accesscontextmanager",
+      "version": "v1",
+      "title": "Access Context Manager API",
+      "description": "An API for setting attribute based access control to requests to GCP services.",
+      "discoveryRestUrl": "https://accesscontextmanager.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/access-context-manager/docs/reference/rest/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "adexchangebuyer:v1.2",
+      "name": "adexchangebuyer",
+      "version": "v1.2",
+      "title": "Ad Exchange Buyer API",
+      "description": "Accesses your bidding-account information, submits creatives for validation, finds available direct deals, and retrieves performance reports.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/adexchangebuyer/v1.2/rest",
+      "discoveryLink": "./apis/adexchangebuyer/v1.2/rest",
+      "icons": {
+        "x16": "https://www.google.com/images/icons/product/doubleclick-16.gif",
+        "x32": "https://www.google.com/images/icons/product/doubleclick-32.gif"
+      },
+      "documentationLink": "https://developers.google.com/ad-exchange/buyer-rest",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "adexchangebuyer:v1.3",
+      "name": "adexchangebuyer",
+      "version": "v1.3",
+      "title": "Ad Exchange Buyer API",
+      "description": "Accesses your bidding-account information, submits creatives for validation, finds available direct deals, and retrieves performance reports.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/adexchangebuyer/v1.3/rest",
+      "discoveryLink": "./apis/adexchangebuyer/v1.3/rest",
+      "icons": {
+        "x16": "https://www.google.com/images/icons/product/doubleclick-16.gif",
+        "x32": "https://www.google.com/images/icons/product/doubleclick-32.gif"
+      },
+      "documentationLink": "https://developers.google.com/ad-exchange/buyer-rest",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "adexchangebuyer:v1.4",
+      "name": "adexchangebuyer",
+      "version": "v1.4",
+      "title": "Ad Exchange Buyer API",
+      "description": "Accesses your bidding-account information, submits creatives for validation, finds available direct deals, and retrieves performance reports.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/adexchangebuyer/v1.4/rest",
+      "discoveryLink": "./apis/adexchangebuyer/v1.4/rest",
+      "icons": {
+        "x16": "https://www.google.com/images/icons/product/doubleclick-16.gif",
+        "x32": "https://www.google.com/images/icons/product/doubleclick-32.gif"
+      },
+      "documentationLink": "https://developers.google.com/ad-exchange/buyer-rest",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "adexchangebuyer2:v2beta1",
+      "name": "adexchangebuyer2",
+      "version": "v2beta1",
+      "title": "Ad Exchange Buyer API II",
+      "description": "Accesses the latest features for managing Ad Exchange accounts, Real-Time Bidding configurations and auction metrics, and Marketplace programmatic deals.",
+      "discoveryRestUrl": "https://adexchangebuyer.googleapis.com/$discovery/rest?version=v2beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/ad-exchange/buyer-rest/reference/rest/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "adexperiencereport:v1",
+      "name": "adexperiencereport",
+      "version": "v1",
+      "title": "Ad Experience Report API",
+      "description": "Views Ad Experience Report data, and gets a list of sites that have a significant number of annoying ads.",
+      "discoveryRestUrl": "https://adexperiencereport.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/ad-experience-report/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "admin:datatransfer_v1",
+      "name": "admin",
+      "version": "datatransfer_v1",
+      "title": "Admin Data Transfer API",
+      "description": "Transfers user data from one user to another.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/admin/datatransfer_v1/rest",
+      "discoveryLink": "./apis/admin/datatransfer_v1/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/admin-sdk/data-transfer/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "admin:directory_v1",
+      "name": "admin",
+      "version": "directory_v1",
+      "title": "Admin Directory API",
+      "description": "Manages enterprise resources such as users and groups, administrative notifications, security features, and more.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/admin/directory_v1/rest",
+      "discoveryLink": "./apis/admin/directory_v1/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/admin-sdk/directory/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "admin:reports_v1",
+      "name": "admin",
+      "version": "reports_v1",
+      "title": "Admin Reports API",
+      "description": "Fetches reports for the administrators of G Suite customers about the usage, collaboration, security, and risk for their users.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/admin/reports_v1/rest",
+      "discoveryLink": "./apis/admin/reports_v1/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/admin-sdk/reports/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "adsense:v1.4",
+      "name": "adsense",
+      "version": "v1.4",
+      "title": "AdSense Management API",
+      "description": "Accesses AdSense publishers' inventory and generates performance reports.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/adsense/v1.4/rest",
+      "discoveryLink": "./apis/adsense/v1.4/rest",
+      "icons": {
+        "x16": "https://www.google.com/images/icons/product/adsense-16.png",
+        "x32": "https://www.google.com/images/icons/product/adsense-32.png"
+      },
+      "documentationLink": "https://developers.google.com/adsense/management/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "adsensehost:v4.1",
+      "name": "adsensehost",
+      "version": "v4.1",
+      "title": "AdSense Host API",
+      "description": "Generates performance reports, generates ad codes, and provides publisher management capabilities for AdSense Hosts.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/adsensehost/v4.1/rest",
+      "discoveryLink": "./apis/adsensehost/v4.1/rest",
+      "icons": {
+        "x16": "https://www.google.com/images/icons/product/adsense-16.png",
+        "x32": "https://www.google.com/images/icons/product/adsense-32.png"
+      },
+      "documentationLink": "https://developers.google.com/adsense/host/",
+      "labels": [
+        "limited_availability"
+      ],
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "alertcenter:v1beta1",
+      "name": "alertcenter",
+      "version": "v1beta1",
+      "title": "G Suite Alert Center API",
+      "description": "Manages alerts on issues affecting your domain.",
+      "discoveryRestUrl": "https://alertcenter.googleapis.com/$discovery/rest?version=v1beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/admin-sdk/alertcenter/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "analytics:v2.4",
+      "name": "analytics",
+      "version": "v2.4",
+      "title": "Google Analytics API",
+      "description": "Views and manages your Google Analytics data.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/analytics/v2.4/rest",
+      "discoveryLink": "./apis/analytics/v2.4/rest",
+      "icons": {
+        "x16": "https://www.google.com/images/icons/product/analytics-16.png",
+        "x32": "https://www.google.com/images/icons/product/analytics-32.png"
+      },
+      "documentationLink": "https://developers.google.com/analytics/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "analytics:v3",
+      "name": "analytics",
+      "version": "v3",
+      "title": "Google Analytics API",
+      "description": "Views and manages your Google Analytics data.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/analytics/v3/rest",
+      "discoveryLink": "./apis/analytics/v3/rest",
+      "icons": {
+        "x16": "https://www.google.com/images/icons/product/analytics-16.png",
+        "x32": "https://www.google.com/images/icons/product/analytics-32.png"
+      },
+      "documentationLink": "https://developers.google.com/analytics/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "analyticsreporting:v4",
+      "name": "analyticsreporting",
+      "version": "v4",
+      "title": "Analytics Reporting API",
+      "description": "Accesses Analytics report data.",
+      "discoveryRestUrl": "https://analyticsreporting.googleapis.com/$discovery/rest?version=v4",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/analytics/devguides/reporting/core/v4/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "androiddeviceprovisioning:v1",
+      "name": "androiddeviceprovisioning",
+      "version": "v1",
+      "title": "Android Device Provisioning Partner API",
+      "description": "Automates Android zero-touch enrollment for device resellers, customers, and EMMs.",
+      "discoveryRestUrl": "https://androiddeviceprovisioning.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/zero-touch/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "androidenterprise:v1",
+      "name": "androidenterprise",
+      "version": "v1",
+      "title": "Google Play EMM API",
+      "description": "Manages the deployment of apps to Android for Work users.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/androidenterprise/v1/rest",
+      "discoveryLink": "./apis/androidenterprise/v1/rest",
+      "icons": {
+        "x16": "https://www.google.com/images/icons/product/android-16.png",
+        "x32": "https://www.google.com/images/icons/product/android-32.png"
+      },
+      "documentationLink": "https://developers.google.com/android/work/play/emm-api",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "androidmanagement:v1",
+      "name": "androidmanagement",
+      "version": "v1",
+      "title": "Android Management API",
+      "description": "The Android Management API provides remote enterprise management of Android devices and apps.",
+      "discoveryRestUrl": "https://androidmanagement.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/android/management",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "androidpublisher:v1",
+      "name": "androidpublisher",
+      "version": "v1",
+      "title": "Google Play Developer API",
+      "description": "Accesses Android application developers' Google Play accounts.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/androidpublisher/v1/rest",
+      "discoveryLink": "./apis/androidpublisher/v1/rest",
+      "icons": {
+        "x16": "https://www.google.com/images/icons/product/android-16.png",
+        "x32": "https://www.google.com/images/icons/product/android-32.png"
+      },
+      "documentationLink": "https://developers.google.com/android-publisher",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "androidpublisher:v1.1",
+      "name": "androidpublisher",
+      "version": "v1.1",
+      "title": "Google Play Developer API",
+      "description": "Accesses Android application developers' Google Play accounts.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/androidpublisher/v1.1/rest",
+      "discoveryLink": "./apis/androidpublisher/v1.1/rest",
+      "icons": {
+        "x16": "https://www.google.com/images/icons/product/android-16.png",
+        "x32": "https://www.google.com/images/icons/product/android-32.png"
+      },
+      "documentationLink": "https://developers.google.com/android-publisher",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "androidpublisher:v2",
+      "name": "androidpublisher",
+      "version": "v2",
+      "title": "Google Play Developer API",
+      "description": "Accesses Android application developers' Google Play accounts.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/androidpublisher/v2/rest",
+      "discoveryLink": "./apis/androidpublisher/v2/rest",
+      "icons": {
+        "x16": "https://www.google.com/images/icons/product/android-16.png",
+        "x32": "https://www.google.com/images/icons/product/android-32.png"
+      },
+      "documentationLink": "https://developers.google.com/android-publisher",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "androidpublisher:v3",
+      "name": "androidpublisher",
+      "version": "v3",
+      "title": "Google Play Developer API",
+      "description": "Accesses Android application developers' Google Play accounts.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/androidpublisher/v3/rest",
+      "discoveryLink": "./apis/androidpublisher/v3/rest",
+      "icons": {
+        "x16": "https://www.google.com/images/icons/product/android-16.png",
+        "x32": "https://www.google.com/images/icons/product/android-32.png"
+      },
+      "documentationLink": "https://developers.google.com/android-publisher",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "appengine:v1alpha",
+      "name": "appengine",
+      "version": "v1alpha",
+      "title": "App Engine Admin API",
+      "description": "Provisions and manages developers' App Engine applications.",
+      "discoveryRestUrl": "https://appengine.googleapis.com/$discovery/rest?version=v1alpha",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/appengine/docs/admin-api/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "appengine:v1beta",
+      "name": "appengine",
+      "version": "v1beta",
+      "title": "App Engine Admin API",
+      "description": "Provisions and manages developers' App Engine applications.",
+      "discoveryRestUrl": "https://appengine.googleapis.com/$discovery/rest?version=v1beta",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/appengine/docs/admin-api/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "appengine:v1",
+      "name": "appengine",
+      "version": "v1",
+      "title": "App Engine Admin API",
+      "description": "Provisions and manages developers' App Engine applications.",
+      "discoveryRestUrl": "https://appengine.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/appengine/docs/admin-api/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "appengine:v1beta4",
+      "name": "appengine",
+      "version": "v1beta4",
+      "title": "App Engine Admin API",
+      "description": "Provisions and manages developers' App Engine applications.",
+      "discoveryRestUrl": "https://appengine.googleapis.com/$discovery/rest?version=v1beta4",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/appengine/docs/admin-api/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "appengine:v1beta5",
+      "name": "appengine",
+      "version": "v1beta5",
+      "title": "App Engine Admin API",
+      "description": "Provisions and manages developers' App Engine applications.",
+      "discoveryRestUrl": "https://appengine.googleapis.com/$discovery/rest?version=v1beta5",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/appengine/docs/admin-api/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "appsactivity:v1",
+      "name": "appsactivity",
+      "version": "v1",
+      "title": "Drive Activity API",
+      "description": "Provides a historical view of activity.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/appsactivity/v1/rest",
+      "discoveryLink": "./apis/appsactivity/v1/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/google-apps/activity/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "appstate:v1",
+      "name": "appstate",
+      "version": "v1",
+      "title": "Google App State API",
+      "description": "The Google App State API.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/appstate/v1/rest",
+      "discoveryLink": "./apis/appstate/v1/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/games/services/web/api/states",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "bigquery:v2",
+      "name": "bigquery",
+      "version": "v2",
+      "title": "BigQuery API",
+      "description": "A data platform for customers to create, manage, share and query data.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/bigquery/v2/rest",
+      "discoveryLink": "./apis/bigquery/v2/rest",
+      "icons": {
+        "x16": "https://www.google.com/images/icons/product/search-16.gif",
+        "x32": "https://www.google.com/images/icons/product/search-32.gif"
+      },
+      "documentationLink": "https://cloud.google.com/bigquery/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "bigquerydatatransfer:v1",
+      "name": "bigquerydatatransfer",
+      "version": "v1",
+      "title": "BigQuery Data Transfer API",
+      "description": "Schedule queries or transfer external data from SaaS applications to Google BigQuery on a regular basis.",
+      "discoveryRestUrl": "https://bigquerydatatransfer.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/bigquery/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "bigtableadmin:v1",
+      "name": "bigtableadmin",
+      "version": "v1",
+      "title": "Cloud Bigtable Admin API",
+      "description": "Administer your Cloud Bigtable tables and instances.",
+      "discoveryRestUrl": "https://bigtableadmin.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/bigtable/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "bigtableadmin:v2",
+      "name": "bigtableadmin",
+      "version": "v2",
+      "title": "Cloud Bigtable Admin API",
+      "description": "Administer your Cloud Bigtable tables and instances.",
+      "discoveryRestUrl": "https://bigtableadmin.googleapis.com/$discovery/rest?version=v2",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/bigtable/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "binaryauthorization:v1beta1",
+      "name": "binaryauthorization",
+      "version": "v1beta1",
+      "title": "Binary Authorization API",
+      "description": "The management interface for Binary Authorization, a system providing policy control for images deployed to Kubernetes Engine clusters.",
+      "discoveryRestUrl": "https://binaryauthorization.googleapis.com/$discovery/rest?version=v1beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/binary-authorization/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "blogger:v2",
+      "name": "blogger",
+      "version": "v2",
+      "title": "Blogger API",
+      "description": "API for access to the data within Blogger.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/blogger/v2/rest",
+      "discoveryLink": "./apis/blogger/v2/rest",
+      "icons": {
+        "x16": "https://www.google.com/images/icons/product/blogger-16.png",
+        "x32": "https://www.google.com/images/icons/product/blogger-32.png"
+      },
+      "documentationLink": "https://developers.google.com/blogger/docs/2.0/json/getting_started",
+      "labels": [
+        "limited_availability"
+      ],
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "blogger:v3",
+      "name": "blogger",
+      "version": "v3",
+      "title": "Blogger API",
+      "description": "API for access to the data within Blogger.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/blogger/v3/rest",
+      "discoveryLink": "./apis/blogger/v3/rest",
+      "icons": {
+        "x16": "https://www.google.com/images/icons/product/blogger-16.png",
+        "x32": "https://www.google.com/images/icons/product/blogger-32.png"
+      },
+      "documentationLink": "https://developers.google.com/blogger/docs/3.0/getting_started",
+      "labels": [
+        "limited_availability"
+      ],
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "books:v1",
+      "name": "books",
+      "version": "v1",
+      "title": "Books API",
+      "description": "Searches for books and manages your Google Books library.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/books/v1/rest",
+      "discoveryLink": "./apis/books/v1/rest",
+      "icons": {
+        "x16": "https://www.google.com/images/icons/product/ebooks-16.png",
+        "x32": "https://www.google.com/images/icons/product/ebooks-32.png"
+      },
+      "documentationLink": "https://developers.google.com/books/docs/v1/getting_started",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "calendar:v3",
+      "name": "calendar",
+      "version": "v3",
+      "title": "Calendar API",
+      "description": "Manipulates events and other calendar data.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/calendar/v3/rest",
+      "discoveryLink": "./apis/calendar/v3/rest",
+      "icons": {
+        "x16": "http://www.google.com/images/icons/product/calendar-16.png",
+        "x32": "http://www.google.com/images/icons/product/calendar-32.png"
+      },
+      "documentationLink": "https://developers.google.com/google-apps/calendar/firstapp",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "chat:v1",
+      "name": "chat",
+      "version": "v1",
+      "title": "Hangouts Chat API",
+      "description": "Create bots and extend the new Hangouts Chat.",
+      "discoveryRestUrl": "https://chat.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/hangouts/chat",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "civicinfo:v2",
+      "name": "civicinfo",
+      "version": "v2",
+      "title": "Google Civic Information API",
+      "description": "Provides polling places, early vote locations, contest data, election officials, and government representatives for U.S. residential addresses.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/civicinfo/v2/rest",
+      "discoveryLink": "./apis/civicinfo/v2/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/civic-information",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "classroom:v1",
+      "name": "classroom",
+      "version": "v1",
+      "title": "Google Classroom API",
+      "description": "Manages classes, rosters, and invitations in Google Classroom.",
+      "discoveryRestUrl": "https://classroom.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/classroom",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "cloudasset:v1",
+      "name": "cloudasset",
+      "version": "v1",
+      "title": "Cloud Asset API",
+      "description": "The cloud asset API manages the history and inventory of cloud resources.",
+      "discoveryRestUrl": "https://cloudasset.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/quickstart-cloud-asset-inventory",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "cloudasset:v1beta1",
+      "name": "cloudasset",
+      "version": "v1beta1",
+      "title": "Cloud Asset API",
+      "description": "The cloud asset API manages the history and inventory of cloud resources.",
+      "discoveryRestUrl": "https://cloudasset.googleapis.com/$discovery/rest?version=v1beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/resource-manager/docs/cloud-asset-inventory/quickstart-cloud-asset-inventory",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "cloudbilling:v1",
+      "name": "cloudbilling",
+      "version": "v1",
+      "title": "Cloud Billing API",
+      "description": "Allows developers to manage billing for their Google Cloud Platform projects programmatically.",
+      "discoveryRestUrl": "https://cloudbilling.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/billing/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "cloudbuild:v1alpha1",
+      "name": "cloudbuild",
+      "version": "v1alpha1",
+      "title": "Cloud Build API",
+      "description": "Creates and manages builds on Google Cloud Platform.",
+      "discoveryRestUrl": "https://cloudbuild.googleapis.com/$discovery/rest?version=v1alpha1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/cloud-build/docs/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "cloudbuild:v1",
+      "name": "cloudbuild",
+      "version": "v1",
+      "title": "Cloud Build API",
+      "description": "Creates and manages builds on Google Cloud Platform.",
+      "discoveryRestUrl": "https://cloudbuild.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/cloud-build/docs/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "clouddebugger:v2",
+      "name": "clouddebugger",
+      "version": "v2",
+      "title": "Stackdriver Debugger API",
+      "description": "Examines the call stack and variables of a running application without stopping or slowing it down.",
+      "discoveryRestUrl": "https://clouddebugger.googleapis.com/$discovery/rest?version=v2",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/debugger",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "clouderrorreporting:v1beta1",
+      "name": "clouderrorreporting",
+      "version": "v1beta1",
+      "title": "Stackdriver Error Reporting API",
+      "description": "Groups and counts similar errors from cloud services and applications, reports new errors, and provides access to error groups and their associated errors.",
+      "discoveryRestUrl": "https://clouderrorreporting.googleapis.com/$discovery/rest?version=v1beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/error-reporting/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "cloudfunctions:v1",
+      "name": "cloudfunctions",
+      "version": "v1",
+      "title": "Cloud Functions API",
+      "description": "Manages lightweight user-provided functions executed in response to events.",
+      "discoveryRestUrl": "https://cloudfunctions.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/functions",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "cloudfunctions:v1beta2",
+      "name": "cloudfunctions",
+      "version": "v1beta2",
+      "title": "Cloud Functions API",
+      "description": "Manages lightweight user-provided functions executed in response to events.",
+      "discoveryRestUrl": "https://cloudfunctions.googleapis.com/$discovery/rest?version=v1beta2",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/functions",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "cloudidentity:v1",
+      "name": "cloudidentity",
+      "version": "v1",
+      "title": "Cloud Identity API",
+      "description": "API for provisioning and managing identity resources.",
+      "discoveryRestUrl": "https://cloudidentity.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/identity/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "cloudidentity:v1beta1",
+      "name": "cloudidentity",
+      "version": "v1beta1",
+      "title": "Cloud Identity API",
+      "description": "API for provisioning and managing identity resources.",
+      "discoveryRestUrl": "https://cloudidentity.googleapis.com/$discovery/rest?version=v1beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/identity/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "cloudiot:v1alpha1",
+      "name": "cloudiot",
+      "version": "v1alpha1",
+      "title": "Cloud IoT API",
+      "description": "Registers and manages IoT (Internet of Things) devices that connect to the Google Cloud Platform.",
+      "discoveryRestUrl": "https://cloudiot.googleapis.com/$discovery/rest?version=v1alpha1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/iot",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "cloudiot:v1",
+      "name": "cloudiot",
+      "version": "v1",
+      "title": "Cloud IoT API",
+      "description": "Registers and manages IoT (Internet of Things) devices that connect to the Google Cloud Platform.",
+      "discoveryRestUrl": "https://cloudiot.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/iot",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "cloudkms:v1",
+      "name": "cloudkms",
+      "version": "v1",
+      "title": "Cloud Key Management Service (KMS) API",
+      "description": "Manages keys and performs cryptographic operations in a central cloud service, for direct use by other cloud resources and applications.",
+      "discoveryRestUrl": "https://cloudkms.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/kms/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "cloudprivatecatalog:v1beta1",
+      "name": "cloudprivatecatalog",
+      "version": "v1beta1",
+      "title": "Cloud Private Catalog API",
+      "description": "Enable cloud users to discover enterprise catalogs and products in their organizations.",
+      "discoveryRestUrl": "https://cloudprivatecatalog.googleapis.com/$discovery/rest?version=v1beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/private-catalog/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "cloudprivatecatalogproducer:v1beta1",
+      "name": "cloudprivatecatalogproducer",
+      "version": "v1beta1",
+      "title": "Cloud Private Catalog Producer API",
+      "description": "Enables cloud users to manage and share enterprise catalogs intheir organizations.",
+      "discoveryRestUrl": "https://cloudprivatecatalogproducer.googleapis.com/$discovery/rest?version=v1beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/private-catalog/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "cloudprofiler:v2",
+      "name": "cloudprofiler",
+      "version": "v2",
+      "title": "Stackdriver Profiler API",
+      "description": "Manages continuous profiling information.",
+      "discoveryRestUrl": "https://cloudprofiler.googleapis.com/$discovery/rest?version=v2",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/profiler/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "cloudresourcemanager:v1",
+      "name": "cloudresourcemanager",
+      "version": "v1",
+      "title": "Cloud Resource Manager API",
+      "description": "Creates, reads, and updates metadata for Google Cloud Platform resource containers.",
+      "discoveryRestUrl": "https://cloudresourcemanager.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/resource-manager",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "cloudresourcemanager:v1beta1",
+      "name": "cloudresourcemanager",
+      "version": "v1beta1",
+      "title": "Cloud Resource Manager API",
+      "description": "Creates, reads, and updates metadata for Google Cloud Platform resource containers.",
+      "discoveryRestUrl": "https://cloudresourcemanager.googleapis.com/$discovery/rest?version=v1beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/resource-manager",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "cloudresourcemanager:v2",
+      "name": "cloudresourcemanager",
+      "version": "v2",
+      "title": "Cloud Resource Manager API",
+      "description": "Creates, reads, and updates metadata for Google Cloud Platform resource containers.",
+      "discoveryRestUrl": "https://cloudresourcemanager.googleapis.com/$discovery/rest?version=v2",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/resource-manager",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "cloudresourcemanager:v2beta1",
+      "name": "cloudresourcemanager",
+      "version": "v2beta1",
+      "title": "Cloud Resource Manager API",
+      "description": "Creates, reads, and updates metadata for Google Cloud Platform resource containers.",
+      "discoveryRestUrl": "https://cloudresourcemanager.googleapis.com/$discovery/rest?version=v2beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/resource-manager",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "cloudscheduler:v1",
+      "name": "cloudscheduler",
+      "version": "v1",
+      "title": "Cloud Scheduler API",
+      "description": "Creates and manages jobs run on a regular recurring schedule.",
+      "discoveryRestUrl": "https://cloudscheduler.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/scheduler/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "cloudscheduler:v1beta1",
+      "name": "cloudscheduler",
+      "version": "v1beta1",
+      "title": "Cloud Scheduler API",
+      "description": "Creates and manages jobs run on a regular recurring schedule.",
+      "discoveryRestUrl": "https://cloudscheduler.googleapis.com/$discovery/rest?version=v1beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/scheduler/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "cloudsearch:v1",
+      "name": "cloudsearch",
+      "version": "v1",
+      "title": "Cloud Search API",
+      "description": "Cloud Search provides cloud-based search capabilities over G Suite data. The Cloud Search API allows indexing of non-G Suite data into Cloud Search.",
+      "discoveryRestUrl": "https://cloudsearch.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/cloud-search/docs/guides/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "cloudshell:v1alpha1",
+      "name": "cloudshell",
+      "version": "v1alpha1",
+      "title": "Cloud Shell API",
+      "description": "Allows users to start, configure, and connect to interactive shell sessions running in the cloud.",
+      "discoveryRestUrl": "https://cloudshell.googleapis.com/$discovery/rest?version=v1alpha1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/shell/docs/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "cloudshell:v1",
+      "name": "cloudshell",
+      "version": "v1",
+      "title": "Cloud Shell API",
+      "description": "Allows users to start, configure, and connect to interactive shell sessions running in the cloud.",
+      "discoveryRestUrl": "https://cloudshell.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/shell/docs/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "cloudtasks:v2",
+      "name": "cloudtasks",
+      "version": "v2",
+      "title": "Cloud Tasks API",
+      "description": "Manages the execution of large numbers of distributed requests.",
+      "discoveryRestUrl": "https://cloudtasks.googleapis.com/$discovery/rest?version=v2",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/tasks/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "cloudtasks:v2beta2",
+      "name": "cloudtasks",
+      "version": "v2beta2",
+      "title": "Cloud Tasks API",
+      "description": "Manages the execution of large numbers of distributed requests.",
+      "discoveryRestUrl": "https://cloudtasks.googleapis.com/$discovery/rest?version=v2beta2",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/tasks/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "cloudtasks:v2beta3",
+      "name": "cloudtasks",
+      "version": "v2beta3",
+      "title": "Cloud Tasks API",
+      "description": "Manages the execution of large numbers of distributed requests.",
+      "discoveryRestUrl": "https://cloudtasks.googleapis.com/$discovery/rest?version=v2beta3",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/tasks/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "cloudtrace:v2alpha1",
+      "name": "cloudtrace",
+      "version": "v2alpha1",
+      "title": "Stackdriver Trace API",
+      "description": "Sends application trace data to Stackdriver Trace for viewing. Trace data is collected for all App Engine applications by default. Trace data from other applications can be provided using this API. This library is used to interact with the Trace API directly. If you are looking to instrument your application for Stackdriver Trace, we recommend using OpenCensus.",
+      "discoveryRestUrl": "https://cloudtrace.googleapis.com/$discovery/rest?version=v2alpha1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/trace",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "cloudtrace:v1",
+      "name": "cloudtrace",
+      "version": "v1",
+      "title": "Stackdriver Trace API",
+      "description": "Sends application trace data to Stackdriver Trace for viewing. Trace data is collected for all App Engine applications by default. Trace data from other applications can be provided using this API. This library is used to interact with the Trace API directly. If you are looking to instrument your application for Stackdriver Trace, we recommend using OpenCensus.",
+      "discoveryRestUrl": "https://cloudtrace.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/trace",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "cloudtrace:v2",
+      "name": "cloudtrace",
+      "version": "v2",
+      "title": "Stackdriver Trace API",
+      "description": "Sends application trace data to Stackdriver Trace for viewing. Trace data is collected for all App Engine applications by default. Trace data from other applications can be provided using this API. This library is used to interact with the Trace API directly. If you are looking to instrument your application for Stackdriver Trace, we recommend using OpenCensus.",
+      "discoveryRestUrl": "https://cloudtrace.googleapis.com/$discovery/rest?version=v2",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/trace",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "commentanalyzer:v1alpha1",
+      "name": "commentanalyzer",
+      "version": "v1alpha1",
+      "title": "Perspective Comment Analyzer API",
+      "description": "The Perspective Comment Analyzer API provides information about the potential impact of a comment on a conversation (e.g. it can provide a score for the \"toxicity\" of a comment). Users can leverage the \"SuggestCommentScore\" method to submit corrections to improve Perspective over time. Users can set the \"doNotStore\" flag to ensure that all submitted comments are automatically deleted after scores are returned.",
+      "discoveryRestUrl": "https://commentanalyzer.googleapis.com/$discovery/rest?version=v1alpha1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://github.com/conversationai/perspectiveapi/blob/master/README.md",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "composer:v1",
+      "name": "composer",
+      "version": "v1",
+      "title": "Cloud Composer API",
+      "description": "Manages Apache Airflow environments on Google Cloud Platform.",
+      "discoveryRestUrl": "https://composer.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/composer/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "composer:v1beta1",
+      "name": "composer",
+      "version": "v1beta1",
+      "title": "Cloud Composer API",
+      "description": "Manages Apache Airflow environments on Google Cloud Platform.",
+      "discoveryRestUrl": "https://composer.googleapis.com/$discovery/rest?version=v1beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/composer/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "compute:alpha",
+      "name": "compute",
+      "version": "alpha",
+      "title": "Compute Engine API",
+      "description": "Creates and runs virtual machines on Google Cloud Platform.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/compute/alpha/rest",
+      "discoveryLink": "./apis/compute/alpha/rest",
+      "icons": {
+        "x16": "https://www.google.com/images/icons/product/compute_engine-16.png",
+        "x32": "https://www.google.com/images/icons/product/compute_engine-32.png"
+      },
+      "documentationLink": "https://developers.google.com/compute/docs/reference/latest/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "compute:beta",
+      "name": "compute",
+      "version": "beta",
+      "title": "Compute Engine API",
+      "description": "Creates and runs virtual machines on Google Cloud Platform.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/compute/beta/rest",
+      "discoveryLink": "./apis/compute/beta/rest",
+      "icons": {
+        "x16": "https://www.google.com/images/icons/product/compute_engine-16.png",
+        "x32": "https://www.google.com/images/icons/product/compute_engine-32.png"
+      },
+      "documentationLink": "https://developers.google.com/compute/docs/reference/latest/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "compute:v1",
+      "name": "compute",
+      "version": "v1",
+      "title": "Compute Engine API",
+      "description": "Creates and runs virtual machines on Google Cloud Platform.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/compute/v1/rest",
+      "discoveryLink": "./apis/compute/v1/rest",
+      "icons": {
+        "x16": "https://www.google.com/images/icons/product/compute_engine-16.png",
+        "x32": "https://www.google.com/images/icons/product/compute_engine-32.png"
+      },
+      "documentationLink": "https://developers.google.com/compute/docs/reference/latest/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "container:v1",
+      "name": "container",
+      "version": "v1",
+      "title": "Kubernetes Engine API",
+      "description": "Builds and manages container-based applications, powered by the open source Kubernetes technology.",
+      "discoveryRestUrl": "https://container.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/container-engine/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "container:v1beta1",
+      "name": "container",
+      "version": "v1beta1",
+      "title": "Kubernetes Engine API",
+      "description": "Builds and manages container-based applications, powered by the open source Kubernetes technology.",
+      "discoveryRestUrl": "https://container.googleapis.com/$discovery/rest?version=v1beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/container-engine/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "containeranalysis:v1alpha1",
+      "name": "containeranalysis",
+      "version": "v1alpha1",
+      "title": "Container Analysis API",
+      "description": "An implementation of the Grafeas API, which stores, and enables querying and retrieval of critical metadata about all of your software artifacts.",
+      "discoveryRestUrl": "https://containeranalysis.googleapis.com/$discovery/rest?version=v1alpha1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/container-analysis/api/reference/rest/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "containeranalysis:v1beta1",
+      "name": "containeranalysis",
+      "version": "v1beta1",
+      "title": "Container Analysis API",
+      "description": "An implementation of the Grafeas API, which stores, and enables querying and retrieval of critical metadata about all of your software artifacts.",
+      "discoveryRestUrl": "https://containeranalysis.googleapis.com/$discovery/rest?version=v1beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/container-analysis/api/reference/rest/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "content:v2",
+      "name": "content",
+      "version": "v2",
+      "title": "Content API for Shopping",
+      "description": "Manages product items, inventory, and Merchant Center accounts for Google Shopping.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/content/v2/rest",
+      "discoveryLink": "./apis/content/v2/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/shopping-content",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "content:v2.1",
+      "name": "content",
+      "version": "v2.1",
+      "title": "Content API for Shopping",
+      "description": "Manages product items, inventory, and Merchant Center accounts for Google Shopping.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/content/v2.1/rest",
+      "discoveryLink": "./apis/content/v2.1/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/shopping-content",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "customsearch:v1",
+      "name": "customsearch",
+      "version": "v1",
+      "title": "CustomSearch API",
+      "description": "Searches over a website or collection of websites",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/customsearch/v1/rest",
+      "discoveryLink": "./apis/customsearch/v1/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/custom-search/v1/using_rest",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "dataflow:v1b3",
+      "name": "dataflow",
+      "version": "v1b3",
+      "title": "Dataflow API",
+      "description": "Manages Google Cloud Dataflow projects on Google Cloud Platform.",
+      "discoveryRestUrl": "https://dataflow.googleapis.com/$discovery/rest?version=v1b3",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/dataflow",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "datafusion:v1beta1",
+      "name": "datafusion",
+      "version": "v1beta1",
+      "title": "Cloud Data Fusion API",
+      "description": "Cloud Data Fusion is a fully-managed, cloud native, enterprise data integration service for quickly building and managing data pipelines. It provides a graphical interface to increase time efficiency and reduce complexity, and allows business users, developers, and data scientists to easily and reliably build scalable data integration solutions to cleanse, prepare, blend, transfer and transform data without having to wrestle with infrastructure.",
+      "discoveryRestUrl": "https://datafusion.googleapis.com/$discovery/rest?version=v1beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/data-fusion/docs",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "dataproc:v1",
+      "name": "dataproc",
+      "version": "v1",
+      "title": "Cloud Dataproc API",
+      "description": "Manages Hadoop-based clusters and jobs on Google Cloud Platform.",
+      "discoveryRestUrl": "https://dataproc.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/dataproc/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "dataproc:v1beta2",
+      "name": "dataproc",
+      "version": "v1beta2",
+      "title": "Cloud Dataproc API",
+      "description": "Manages Hadoop-based clusters and jobs on Google Cloud Platform.",
+      "discoveryRestUrl": "https://dataproc.googleapis.com/$discovery/rest?version=v1beta2",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/dataproc/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "datastore:v1",
+      "name": "datastore",
+      "version": "v1",
+      "title": "Cloud Datastore API",
+      "description": "Accesses the schemaless NoSQL database to provide fully managed, robust, scalable storage for your application.",
+      "discoveryRestUrl": "https://datastore.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/datastore/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "datastore:v1beta1",
+      "name": "datastore",
+      "version": "v1beta1",
+      "title": "Cloud Datastore API",
+      "description": "Accesses the schemaless NoSQL database to provide fully managed, robust, scalable storage for your application.",
+      "discoveryRestUrl": "https://datastore.googleapis.com/$discovery/rest?version=v1beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/datastore/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "datastore:v1beta3",
+      "name": "datastore",
+      "version": "v1beta3",
+      "title": "Cloud Datastore API",
+      "description": "Accesses the schemaless NoSQL database to provide fully managed, robust, scalable storage for your application.",
+      "discoveryRestUrl": "https://datastore.googleapis.com/$discovery/rest?version=v1beta3",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/datastore/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "deploymentmanager:alpha",
+      "name": "deploymentmanager",
+      "version": "alpha",
+      "title": "Google Cloud Deployment Manager Alpha API",
+      "description": "The Deployment Manager API allows users to declaratively configure, deploy and run complex solutions on the Google Cloud Platform.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/deploymentmanager/alpha/rest",
+      "discoveryLink": "./apis/deploymentmanager/alpha/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/deployment-manager/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "deploymentmanager:v2beta",
+      "name": "deploymentmanager",
+      "version": "v2beta",
+      "title": "Google Cloud Deployment Manager API V2Beta Methods",
+      "description": "The Deployment Manager API allows users to declaratively configure, deploy and run complex solutions on the Google Cloud Platform.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/deploymentmanager/v2beta/rest",
+      "discoveryLink": "./apis/deploymentmanager/v2beta/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/deployment-manager/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "deploymentmanager:v2",
+      "name": "deploymentmanager",
+      "version": "v2",
+      "title": "Google Cloud Deployment Manager API",
+      "description": "Declares, configures, and deploys complex solutions on Google Cloud Platform.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/deploymentmanager/v2/rest",
+      "discoveryLink": "./apis/deploymentmanager/v2/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/deployment-manager/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "dfareporting:v3.1",
+      "name": "dfareporting",
+      "version": "v3.1",
+      "title": "DCM/DFA Reporting And Trafficking API",
+      "description": "Manages your DoubleClick Campaign Manager ad campaigns and reports.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/dfareporting/v3.1/rest",
+      "discoveryLink": "./apis/dfareporting/v3.1/rest",
+      "icons": {
+        "x16": "https://www.google.com/images/icons/product/doubleclick-16.gif",
+        "x32": "https://www.google.com/images/icons/product/doubleclick-32.gif"
+      },
+      "documentationLink": "https://developers.google.com/doubleclick-advertisers/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "dfareporting:v3.2",
+      "name": "dfareporting",
+      "version": "v3.2",
+      "title": "DCM/DFA Reporting And Trafficking API",
+      "description": "Manages your DoubleClick Campaign Manager ad campaigns and reports.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/dfareporting/v3.2/rest",
+      "discoveryLink": "./apis/dfareporting/v3.2/rest",
+      "icons": {
+        "x16": "https://www.google.com/images/icons/product/doubleclick-16.gif",
+        "x32": "https://www.google.com/images/icons/product/doubleclick-32.gif"
+      },
+      "documentationLink": "https://developers.google.com/doubleclick-advertisers/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "dfareporting:v3.3",
+      "name": "dfareporting",
+      "version": "v3.3",
+      "title": "DCM/DFA Reporting And Trafficking API",
+      "description": "Manages your DoubleClick Campaign Manager ad campaigns and reports.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/dfareporting/v3.3/rest",
+      "discoveryLink": "./apis/dfareporting/v3.3/rest",
+      "icons": {
+        "x16": "https://www.google.com/images/icons/product/doubleclick-16.gif",
+        "x32": "https://www.google.com/images/icons/product/doubleclick-32.gif"
+      },
+      "documentationLink": "https://developers.google.com/doubleclick-advertisers/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "dialogflow:v2",
+      "name": "dialogflow",
+      "version": "v2",
+      "title": "Dialogflow API",
+      "description": "Builds conversational interfaces (for example, chatbots, and voice-powered apps and devices).",
+      "discoveryRestUrl": "https://dialogflow.googleapis.com/$discovery/rest?version=v2",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/dialogflow/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "dialogflow:v2beta1",
+      "name": "dialogflow",
+      "version": "v2beta1",
+      "title": "Dialogflow API",
+      "description": "Builds conversational interfaces (for example, chatbots, and voice-powered apps and devices).",
+      "discoveryRestUrl": "https://dialogflow.googleapis.com/$discovery/rest?version=v2beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/dialogflow/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "digitalassetlinks:v1",
+      "name": "digitalassetlinks",
+      "version": "v1",
+      "title": "Digital Asset Links API",
+      "description": "Discovers relationships between online assets such as websites or mobile apps.",
+      "discoveryRestUrl": "https://digitalassetlinks.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/digital-asset-links/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "discovery:v1",
+      "name": "discovery",
+      "version": "v1",
+      "title": "API Discovery Service",
+      "description": "Provides information about other Google APIs, such as what APIs are available, the resource, and method details for each API.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/discovery/v1/rest",
+      "discoveryLink": "./apis/discovery/v1/rest",
+      "icons": {
+        "x16": "http://www.google.com/images/icons/feature/filing_cabinet_search-g16.png",
+        "x32": "http://www.google.com/images/icons/feature/filing_cabinet_search-g32.png"
+      },
+      "documentationLink": "https://developers.google.com/discovery/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "dlp:v2",
+      "name": "dlp",
+      "version": "v2",
+      "title": "Cloud Data Loss Prevention (DLP) API",
+      "description": "Provides methods for detection, risk analysis, and de-identification of privacy-sensitive fragments in text, images, and Google Cloud Platform storage repositories.",
+      "discoveryRestUrl": "https://dlp.googleapis.com/$discovery/rest?version=v2",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/dlp/docs/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "dns:v1",
+      "name": "dns",
+      "version": "v1",
+      "title": "Google Cloud DNS API",
+      "description": "Configures and serves authoritative DNS records.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/dns/v1/rest",
+      "discoveryLink": "./apis/dns/v1/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/cloud-dns",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "dns:v1beta2",
+      "name": "dns",
+      "version": "v1beta2",
+      "title": "Google Cloud DNS API",
+      "description": "Configures and serves authoritative DNS records.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/dns/v1beta2/rest",
+      "discoveryLink": "./apis/dns/v1beta2/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/cloud-dns",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "dns:v2beta1",
+      "name": "dns",
+      "version": "v2beta1",
+      "title": "Google Cloud DNS API",
+      "description": "Configures and serves authoritative DNS records.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/dns/v2beta1/rest",
+      "discoveryLink": "./apis/dns/v2beta1/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/cloud-dns",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "docs:v1",
+      "name": "docs",
+      "version": "v1",
+      "title": "Google Docs API",
+      "description": "Reads and writes Google Docs documents.",
+      "discoveryRestUrl": "https://docs.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/docs/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "doubleclickbidmanager:v1",
+      "name": "doubleclickbidmanager",
+      "version": "v1",
+      "title": "DoubleClick Bid Manager API",
+      "description": "API for viewing and managing your reports in DoubleClick Bid Manager.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/doubleclickbidmanager/v1/rest",
+      "discoveryLink": "./apis/doubleclickbidmanager/v1/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/bid-manager/",
+      "labels": [
+        "limited_availability"
+      ],
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "doubleclicksearch:v2",
+      "name": "doubleclicksearch",
+      "version": "v2",
+      "title": "DoubleClick Search API",
+      "description": "Reports and modifies your advertising data in DoubleClick Search (for example, campaigns, ad groups, keywords, and conversions).",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/doubleclicksearch/v2/rest",
+      "discoveryLink": "./apis/doubleclicksearch/v2/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/doubleclick-search/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "drive:v2",
+      "name": "drive",
+      "version": "v2",
+      "title": "Drive API",
+      "description": "Manages files in Drive including uploading, downloading, searching, detecting changes, and updating sharing permissions.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/drive/v2/rest",
+      "discoveryLink": "./apis/drive/v2/rest",
+      "icons": {
+        "x16": "https://ssl.gstatic.com/docs/doclist/images/drive_icon_16.png",
+        "x32": "https://ssl.gstatic.com/docs/doclist/images/drive_icon_32.png"
+      },
+      "documentationLink": "https://developers.google.com/drive/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "drive:v3",
+      "name": "drive",
+      "version": "v3",
+      "title": "Drive API",
+      "description": "Manages files in Drive including uploading, downloading, searching, detecting changes, and updating sharing permissions.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/drive/v3/rest",
+      "discoveryLink": "./apis/drive/v3/rest",
+      "icons": {
+        "x16": "https://ssl.gstatic.com/docs/doclist/images/drive_icon_16.png",
+        "x32": "https://ssl.gstatic.com/docs/doclist/images/drive_icon_32.png"
+      },
+      "documentationLink": "https://developers.google.com/drive/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "driveactivity:v2",
+      "name": "driveactivity",
+      "version": "v2",
+      "title": "Drive Activity API",
+      "description": "Provides a historical view of activity in Google Drive.",
+      "discoveryRestUrl": "https://driveactivity.googleapis.com/$discovery/rest?version=v2",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/drive/activity/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "factchecktools:v1alpha1",
+      "name": "factchecktools",
+      "version": "v1alpha1",
+      "title": "Fact Check Tools API",
+      "description": "",
+      "discoveryRestUrl": "https://factchecktools.googleapis.com/$discovery/rest?version=v1alpha1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/fact-check/tools/api/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "fcm:v1",
+      "name": "fcm",
+      "version": "v1",
+      "title": "Firebase Cloud Messaging API",
+      "description": "FCM send API that provides a cross-platform messaging solution to reliably deliver messages at no cost.",
+      "discoveryRestUrl": "https://fcm.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://firebase.google.com/docs/cloud-messaging",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "file:v1",
+      "name": "file",
+      "version": "v1",
+      "title": "Cloud Filestore API",
+      "description": "The Cloud Filestore API is used for creating and managing cloud file servers.",
+      "discoveryRestUrl": "https://file.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/filestore/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "file:v1beta1",
+      "name": "file",
+      "version": "v1beta1",
+      "title": "Cloud Filestore API",
+      "description": "The Cloud Filestore API is used for creating and managing cloud file servers.",
+      "discoveryRestUrl": "https://file.googleapis.com/$discovery/rest?version=v1beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/filestore/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "firebase:v1beta1",
+      "name": "firebase",
+      "version": "v1beta1",
+      "title": "Firebase Management API",
+      "description": "The Firebase Management API enables programmatic setup and management of Firebase projects, including a project's Firebase resources and Firebase apps.",
+      "discoveryRestUrl": "https://firebase.googleapis.com/$discovery/rest?version=v1beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://firebase.google.com",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "firebasedynamiclinks:v1",
+      "name": "firebasedynamiclinks",
+      "version": "v1",
+      "title": "Firebase Dynamic Links API",
+      "description": "Programmatically creates and manages Firebase Dynamic Links.",
+      "discoveryRestUrl": "https://firebasedynamiclinks.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://firebase.google.com/docs/dynamic-links/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "firebasehosting:v1beta1",
+      "name": "firebasehosting",
+      "version": "v1beta1",
+      "title": "Firebase Hosting API",
+      "description": "",
+      "discoveryRestUrl": "https://firebasehosting.googleapis.com/$discovery/rest?version=v1beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://firebase.google.com/docs/hosting/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "firebaserules:v1",
+      "name": "firebaserules",
+      "version": "v1",
+      "title": "Firebase Rules API",
+      "description": "Creates and manages rules that determine when a Firebase Rules-enabled service should permit a request.",
+      "discoveryRestUrl": "https://firebaserules.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://firebase.google.com/docs/storage/security",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "firestore:v1",
+      "name": "firestore",
+      "version": "v1",
+      "title": "Cloud Firestore API",
+      "description": "Accesses the NoSQL document database built for automatic scaling, high performance, and ease of application development.",
+      "discoveryRestUrl": "https://firestore.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/firestore",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "firestore:v1beta1",
+      "name": "firestore",
+      "version": "v1beta1",
+      "title": "Cloud Firestore API",
+      "description": "Accesses the NoSQL document database built for automatic scaling, high performance, and ease of application development.",
+      "discoveryRestUrl": "https://firestore.googleapis.com/$discovery/rest?version=v1beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/firestore",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "firestore:v1beta2",
+      "name": "firestore",
+      "version": "v1beta2",
+      "title": "Cloud Firestore API",
+      "description": "Accesses the NoSQL document database built for automatic scaling, high performance, and ease of application development.",
+      "discoveryRestUrl": "https://firestore.googleapis.com/$discovery/rest?version=v1beta2",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/firestore",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "fitness:v1",
+      "name": "fitness",
+      "version": "v1",
+      "title": "Fitness",
+      "description": "Stores and accesses user data in the fitness store from apps on any platform.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/fitness/v1/rest",
+      "discoveryLink": "./apis/fitness/v1/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/fit/rest/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "fusiontables:v1",
+      "name": "fusiontables",
+      "version": "v1",
+      "title": "Fusion Tables API",
+      "description": "API for working with Fusion Tables data.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/fusiontables/v1/rest",
+      "discoveryLink": "./apis/fusiontables/v1/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/fusiontables",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "fusiontables:v2",
+      "name": "fusiontables",
+      "version": "v2",
+      "title": "Fusion Tables API",
+      "description": "API for working with Fusion Tables data.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/fusiontables/v2/rest",
+      "discoveryLink": "./apis/fusiontables/v2/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/fusiontables",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "games:v1",
+      "name": "games",
+      "version": "v1",
+      "title": "Google Play Game Services API",
+      "description": "The API for Google Play Game Services.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/games/v1/rest",
+      "discoveryLink": "./apis/games/v1/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/games/services/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "gamesConfiguration:v1configuration",
+      "name": "gamesConfiguration",
+      "version": "v1configuration",
+      "title": "Google Play Game Services Publishing API",
+      "description": "The Publishing API for Google Play Game Services.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/gamesConfiguration/v1configuration/rest",
+      "discoveryLink": "./apis/gamesConfiguration/v1configuration/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/games/services",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "gamesManagement:v1management",
+      "name": "gamesManagement",
+      "version": "v1management",
+      "title": "Google Play Game Services Management API",
+      "description": "The Management API for Google Play Game Services.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/gamesManagement/v1management/rest",
+      "discoveryLink": "./apis/gamesManagement/v1management/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/games/services",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "genomics:v1alpha2",
+      "name": "genomics",
+      "version": "v1alpha2",
+      "title": "Genomics API",
+      "description": "Uploads, processes, queries, and searches Genomics data in the cloud.",
+      "discoveryRestUrl": "https://genomics.googleapis.com/$discovery/rest?version=v1alpha2",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/genomics",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "genomics:v2alpha1",
+      "name": "genomics",
+      "version": "v2alpha1",
+      "title": "Genomics API",
+      "description": "Uploads, processes, queries, and searches Genomics data in the cloud.",
+      "discoveryRestUrl": "https://genomics.googleapis.com/$discovery/rest?version=v2alpha1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/genomics",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "genomics:v1",
+      "name": "genomics",
+      "version": "v1",
+      "title": "Genomics API",
+      "description": "Uploads, processes, queries, and searches Genomics data in the cloud.",
+      "discoveryRestUrl": "https://genomics.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/genomics",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "gmail:v1",
+      "name": "gmail",
+      "version": "v1",
+      "title": "Gmail API",
+      "description": "Access Gmail mailboxes including sending user email.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/gmail/v1/rest",
+      "discoveryLink": "./apis/gmail/v1/rest",
+      "icons": {
+        "x16": "https://www.google.com/images/icons/product/googlemail-16.png",
+        "x32": "https://www.google.com/images/icons/product/googlemail-32.png"
+      },
+      "documentationLink": "https://developers.google.com/gmail/api/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "groupsmigration:v1",
+      "name": "groupsmigration",
+      "version": "v1",
+      "title": "Groups Migration API",
+      "description": "Groups Migration Api.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/groupsmigration/v1/rest",
+      "discoveryLink": "./apis/groupsmigration/v1/rest",
+      "icons": {
+        "x16": "https://www.google.com/images/icons/product/discussions-16.gif",
+        "x32": "https://www.google.com/images/icons/product/discussions-32.gif"
+      },
+      "documentationLink": "https://developers.google.com/google-apps/groups-migration/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "groupssettings:v1",
+      "name": "groupssettings",
+      "version": "v1",
+      "title": "Groups Settings API",
+      "description": "Manages permission levels and related settings of a group.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/groupssettings/v1/rest",
+      "discoveryLink": "./apis/groupssettings/v1/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/google-apps/groups-settings/get_started",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "healthcare:v1alpha2",
+      "name": "healthcare",
+      "version": "v1alpha2",
+      "title": "Cloud Healthcare API",
+      "description": "Manage, store, and access healthcare data in Google Cloud Platform.",
+      "discoveryRestUrl": "https://healthcare.googleapis.com/$discovery/rest?version=v1alpha2",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/healthcare",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "healthcare:v1beta1",
+      "name": "healthcare",
+      "version": "v1beta1",
+      "title": "Cloud Healthcare API",
+      "description": "Manage, store, and access healthcare data in Google Cloud Platform.",
+      "discoveryRestUrl": "https://healthcare.googleapis.com/$discovery/rest?version=v1beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/healthcare",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "iam:v1",
+      "name": "iam",
+      "version": "v1",
+      "title": "Identity and Access Management (IAM) API",
+      "description": "Manages identity and access control for Google Cloud Platform resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls.",
+      "discoveryRestUrl": "https://iam.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/iam/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "iamcredentials:v1",
+      "name": "iamcredentials",
+      "version": "v1",
+      "title": "IAM Service Account Credentials API",
+      "description": "Creates short-lived, limited-privilege credentials for IAM service accounts.",
+      "discoveryRestUrl": "https://iamcredentials.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/iam/docs/creating-short-lived-service-account-credentials",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "iap:v1",
+      "name": "iap",
+      "version": "v1",
+      "title": "Cloud Identity-Aware Proxy API",
+      "description": "Controls access to cloud applications running on Google Cloud Platform.",
+      "discoveryRestUrl": "https://iap.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/iap",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "iap:v1beta1",
+      "name": "iap",
+      "version": "v1beta1",
+      "title": "Cloud Identity-Aware Proxy API",
+      "description": "Controls access to cloud applications running on Google Cloud Platform.",
+      "discoveryRestUrl": "https://iap.googleapis.com/$discovery/rest?version=v1beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/iap",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "identitytoolkit:v3",
+      "name": "identitytoolkit",
+      "version": "v3",
+      "title": "Google Identity Toolkit API",
+      "description": "Help the third party sites to implement federated login.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/identitytoolkit/v3/rest",
+      "discoveryLink": "./apis/identitytoolkit/v3/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/identity-toolkit/v3/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "indexing:v3",
+      "name": "indexing",
+      "version": "v3",
+      "title": "Indexing API",
+      "description": "Notifies Google when your web pages change.",
+      "discoveryRestUrl": "https://indexing.googleapis.com/$discovery/rest?version=v3",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/search/apis/indexing-api/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "jobs:v3p1beta1",
+      "name": "jobs",
+      "version": "v3p1beta1",
+      "title": "Cloud Talent Solution API",
+      "description": "Cloud Talent Solution provides the capability to create, read, update, and delete job postings, as well as search jobs based on keywords and filters.",
+      "discoveryRestUrl": "https://jobs.googleapis.com/$discovery/rest?version=v3p1beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/talent-solution/job-search/docs/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "jobs:v2",
+      "name": "jobs",
+      "version": "v2",
+      "title": "Cloud Talent Solution API",
+      "description": "Cloud Talent Solution provides the capability to create, read, update, and delete job postings, as well as search jobs based on keywords and filters.",
+      "discoveryRestUrl": "https://jobs.googleapis.com/$discovery/rest?version=v2",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/talent-solution/job-search/docs/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "jobs:v3",
+      "name": "jobs",
+      "version": "v3",
+      "title": "Cloud Talent Solution API",
+      "description": "Cloud Talent Solution provides the capability to create, read, update, and delete job postings, as well as search jobs based on keywords and filters.",
+      "discoveryRestUrl": "https://jobs.googleapis.com/$discovery/rest?version=v3",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/talent-solution/job-search/docs/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "kgsearch:v1",
+      "name": "kgsearch",
+      "version": "v1",
+      "title": "Knowledge Graph Search API",
+      "description": "Searches the Google Knowledge Graph for entities.",
+      "discoveryRestUrl": "https://kgsearch.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/knowledge-graph/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "language:v1",
+      "name": "language",
+      "version": "v1",
+      "title": "Cloud Natural Language API",
+      "description": "Provides natural language understanding technologies, such as sentiment analysis, entity recognition, entity sentiment analysis, and other text annotations, to developers.",
+      "discoveryRestUrl": "https://language.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/natural-language/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "language:v1beta1",
+      "name": "language",
+      "version": "v1beta1",
+      "title": "Cloud Natural Language API",
+      "description": "Provides natural language understanding technologies, such as sentiment analysis, entity recognition, entity sentiment analysis, and other text annotations, to developers.",
+      "discoveryRestUrl": "https://language.googleapis.com/$discovery/rest?version=v1beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/natural-language/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "language:v1beta2",
+      "name": "language",
+      "version": "v1beta2",
+      "title": "Cloud Natural Language API",
+      "description": "Provides natural language understanding technologies, such as sentiment analysis, entity recognition, entity sentiment analysis, and other text annotations, to developers.",
+      "discoveryRestUrl": "https://language.googleapis.com/$discovery/rest?version=v1beta2",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/natural-language/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "libraryagent:v1",
+      "name": "libraryagent",
+      "version": "v1",
+      "title": "Library Agent API",
+      "description": "A simple Google Example Library API.",
+      "discoveryRestUrl": "https://libraryagent.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/docs/quota",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "licensing:v1",
+      "name": "licensing",
+      "version": "v1",
+      "title": "Enterprise License Manager API",
+      "description": "Views and manages licenses for your domain.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/licensing/v1/rest",
+      "discoveryLink": "./apis/licensing/v1/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/google-apps/licensing/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "logging:v2",
+      "name": "logging",
+      "version": "v2",
+      "title": "Stackdriver Logging API",
+      "description": "Writes log entries and manages your Stackdriver Logging configuration. The table entries below are presented in alphabetical order, not in order of common use. For explanations of the concepts found in the table entries, read the [Stackdriver Logging documentation](/logging/docs).",
+      "discoveryRestUrl": "https://logging.googleapis.com/$discovery/rest?version=v2",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/logging/docs/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "manufacturers:v1",
+      "name": "manufacturers",
+      "version": "v1",
+      "title": "Manufacturer Center API",
+      "description": "Public API for managing Manufacturer Center related data.",
+      "discoveryRestUrl": "https://manufacturers.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/manufacturers/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "mirror:v1",
+      "name": "mirror",
+      "version": "v1",
+      "title": "Google Mirror API",
+      "description": "Interacts with Glass users via the timeline.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/mirror/v1/rest",
+      "discoveryLink": "./apis/mirror/v1/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/glass",
+      "labels": [
+        "limited_availability"
+      ],
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "ml:v1",
+      "name": "ml",
+      "version": "v1",
+      "title": "Cloud Machine Learning Engine",
+      "description": "An API to enable creating and using machine learning models.",
+      "discoveryRestUrl": "https://ml.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/ml/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "monitoring:v3p1alpha1",
+      "name": "monitoring",
+      "version": "v3p1alpha1",
+      "title": "Stackdriver Monitoring API",
+      "description": "Manages your Stackdriver Monitoring data and configurations. Most projects must be associated with a Stackdriver account, with a few exceptions as noted on the individual method pages. The table entries below are presented in alphabetical order, not in order of common use. For explanations of the concepts found in the table entries, read the [Stackdriver Monitoring documentation](/monitoring/docs).",
+      "discoveryRestUrl": "https://monitoring.googleapis.com/$discovery/rest?version=v3p1alpha1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/monitoring/api/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "monitoring:v3",
+      "name": "monitoring",
+      "version": "v3",
+      "title": "Stackdriver Monitoring API",
+      "description": "Manages your Stackdriver Monitoring data and configurations. Most projects must be associated with a Stackdriver account, with a few exceptions as noted on the individual method pages. The table entries below are presented in alphabetical order, not in order of common use. For explanations of the concepts found in the table entries, read the [Stackdriver Monitoring documentation](/monitoring/docs).",
+      "discoveryRestUrl": "https://monitoring.googleapis.com/$discovery/rest?version=v3",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/monitoring/api/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "oauth2:v1",
+      "name": "oauth2",
+      "version": "v1",
+      "title": "Google OAuth2 API",
+      "description": "Obtains end-user authorization grants for use with other Google APIs.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/oauth2/v1/rest",
+      "discoveryLink": "./apis/oauth2/v1/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/accounts/docs/OAuth2",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "oauth2:v2",
+      "name": "oauth2",
+      "version": "v2",
+      "title": "Google OAuth2 API",
+      "description": "Obtains end-user authorization grants for use with other Google APIs.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/oauth2/v2/rest",
+      "discoveryLink": "./apis/oauth2/v2/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/accounts/docs/OAuth2",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "osconfig:v1alpha1",
+      "name": "osconfig",
+      "version": "v1alpha1",
+      "title": "Cloud OS Config API",
+      "description": "Manages OS configurations for GCE VM instances.",
+      "discoveryRestUrl": "https://osconfig.googleapis.com/$discovery/rest?version=v1alpha1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "osconfig:v1alpha2",
+      "name": "osconfig",
+      "version": "v1alpha2",
+      "title": "Cloud OS Config API",
+      "description": "Manages OS configurations for GCE VM instances.",
+      "discoveryRestUrl": "https://osconfig.googleapis.com/$discovery/rest?version=v1alpha2",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "oslogin:v1alpha",
+      "name": "oslogin",
+      "version": "v1alpha",
+      "title": "Cloud OS Login API",
+      "description": "Manages OS login configuration for Google account users.",
+      "discoveryRestUrl": "https://oslogin.googleapis.com/$discovery/rest?version=v1alpha",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/compute/docs/oslogin/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "oslogin:v1beta",
+      "name": "oslogin",
+      "version": "v1beta",
+      "title": "Cloud OS Login API",
+      "description": "Manages OS login configuration for Google account users.",
+      "discoveryRestUrl": "https://oslogin.googleapis.com/$discovery/rest?version=v1beta",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/compute/docs/oslogin/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "oslogin:v1",
+      "name": "oslogin",
+      "version": "v1",
+      "title": "Cloud OS Login API",
+      "description": "Manages OS login configuration for Google account users.",
+      "discoveryRestUrl": "https://oslogin.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/compute/docs/oslogin/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "pagespeedonline:v1",
+      "name": "pagespeedonline",
+      "version": "v1",
+      "title": "PageSpeed Insights API",
+      "description": "Analyzes the performance of a web page and provides tailored suggestions to make that page faster.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/pagespeedonline/v1/rest",
+      "discoveryLink": "./apis/pagespeedonline/v1/rest",
+      "icons": {
+        "x16": "https://www.google.com/images/icons/product/pagespeed-16.png",
+        "x32": "https://www.google.com/images/icons/product/pagespeed-32.png"
+      },
+      "documentationLink": "https://developers.google.com/speed/docs/insights/v1/getting_started",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "pagespeedonline:v2",
+      "name": "pagespeedonline",
+      "version": "v2",
+      "title": "PageSpeed Insights API",
+      "description": "Analyzes the performance of a web page and provides tailored suggestions to make that page faster.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/pagespeedonline/v2/rest",
+      "discoveryLink": "./apis/pagespeedonline/v2/rest",
+      "icons": {
+        "x16": "https://www.google.com/images/icons/product/pagespeed-16.png",
+        "x32": "https://www.google.com/images/icons/product/pagespeed-32.png"
+      },
+      "documentationLink": "https://developers.google.com/speed/docs/insights/v2/getting-started",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "pagespeedonline:v4",
+      "name": "pagespeedonline",
+      "version": "v4",
+      "title": "PageSpeed Insights API",
+      "description": "Analyzes the performance of a web page and provides tailored suggestions to make that page faster.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/pagespeedonline/v4/rest",
+      "discoveryLink": "./apis/pagespeedonline/v4/rest",
+      "icons": {
+        "x16": "https://www.google.com/images/icons/product/pagespeed-16.png",
+        "x32": "https://www.google.com/images/icons/product/pagespeed-32.png"
+      },
+      "documentationLink": "https://developers.google.com/speed/docs/insights/v4/getting-started",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "pagespeedonline:v5",
+      "name": "pagespeedonline",
+      "version": "v5",
+      "title": "PageSpeed Insights API",
+      "description": "Analyzes the performance of a web page and provides tailored suggestions to make that page faster.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/pagespeedonline/v5/rest",
+      "discoveryLink": "./apis/pagespeedonline/v5/rest",
+      "icons": {
+        "x16": "https://www.google.com/images/icons/product/pagespeed-16.png",
+        "x32": "https://www.google.com/images/icons/product/pagespeed-32.png"
+      },
+      "documentationLink": "https://developers.google.com/speed/docs/insights/v5/get-started",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "people:v1",
+      "name": "people",
+      "version": "v1",
+      "title": "People API",
+      "description": "Provides access to information about profiles and contacts.",
+      "discoveryRestUrl": "https://people.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/people/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "playcustomapp:v1",
+      "name": "playcustomapp",
+      "version": "v1",
+      "title": "Google Play Custom App Publishing API",
+      "description": "An API to publish custom Android apps.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/playcustomapp/v1/rest",
+      "discoveryLink": "./apis/playcustomapp/v1/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/android/work/play/custom-app-api",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "plus:v1",
+      "name": "plus",
+      "version": "v1",
+      "title": "Google+ API",
+      "description": "Builds on top of the Google+ platform.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/plus/v1/rest",
+      "discoveryLink": "./apis/plus/v1/rest",
+      "icons": {
+        "x16": "http://www.google.com/images/icons/product/gplus-16.png",
+        "x32": "http://www.google.com/images/icons/product/gplus-32.png"
+      },
+      "documentationLink": "https://developers.google.com/+/api/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "plusDomains:v1",
+      "name": "plusDomains",
+      "version": "v1",
+      "title": "Google+ Domains API",
+      "description": "Builds on top of the Google+ platform for Google Apps Domains.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/plusDomains/v1/rest",
+      "discoveryLink": "./apis/plusDomains/v1/rest",
+      "icons": {
+        "x16": "http://www.google.com/images/icons/product/gplus-16.png",
+        "x32": "http://www.google.com/images/icons/product/gplus-32.png"
+      },
+      "documentationLink": "https://developers.google.com/+/domains/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "poly:v1",
+      "name": "poly",
+      "version": "v1",
+      "title": "Poly API",
+      "description": "The Poly API provides read access to assets hosted on poly.google.com to all, and upload access to poly.google.com for whitelisted accounts.",
+      "discoveryRestUrl": "https://poly.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/poly/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "proximitybeacon:v1beta1",
+      "name": "proximitybeacon",
+      "version": "v1beta1",
+      "title": "Proximity Beacon API",
+      "description": "Registers, manages, indexes, and searches beacons.",
+      "discoveryRestUrl": "https://proximitybeacon.googleapis.com/$discovery/rest?version=v1beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/beacons/proximity/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "pubsub:v1beta1a",
+      "name": "pubsub",
+      "version": "v1beta1a",
+      "title": "Cloud Pub/Sub API",
+      "description": "Provides reliable, many-to-many, asynchronous messaging between applications.",
+      "discoveryRestUrl": "https://pubsub.googleapis.com/$discovery/rest?version=v1beta1a",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/pubsub/docs",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "pubsub:v1",
+      "name": "pubsub",
+      "version": "v1",
+      "title": "Cloud Pub/Sub API",
+      "description": "Provides reliable, many-to-many, asynchronous messaging between applications.",
+      "discoveryRestUrl": "https://pubsub.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/pubsub/docs",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "pubsub:v1beta2",
+      "name": "pubsub",
+      "version": "v1beta2",
+      "title": "Cloud Pub/Sub API",
+      "description": "Provides reliable, many-to-many, asynchronous messaging between applications.",
+      "discoveryRestUrl": "https://pubsub.googleapis.com/$discovery/rest?version=v1beta2",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/pubsub/docs",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "redis:v1",
+      "name": "redis",
+      "version": "v1",
+      "title": "Google Cloud Memorystore for Redis API",
+      "description": "Creates and manages Redis instances on the Google Cloud Platform.",
+      "discoveryRestUrl": "https://redis.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/memorystore/docs/redis/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "redis:v1beta1",
+      "name": "redis",
+      "version": "v1beta1",
+      "title": "Google Cloud Memorystore for Redis API",
+      "description": "Creates and manages Redis instances on the Google Cloud Platform.",
+      "discoveryRestUrl": "https://redis.googleapis.com/$discovery/rest?version=v1beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/memorystore/docs/redis/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "remotebuildexecution:v1alpha",
+      "name": "remotebuildexecution",
+      "version": "v1alpha",
+      "title": "Remote Build Execution API",
+      "description": "Supplies a Remote Execution API service for tools such as bazel.",
+      "discoveryRestUrl": "https://remotebuildexecution.googleapis.com/$discovery/rest?version=v1alpha",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/remote-build-execution/docs/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "remotebuildexecution:v1",
+      "name": "remotebuildexecution",
+      "version": "v1",
+      "title": "Remote Build Execution API",
+      "description": "Supplies a Remote Execution API service for tools such as bazel.",
+      "discoveryRestUrl": "https://remotebuildexecution.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/remote-build-execution/docs/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "remotebuildexecution:v2",
+      "name": "remotebuildexecution",
+      "version": "v2",
+      "title": "Remote Build Execution API",
+      "description": "Supplies a Remote Execution API service for tools such as bazel.",
+      "discoveryRestUrl": "https://remotebuildexecution.googleapis.com/$discovery/rest?version=v2",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/remote-build-execution/docs/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "replicapool:v1beta1",
+      "name": "replicapool",
+      "version": "v1beta1",
+      "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.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/replicapool/v1beta1/rest",
+      "discoveryLink": "./apis/replicapool/v1beta1/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/compute/docs/replica-pool/",
+      "labels": [
+        "limited_availability"
+      ],
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "reseller:v1",
+      "name": "reseller",
+      "version": "v1",
+      "title": "Enterprise Apps Reseller API",
+      "description": "Creates and manages your customers and their subscriptions.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/reseller/v1/rest",
+      "discoveryLink": "./apis/reseller/v1/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/google-apps/reseller/",
+      "labels": [
+        "limited_availability"
+      ],
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "run:v1alpha1",
+      "name": "run",
+      "version": "v1alpha1",
+      "title": "Cloud Run API",
+      "description": "Deploy and manage user provided container images that scale automatically based on HTTP traffic.",
+      "discoveryRestUrl": "https://run.googleapis.com/$discovery/rest?version=v1alpha1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/run/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "run:v1",
+      "name": "run",
+      "version": "v1",
+      "title": "Cloud Run API",
+      "description": "Deploy and manage user provided container images that scale automatically based on HTTP traffic.",
+      "discoveryRestUrl": "https://run.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/run/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "run:v1beta1",
+      "name": "run",
+      "version": "v1beta1",
+      "title": "Cloud Run API",
+      "description": "Deploy and manage user provided container images that scale automatically based on HTTP traffic.",
+      "discoveryRestUrl": "https://run.googleapis.com/$discovery/rest?version=v1beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/run/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "runtimeconfig:v1",
+      "name": "runtimeconfig",
+      "version": "v1",
+      "title": "Cloud Runtime Configuration API",
+      "description": "The Runtime Configurator allows you to dynamically configure and expose variables through Google Cloud Platform. In addition, you can also set Watchers and Waiters that will watch for changes to your data and return based on certain conditions.",
+      "discoveryRestUrl": "https://runtimeconfig.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/deployment-manager/runtime-configurator/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "runtimeconfig:v1beta1",
+      "name": "runtimeconfig",
+      "version": "v1beta1",
+      "title": "Cloud Runtime Configuration API",
+      "description": "The Runtime Configurator allows you to dynamically configure and expose variables through Google Cloud Platform. In addition, you can also set Watchers and Waiters that will watch for changes to your data and return based on certain conditions.",
+      "discoveryRestUrl": "https://runtimeconfig.googleapis.com/$discovery/rest?version=v1beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/deployment-manager/runtime-configurator/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "safebrowsing:v4",
+      "name": "safebrowsing",
+      "version": "v4",
+      "title": "Safe Browsing API",
+      "description": "Enables client applications to check web resources (most commonly URLs) against Google-generated lists of unsafe web resources.",
+      "discoveryRestUrl": "https://safebrowsing.googleapis.com/$discovery/rest?version=v4",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/safe-browsing/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "script:v1",
+      "name": "script",
+      "version": "v1",
+      "title": "Apps Script API",
+      "description": "Manages and executes Google Apps Script projects.",
+      "discoveryRestUrl": "https://script.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/apps-script/api/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "searchconsole:v1",
+      "name": "searchconsole",
+      "version": "v1",
+      "title": "Google Search Console URL Testing Tools API",
+      "description": "Provides tools for running validation tests against single URLs",
+      "discoveryRestUrl": "https://searchconsole.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/webmaster-tools/search-console-api/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "securitycenter:v1p1alpha1",
+      "name": "securitycenter",
+      "version": "v1p1alpha1",
+      "title": "Cloud Security Command Center API",
+      "description": "Cloud Security Command Center API provides access to temporal views of assets and findings within an organization.",
+      "discoveryRestUrl": "https://securitycenter.googleapis.com/$discovery/rest?version=v1p1alpha1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://console.cloud.google.com/apis/api/securitycenter.googleapis.com/overview",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "securitycenter:v1",
+      "name": "securitycenter",
+      "version": "v1",
+      "title": "Cloud Security Command Center API",
+      "description": "Cloud Security Command Center API provides access to temporal views of assets and findings within an organization.",
+      "discoveryRestUrl": "https://securitycenter.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://console.cloud.google.com/apis/api/securitycenter.googleapis.com/overview",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "securitycenter:v1beta1",
+      "name": "securitycenter",
+      "version": "v1beta1",
+      "title": "Cloud Security Command Center API",
+      "description": "Cloud Security Command Center API provides access to temporal views of assets and findings within an organization.",
+      "discoveryRestUrl": "https://securitycenter.googleapis.com/$discovery/rest?version=v1beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://console.cloud.google.com/apis/api/securitycenter.googleapis.com/overview",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "servicebroker:v1alpha1",
+      "name": "servicebroker",
+      "version": "v1alpha1",
+      "title": "Service Broker API",
+      "description": "The Google Cloud Platform Service Broker API provides Google hosted implementation of the Open Service Broker API (https://www.openservicebrokerapi.org/).",
+      "discoveryRestUrl": "https://servicebroker.googleapis.com/$discovery/rest?version=v1alpha1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/kubernetes-engine/docs/concepts/add-on/service-broker",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "servicebroker:v1",
+      "name": "servicebroker",
+      "version": "v1",
+      "title": "Service Broker API",
+      "description": "The Google Cloud Platform Service Broker API provides Google hosted implementation of the Open Service Broker API (https://www.openservicebrokerapi.org/).",
+      "discoveryRestUrl": "https://servicebroker.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/kubernetes-engine/docs/concepts/add-on/service-broker",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "servicebroker:v1beta1",
+      "name": "servicebroker",
+      "version": "v1beta1",
+      "title": "Service Broker API",
+      "description": "The Google Cloud Platform Service Broker API provides Google hosted implementation of the Open Service Broker API (https://www.openservicebrokerapi.org/).",
+      "discoveryRestUrl": "https://servicebroker.googleapis.com/$discovery/rest?version=v1beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/kubernetes-engine/docs/concepts/add-on/service-broker",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "serviceconsumermanagement:v1",
+      "name": "serviceconsumermanagement",
+      "version": "v1",
+      "title": "Service Consumer Management API",
+      "description": "Manages the service consumers of a Service Infrastructure service.",
+      "discoveryRestUrl": "https://serviceconsumermanagement.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/service-consumer-management/docs/overview",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "servicecontrol:v1",
+      "name": "servicecontrol",
+      "version": "v1",
+      "title": "Service Control API",
+      "description": "Provides control plane functionality to managed services, such as logging, monitoring, and status checks.",
+      "discoveryRestUrl": "https://servicecontrol.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/service-control/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "servicemanagement:v1",
+      "name": "servicemanagement",
+      "version": "v1",
+      "title": "Service Management API",
+      "description": "Google Service Management allows service producers to publish their services on Google Cloud Platform so that they can be discovered and used by service consumers.",
+      "discoveryRestUrl": "https://servicemanagement.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/service-management/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "servicenetworking:v1beta",
+      "name": "servicenetworking",
+      "version": "v1beta",
+      "title": "Service Networking API",
+      "description": "Provides automatic management of network configurations necessary for certain services.",
+      "discoveryRestUrl": "https://servicenetworking.googleapis.com/$discovery/rest?version=v1beta",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/service-infrastructure/docs/service-networking/getting-started",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "servicenetworking:v1",
+      "name": "servicenetworking",
+      "version": "v1",
+      "title": "Service Networking API",
+      "description": "Provides automatic management of network configurations necessary for certain services.",
+      "discoveryRestUrl": "https://servicenetworking.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/service-infrastructure/docs/service-networking/getting-started",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "serviceusage:v1",
+      "name": "serviceusage",
+      "version": "v1",
+      "title": "Service Usage API",
+      "description": "Enables services that service consumers want to use on Google Cloud Platform, lists the available or enabled services, or disables services that service consumers no longer use.",
+      "discoveryRestUrl": "https://serviceusage.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/service-usage/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "serviceusage:v1beta1",
+      "name": "serviceusage",
+      "version": "v1beta1",
+      "title": "Service Usage API",
+      "description": "Enables services that service consumers want to use on Google Cloud Platform, lists the available or enabled services, or disables services that service consumers no longer use.",
+      "discoveryRestUrl": "https://serviceusage.googleapis.com/$discovery/rest?version=v1beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/service-usage/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "sheets:v4",
+      "name": "sheets",
+      "version": "v4",
+      "title": "Google Sheets API",
+      "description": "Reads and writes Google Sheets.",
+      "discoveryRestUrl": "https://sheets.googleapis.com/$discovery/rest?version=v4",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/sheets/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "siteVerification:v1",
+      "name": "siteVerification",
+      "version": "v1",
+      "title": "Google Site Verification API",
+      "description": "Verifies ownership of websites or domains with Google.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/siteVerification/v1/rest",
+      "discoveryLink": "./apis/siteVerification/v1/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/site-verification/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "slides:v1",
+      "name": "slides",
+      "version": "v1",
+      "title": "Google Slides API",
+      "description": "Reads and writes Google Slides presentations.",
+      "discoveryRestUrl": "https://slides.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/slides/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "sourcerepo:v1",
+      "name": "sourcerepo",
+      "version": "v1",
+      "title": "Cloud Source Repositories API",
+      "description": "Accesses source code repositories hosted by Google.",
+      "discoveryRestUrl": "https://sourcerepo.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/source-repositories/docs/apis",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "spanner:v1",
+      "name": "spanner",
+      "version": "v1",
+      "title": "Cloud Spanner API",
+      "description": "Cloud Spanner is a managed, mission-critical, globally consistent and scalable relational database service.",
+      "discoveryRestUrl": "https://spanner.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/spanner/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "speech:v1p1beta1",
+      "name": "speech",
+      "version": "v1p1beta1",
+      "title": "Cloud Speech-to-Text API",
+      "description": "Converts audio to text by applying powerful neural network models.",
+      "discoveryRestUrl": "https://speech.googleapis.com/$discovery/rest?version=v1p1beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/speech-to-text/docs/quickstart-protocol",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "speech:v1",
+      "name": "speech",
+      "version": "v1",
+      "title": "Cloud Speech-to-Text API",
+      "description": "Converts audio to text by applying powerful neural network models.",
+      "discoveryRestUrl": "https://speech.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/speech-to-text/docs/quickstart-protocol",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "sqladmin:v1beta4",
+      "name": "sqladmin",
+      "version": "v1beta4",
+      "title": "Cloud SQL Admin API",
+      "description": "Creates and manages Cloud SQL instances, which provide fully managed MySQL or PostgreSQL databases.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/sqladmin/v1beta4/rest",
+      "discoveryLink": "./apis/sqladmin/v1beta4/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/sql/docs/reference/latest",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "storage:v1",
+      "name": "storage",
+      "version": "v1",
+      "title": "Cloud Storage JSON API",
+      "description": "Stores and retrieves potentially large, immutable data objects.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/storage/v1/rest",
+      "discoveryLink": "./apis/storage/v1/rest",
+      "icons": {
+        "x16": "https://www.google.com/images/icons/product/cloud_storage-16.png",
+        "x32": "https://www.google.com/images/icons/product/cloud_storage-32.png"
+      },
+      "documentationLink": "https://developers.google.com/storage/docs/json_api/",
+      "labels": [
+        "labs"
+      ],
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "storage:v1beta1",
+      "name": "storage",
+      "version": "v1beta1",
+      "title": "Cloud Storage JSON API",
+      "description": "Lets you store and retrieve potentially-large, immutable data objects.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/storage/v1beta1/rest",
+      "discoveryLink": "./apis/storage/v1beta1/rest",
+      "icons": {
+        "x16": "https://www.google.com/images/icons/product/cloud_storage-16.png",
+        "x32": "https://www.google.com/images/icons/product/cloud_storage-32.png"
+      },
+      "documentationLink": "https://developers.google.com/storage/docs/json_api/",
+      "labels": [
+        "labs"
+      ],
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "storage:v1beta2",
+      "name": "storage",
+      "version": "v1beta2",
+      "title": "Cloud Storage JSON API",
+      "description": "Lets you store and retrieve potentially-large, immutable data objects.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/storage/v1beta2/rest",
+      "discoveryLink": "./apis/storage/v1beta2/rest",
+      "icons": {
+        "x16": "https://www.google.com/images/icons/product/cloud_storage-16.png",
+        "x32": "https://www.google.com/images/icons/product/cloud_storage-32.png"
+      },
+      "documentationLink": "https://developers.google.com/storage/docs/json_api/",
+      "labels": [
+        "labs"
+      ],
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "storagetransfer:v1",
+      "name": "storagetransfer",
+      "version": "v1",
+      "title": "Storage Transfer API",
+      "description": "Transfers data from external data sources to a Google Cloud Storage bucket or between Google Cloud Storage buckets.",
+      "discoveryRestUrl": "https://storagetransfer.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/storage-transfer/docs",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "streetviewpublish:v1",
+      "name": "streetviewpublish",
+      "version": "v1",
+      "title": "Street View Publish API",
+      "description": "Publishes 360 photos to Google Maps, along with position, orientation, and connectivity metadata. Apps can offer an interface for positioning, connecting, and uploading user-generated Street View images.",
+      "discoveryRestUrl": "https://streetviewpublish.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/streetview/publish/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "surveys:v2",
+      "name": "surveys",
+      "version": "v2",
+      "title": "Surveys API",
+      "description": "Creates and conducts surveys, lists the surveys that an authenticated user owns, and retrieves survey results and information about specified surveys.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/surveys/v2/rest",
+      "discoveryLink": "./apis/surveys/v2/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "tagmanager:v1",
+      "name": "tagmanager",
+      "version": "v1",
+      "title": "Tag Manager API",
+      "description": "Accesses Tag Manager accounts and containers.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/tagmanager/v1/rest",
+      "discoveryLink": "./apis/tagmanager/v1/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/tag-manager/api/v1/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "tagmanager:v2",
+      "name": "tagmanager",
+      "version": "v2",
+      "title": "Tag Manager API",
+      "description": "Accesses Tag Manager accounts and containers.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/tagmanager/v2/rest",
+      "discoveryLink": "./apis/tagmanager/v2/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/tag-manager/api/v2/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "tasks:v1",
+      "name": "tasks",
+      "version": "v1",
+      "title": "Tasks API",
+      "description": "Manages your tasks and task lists.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/tasks/v1/rest",
+      "discoveryLink": "./apis/tasks/v1/rest",
+      "icons": {
+        "x16": "https://www.google.com/images/icons/product/tasks-16.png",
+        "x32": "https://www.google.com/images/icons/product/tasks-32.png"
+      },
+      "documentationLink": "https://developers.google.com/google-apps/tasks/firstapp",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "testing:v1",
+      "name": "testing",
+      "version": "v1",
+      "title": "Cloud Testing API",
+      "description": "Allows developers to run automated tests for their mobile applications on Google infrastructure.",
+      "discoveryRestUrl": "https://testing.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/cloud-test-lab/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "texttospeech:v1",
+      "name": "texttospeech",
+      "version": "v1",
+      "title": "Cloud Text-to-Speech API",
+      "description": "Synthesizes natural-sounding speech by applying powerful neural network models.",
+      "discoveryRestUrl": "https://texttospeech.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/text-to-speech/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "texttospeech:v1beta1",
+      "name": "texttospeech",
+      "version": "v1beta1",
+      "title": "Cloud Text-to-Speech API",
+      "description": "Synthesizes natural-sounding speech by applying powerful neural network models.",
+      "discoveryRestUrl": "https://texttospeech.googleapis.com/$discovery/rest?version=v1beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/text-to-speech/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "toolresults:v1beta3",
+      "name": "toolresults",
+      "version": "v1beta3",
+      "title": "Cloud Tool Results API",
+      "description": "Reads and publishes results from Firebase Test Lab.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/toolresults/v1beta3/rest",
+      "discoveryLink": "./apis/toolresults/v1beta3/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://firebase.google.com/docs/test-lab/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "tpu:v1alpha1",
+      "name": "tpu",
+      "version": "v1alpha1",
+      "title": "Cloud TPU API",
+      "description": "TPU API provides customers with access to Google TPU technology.",
+      "discoveryRestUrl": "https://tpu.googleapis.com/$discovery/rest?version=v1alpha1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/tpu/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "tpu:v1",
+      "name": "tpu",
+      "version": "v1",
+      "title": "Cloud TPU API",
+      "description": "TPU API provides customers with access to Google TPU technology.",
+      "discoveryRestUrl": "https://tpu.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/tpu/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "translate:v2",
+      "name": "translate",
+      "version": "v2",
+      "title": "Cloud Translation API",
+      "description": "Integrates text translation into your website or application.",
+      "discoveryRestUrl": "https://translation.googleapis.com/$discovery/rest?version=v2",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/translate/docs/quickstarts",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "urlshortener:v1",
+      "name": "urlshortener",
+      "version": "v1",
+      "title": "URL Shortener API",
+      "description": "Lets you create, inspect, and manage goo.gl short URLs",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/urlshortener/v1/rest",
+      "discoveryLink": "./apis/urlshortener/v1/rest",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/url-shortener/v1/getting_started",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "vault:v1",
+      "name": "vault",
+      "version": "v1",
+      "title": "G Suite Vault API",
+      "description": "Archiving and eDiscovery for G Suite.",
+      "discoveryRestUrl": "https://vault.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/vault",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "videointelligence:v1p1beta1",
+      "name": "videointelligence",
+      "version": "v1p1beta1",
+      "title": "Cloud Video Intelligence API",
+      "description": "Detects objects, explicit content, and scene changes in videos. It also specifies the region for annotation and transcribes speech to text. Supports both asynchronous API and streaming API.",
+      "discoveryRestUrl": "https://videointelligence.googleapis.com/$discovery/rest?version=v1p1beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/video-intelligence/docs/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "videointelligence:v1p2beta1",
+      "name": "videointelligence",
+      "version": "v1p2beta1",
+      "title": "Cloud Video Intelligence API",
+      "description": "Detects objects, explicit content, and scene changes in videos. It also specifies the region for annotation and transcribes speech to text. Supports both asynchronous API and streaming API.",
+      "discoveryRestUrl": "https://videointelligence.googleapis.com/$discovery/rest?version=v1p2beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/video-intelligence/docs/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "videointelligence:v1p3beta1",
+      "name": "videointelligence",
+      "version": "v1p3beta1",
+      "title": "Cloud Video Intelligence API",
+      "description": "Detects objects, explicit content, and scene changes in videos. It also specifies the region for annotation and transcribes speech to text. Supports both asynchronous API and streaming API.",
+      "discoveryRestUrl": "https://videointelligence.googleapis.com/$discovery/rest?version=v1p3beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/video-intelligence/docs/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "videointelligence:v1",
+      "name": "videointelligence",
+      "version": "v1",
+      "title": "Cloud Video Intelligence API",
+      "description": "Detects objects, explicit content, and scene changes in videos. It also specifies the region for annotation and transcribes speech to text. Supports both asynchronous API and streaming API.",
+      "discoveryRestUrl": "https://videointelligence.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/video-intelligence/docs/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "videointelligence:v1beta2",
+      "name": "videointelligence",
+      "version": "v1beta2",
+      "title": "Cloud Video Intelligence API",
+      "description": "Detects objects, explicit content, and scene changes in videos. It also specifies the region for annotation and transcribes speech to text. Supports both asynchronous API and streaming API.",
+      "discoveryRestUrl": "https://videointelligence.googleapis.com/$discovery/rest?version=v1beta2",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/video-intelligence/docs/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "vision:v1p1beta1",
+      "name": "vision",
+      "version": "v1p1beta1",
+      "title": "Cloud Vision API",
+      "description": "Integrates Google Vision features, including image labeling, face, logo, and landmark detection, optical character recognition (OCR), and detection of explicit content, into applications.",
+      "discoveryRestUrl": "https://vision.googleapis.com/$discovery/rest?version=v1p1beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/vision/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "vision:v1p2beta1",
+      "name": "vision",
+      "version": "v1p2beta1",
+      "title": "Cloud Vision API",
+      "description": "Integrates Google Vision features, including image labeling, face, logo, and landmark detection, optical character recognition (OCR), and detection of explicit content, into applications.",
+      "discoveryRestUrl": "https://vision.googleapis.com/$discovery/rest?version=v1p2beta1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/vision/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "vision:v1",
+      "name": "vision",
+      "version": "v1",
+      "title": "Cloud Vision API",
+      "description": "Integrates Google Vision features, including image labeling, face, logo, and landmark detection, optical character recognition (OCR), and detection of explicit content, into applications.",
+      "discoveryRestUrl": "https://vision.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/vision/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "webfonts:v1",
+      "name": "webfonts",
+      "version": "v1",
+      "title": "Google Fonts Developer API",
+      "description": "Accesses the metadata for all families served by Google Fonts, providing a list of families currently available (including available styles and a list of supported script subsets).",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/webfonts/v1/rest",
+      "discoveryLink": "./apis/webfonts/v1/rest",
+      "icons": {
+        "x16": "https://www.google.com/images/icons/feature/font_api-16.png",
+        "x32": "https://www.google.com/images/icons/feature/font_api-32.gif"
+      },
+      "documentationLink": "https://developers.google.com/fonts/docs/developer_api",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "webmasters:v3",
+      "name": "webmasters",
+      "version": "v3",
+      "title": "Search Console API",
+      "description": "View Google Search Console data for your verified sites.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/webmasters/v3/rest",
+      "discoveryLink": "./apis/webmasters/v3/rest",
+      "icons": {
+        "x16": "https://www.google.com/images/icons/product/webmaster_tools-16.png",
+        "x32": "https://www.google.com/images/icons/product/webmaster_tools-32.png"
+      },
+      "documentationLink": "https://developers.google.com/webmaster-tools/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "websecurityscanner:v1alpha",
+      "name": "websecurityscanner",
+      "version": "v1alpha",
+      "title": "Web Security Scanner API",
+      "description": "Scans your Compute and App Engine apps for common web vulnerabilities.",
+      "discoveryRestUrl": "https://websecurityscanner.googleapis.com/$discovery/rest?version=v1alpha",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/security-scanner/",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "websecurityscanner:v1beta",
+      "name": "websecurityscanner",
+      "version": "v1beta",
+      "title": "Web Security Scanner API",
+      "description": "Scans your Compute and App Engine apps for common web vulnerabilities.",
+      "discoveryRestUrl": "https://websecurityscanner.googleapis.com/$discovery/rest?version=v1beta",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://cloud.google.com/security-scanner/",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "youtube:v3",
+      "name": "youtube",
+      "version": "v3",
+      "title": "YouTube Data API",
+      "description": "Supports core YouTube features, such as uploading videos, creating and managing playlists, searching for content, and much more.",
+      "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/youtube/v3/rest",
+      "discoveryLink": "./apis/youtube/v3/rest",
+      "icons": {
+        "x16": "https://www.google.com/images/icons/product/youtube-16.png",
+        "x32": "https://www.google.com/images/icons/product/youtube-32.png"
+      },
+      "documentationLink": "https://developers.google.com/youtube/v3",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "youtubeAnalytics:v1",
+      "name": "youtubeAnalytics",
+      "version": "v1",
+      "title": "YouTube Analytics API",
+      "description": "Retrieves your YouTube Analytics data.",
+      "discoveryRestUrl": "https://youtubeanalytics.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/youtube/analytics",
+      "preferred": false
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "youtubeAnalytics:v2",
+      "name": "youtubeAnalytics",
+      "version": "v2",
+      "title": "YouTube Analytics API",
+      "description": "Retrieves your YouTube Analytics data.",
+      "discoveryRestUrl": "https://youtubeanalytics.googleapis.com/$discovery/rest?version=v2",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/youtube/analytics",
+      "preferred": true
+    },
+    {
+      "kind": "discovery#directoryItem",
+      "id": "youtubereporting:v1",
+      "name": "youtubereporting",
+      "version": "v1",
+      "title": "YouTube Reporting API",
+      "description": "Schedules reporting jobs containing your YouTube Analytics data and downloads the resulting bulk data reports in the form of CSV files.",
+      "discoveryRestUrl": "https://youtubereporting.googleapis.com/$discovery/rest?version=v1",
+      "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+      },
+      "documentationLink": "https://developers.google.com/youtube/reporting/v1/reports/",
+      "preferred": true
+    }
+  ]
 }
diff --git a/bigquerydatatransfer/v1/bigquerydatatransfer-api.json b/bigquerydatatransfer/v1/bigquerydatatransfer-api.json
index a12c62a..4319dad 100644
--- a/bigquerydatatransfer/v1/bigquerydatatransfer-api.json
+++ b/bigquerydatatransfer/v1/bigquerydatatransfer-api.json
@@ -408,7 +408,7 @@
                       "type": "string"
                     },
                     "versionInfo": {
-                      "description": "Optional version info. If users want to find a very recent access token,\nthat is, immediately after approving access, users have to set the\nversion_info claim in the token request. To obtain the version_info, users\nmust use the “none+gsession” response type. which be return a\nversion_info back in the authorization response which be be put in a JWT\nclaim in the token request.",
+                      "description": "Optional version info. If users want to find a very recent access token,\nthat is, immediately after approving access, users have to set the\nversion_info claim in the token request. To obtain the version_info, users\nmust use the \"none+gsession\" response type. which be return a\nversion_info back in the authorization response which be be put in a JWT\nclaim in the token request.",
                       "location": "query",
                       "type": "string"
                     }
@@ -549,7 +549,7 @@
                       "type": "string"
                     },
                     "versionInfo": {
-                      "description": "Optional version info. If users want to find a very recent access token,\nthat is, immediately after approving access, users have to set the\nversion_info claim in the token request. To obtain the version_info, users\nmust use the “none+gsession” response type. which be return a\nversion_info back in the authorization response which be be put in a JWT\nclaim in the token request.",
+                      "description": "Optional version info. If users want to find a very recent access token,\nthat is, immediately after approving access, users have to set the\nversion_info claim in the token request. To obtain the version_info, users\nmust use the \"none+gsession\" response type. which be return a\nversion_info back in the authorization response which be be put in a JWT\nclaim in the token request.",
                       "location": "query",
                       "type": "string"
                     }
@@ -827,7 +827,7 @@
                   "type": "string"
                 },
                 "versionInfo": {
-                  "description": "Optional version info. If users want to find a very recent access token,\nthat is, immediately after approving access, users have to set the\nversion_info claim in the token request. To obtain the version_info, users\nmust use the “none+gsession” response type. which be return a\nversion_info back in the authorization response which be be put in a JWT\nclaim in the token request.",
+                  "description": "Optional version info. If users want to find a very recent access token,\nthat is, immediately after approving access, users have to set the\nversion_info claim in the token request. To obtain the version_info, users\nmust use the \"none+gsession\" response type. which be return a\nversion_info back in the authorization response which be be put in a JWT\nclaim in the token request.",
                   "location": "query",
                   "type": "string"
                 }
@@ -968,7 +968,7 @@
                   "type": "string"
                 },
                 "versionInfo": {
-                  "description": "Optional version info. If users want to find a very recent access token,\nthat is, immediately after approving access, users have to set the\nversion_info claim in the token request. To obtain the version_info, users\nmust use the “none+gsession” response type. which be return a\nversion_info back in the authorization response which be be put in a JWT\nclaim in the token request.",
+                  "description": "Optional version info. If users want to find a very recent access token,\nthat is, immediately after approving access, users have to set the\nversion_info claim in the token request. To obtain the version_info, users\nmust use the \"none+gsession\" response type. which be return a\nversion_info back in the authorization response which be be put in a JWT\nclaim in the token request.",
                   "location": "query",
                   "type": "string"
                 }
@@ -1223,7 +1223,7 @@
       }
     }
   },
-  "revision": "20190605",
+  "revision": "20190615",
   "rootUrl": "https://bigquerydatatransfer.googleapis.com/",
   "schemas": {
     "CheckValidCredsRequest": {
@@ -1372,6 +1372,10 @@
           },
           "type": "array"
         },
+        "deprecated": {
+          "description": "If true, it should not be used in new transfers, and it should not be\nvisible to users.",
+          "type": "boolean"
+        },
         "description": {
           "description": "Parameter description.",
           "type": "string"
@@ -1863,7 +1867,7 @@
           "type": "object"
         },
         "runTime": {
-          "description": "For batch transfer runs, specifies the date and time that\ndata should be ingested.",
+          "description": "For batch transfer runs, specifies the date and time of the data should be\ningested.",
           "format": "google-datetime",
           "type": "string"
         },
diff --git a/bigquerydatatransfer/v1/bigquerydatatransfer-gen.go b/bigquerydatatransfer/v1/bigquerydatatransfer-gen.go
index 14dbdce..8947025 100644
--- a/bigquerydatatransfer/v1/bigquerydatatransfer-gen.go
+++ b/bigquerydatatransfer/v1/bigquerydatatransfer-gen.go
@@ -460,6 +460,11 @@
 	// AllowedValues: All possible values for the parameter.
 	AllowedValues []string `json:"allowedValues,omitempty"`
 
+	// Deprecated: If true, it should not be used in new transfers, and it
+	// should not be
+	// visible to users.
+	Deprecated bool `json:"deprecated,omitempty"`
+
 	// Description: Parameter description.
 	Description string `json:"description,omitempty"`
 
@@ -1319,9 +1324,9 @@
 	// Params: Output only. Data transfer specific parameters.
 	Params googleapi.RawMessage `json:"params,omitempty"`
 
-	// RunTime: For batch transfer runs, specifies the date and time
-	// that
-	// data should be ingested.
+	// RunTime: For batch transfer runs, specifies the date and time of the
+	// data should be
+	// ingested.
 	RunTime string `json:"runTime,omitempty"`
 
 	// Schedule: Output only. Describes the schedule of this transfer run if
@@ -2780,7 +2785,7 @@
 // the
 // version_info claim in the token request. To obtain the version_info,
 // users
-// must use the “none+gsession” response type. which be return
+// must use the "none+gsession" response type. which be return
 // a
 // version_info back in the authorization response which be be put in a
 // JWT
@@ -2901,7 +2906,7 @@
 	//       "type": "string"
 	//     },
 	//     "versionInfo": {
-	//       "description": "Optional version info. If users want to find a very recent access token,\nthat is, immediately after approving access, users have to set the\nversion_info claim in the token request. To obtain the version_info, users\nmust use the “none+gsession” response type. which be return a\nversion_info back in the authorization response which be be put in a JWT\nclaim in the token request.",
+	//       "description": "Optional version info. If users want to find a very recent access token,\nthat is, immediately after approving access, users have to set the\nversion_info claim in the token request. To obtain the version_info, users\nmust use the \"none+gsession\" response type. which be return a\nversion_info back in the authorization response which be be put in a JWT\nclaim in the token request.",
 	//       "location": "query",
 	//       "type": "string"
 	//     }
@@ -3469,7 +3474,7 @@
 // the
 // version_info claim in the token request. To obtain the version_info,
 // users
-// must use the “none+gsession” response type. which be return
+// must use the "none+gsession" response type. which be return
 // a
 // version_info back in the authorization response which be be put in a
 // JWT
@@ -3596,7 +3601,7 @@
 	//       "type": "string"
 	//     },
 	//     "versionInfo": {
-	//       "description": "Optional version info. If users want to find a very recent access token,\nthat is, immediately after approving access, users have to set the\nversion_info claim in the token request. To obtain the version_info, users\nmust use the “none+gsession” response type. which be return a\nversion_info back in the authorization response which be be put in a JWT\nclaim in the token request.",
+	//       "description": "Optional version info. If users want to find a very recent access token,\nthat is, immediately after approving access, users have to set the\nversion_info claim in the token request. To obtain the version_info, users\nmust use the \"none+gsession\" response type. which be return a\nversion_info back in the authorization response which be be put in a JWT\nclaim in the token request.",
 	//       "location": "query",
 	//       "type": "string"
 	//     }
@@ -4704,7 +4709,7 @@
 // the
 // version_info claim in the token request. To obtain the version_info,
 // users
-// must use the “none+gsession” response type. which be return
+// must use the "none+gsession" response type. which be return
 // a
 // version_info back in the authorization response which be be put in a
 // JWT
@@ -4825,7 +4830,7 @@
 	//       "type": "string"
 	//     },
 	//     "versionInfo": {
-	//       "description": "Optional version info. If users want to find a very recent access token,\nthat is, immediately after approving access, users have to set the\nversion_info claim in the token request. To obtain the version_info, users\nmust use the “none+gsession” response type. which be return a\nversion_info back in the authorization response which be be put in a JWT\nclaim in the token request.",
+	//       "description": "Optional version info. If users want to find a very recent access token,\nthat is, immediately after approving access, users have to set the\nversion_info claim in the token request. To obtain the version_info, users\nmust use the \"none+gsession\" response type. which be return a\nversion_info back in the authorization response which be be put in a JWT\nclaim in the token request.",
 	//       "location": "query",
 	//       "type": "string"
 	//     }
@@ -5393,7 +5398,7 @@
 // the
 // version_info claim in the token request. To obtain the version_info,
 // users
-// must use the “none+gsession” response type. which be return
+// must use the "none+gsession" response type. which be return
 // a
 // version_info back in the authorization response which be be put in a
 // JWT
@@ -5520,7 +5525,7 @@
 	//       "type": "string"
 	//     },
 	//     "versionInfo": {
-	//       "description": "Optional version info. If users want to find a very recent access token,\nthat is, immediately after approving access, users have to set the\nversion_info claim in the token request. To obtain the version_info, users\nmust use the “none+gsession” response type. which be return a\nversion_info back in the authorization response which be be put in a JWT\nclaim in the token request.",
+	//       "description": "Optional version info. If users want to find a very recent access token,\nthat is, immediately after approving access, users have to set the\nversion_info claim in the token request. To obtain the version_info, users\nmust use the \"none+gsession\" response type. which be return a\nversion_info back in the authorization response which be be put in a JWT\nclaim in the token request.",
 	//       "location": "query",
 	//       "type": "string"
 	//     }
diff --git a/compute/v0.alpha/compute-api.json b/compute/v0.alpha/compute-api.json
index dc97a01..27a5d2d 100644
--- a/compute/v0.alpha/compute-api.json
+++ b/compute/v0.alpha/compute-api.json
@@ -29,7 +29,7 @@
   "description": "Creates and runs virtual machines on Google Cloud Platform.",
   "discoveryVersion": "v1",
   "documentationLink": "https://developers.google.com/compute/docs/reference/latest/",
-  "etag": "\"9eZ1uxVRThTDhLJCZHhqs3eQWz4/ueVoK3n_xLhYrMFdkcc3Qw2TPW0\"",
+  "etag": "\"9eZ1uxVRThTDhLJCZHhqs3eQWz4/9FN7PZIkZX1m8WLcc7-BvDvFgLc\"",
   "icons": {
     "x16": "https://www.google.com/images/icons/product/compute_engine-16.png",
     "x32": "https://www.google.com/images/icons/product/compute_engine-32.png"
@@ -14987,6 +14987,55 @@
             "https://www.googleapis.com/auth/compute.readonly"
           ]
         },
+        "patch": {
+          "description": "Patches the specified PacketMirroring resource with the data included in the request. This method supports PATCH semantics and uses JSON merge patch format and processing rules.",
+          "httpMethod": "PATCH",
+          "id": "compute.packetMirrorings.patch",
+          "parameterOrder": [
+            "project",
+            "region",
+            "packetMirroring"
+          ],
+          "parameters": {
+            "packetMirroring": {
+              "description": "Name of the PacketMirroring resource to patch.",
+              "location": "path",
+              "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?|[1-9][0-9]{0,19}",
+              "required": true,
+              "type": "string"
+            },
+            "project": {
+              "description": "Project ID for this request.",
+              "location": "path",
+              "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+              "required": true,
+              "type": "string"
+            },
+            "region": {
+              "description": "Name of the region for this request.",
+              "location": "path",
+              "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+              "required": true,
+              "type": "string"
+            },
+            "requestId": {
+              "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed.\n\nFor example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments.\n\nThe request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
+              "location": "query",
+              "type": "string"
+            }
+          },
+          "path": "{project}/regions/{region}/packetMirrorings/{packetMirroring}",
+          "request": {
+            "$ref": "PacketMirroring"
+          },
+          "response": {
+            "$ref": "Operation"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/compute"
+          ]
+        },
         "testIamPermissions": {
           "description": "Returns permissions that a caller has on the specified resource.",
           "httpMethod": "POST",
@@ -22143,7 +22192,7 @@
           ]
         },
         "update": {
-          "description": "Updates the specified Router resource with the data included in the request.",
+          "description": "Updates the specified Router resource with the data included in the request. This method conforms to PUT semantics, which requests that the state of the target resource be created or replaced with the state defined by the representation enclosed in the request message payload.",
           "httpMethod": "PUT",
           "id": "compute.routers.update",
           "parameterOrder": [
@@ -28151,7 +28200,7 @@
       }
     }
   },
-  "revision": "20190530",
+  "revision": "20190607",
   "rootUrl": "https://www.googleapis.com/",
   "schemas": {
     "AcceleratorConfig": {
@@ -42134,10 +42183,6 @@
           "$ref": "ManagedInstanceLastAttempt",
           "description": "[Output Only] Information about the last attempt to create or delete the instance."
         },
-        "override": {
-          "$ref": "ManagedInstanceOverride",
-          "description": "[Output Only] Override defined for this instance."
-        },
         "preservedStateFromConfig": {
           "$ref": "PreservedState",
           "description": "[Output Only] Preserved state applied from per-instance config for this instance."
@@ -42230,88 +42275,6 @@
       },
       "type": "object"
     },
-    "ManagedInstanceOverride": {
-      "description": "Overrides of stateful properties for a given instance",
-      "id": "ManagedInstanceOverride",
-      "properties": {
-        "disks": {
-          "description": "Disk overrides defined for this instance. According to documentation the maximum number of disks attached to an instance is 128: https://cloud.google.com/compute/docs/disks/ However, compute API defines the limit at 140, so this is what we check.",
-          "items": {
-            "$ref": "ManagedInstanceOverrideDiskOverride"
-          },
-          "type": "array"
-        },
-        "metadata": {
-          "description": "Metadata overrides defined for this instance. TODO(b/69785416) validate the total length is \u003c9 KB",
-          "items": {
-            "properties": {
-              "key": {
-                "annotations": {
-                  "required": [
-                    "compute.instances.insert",
-                    "compute.projects.setCommonInstanceMetadata"
-                  ]
-                },
-                "description": "Key for the metadata entry. Keys must conform to the following regexp: [a-zA-Z0-9-_]+, and be less than 128 bytes in length. This is reflected as part of a URL in the metadata server. Additionally, to avoid ambiguity, keys must not conflict with any other metadata keys for the project.",
-                "pattern": "[a-zA-Z0-9-_]{1,128}",
-                "type": "string"
-              },
-              "value": {
-                "annotations": {
-                  "required": [
-                    "compute.instances.insert",
-                    "compute.projects.setCommonInstanceMetadata"
-                  ]
-                },
-                "description": "Value for the metadata entry. These are free-form strings, and only have meaning as interpreted by the image running in the instance. The only restriction placed on values is that their size must be less than or equal to 262144 bytes (256 KiB).",
-                "type": "string"
-              }
-            },
-            "type": "object"
-          },
-          "type": "array"
-        },
-        "origin": {
-          "description": "[Output Only] Indicates where does the override come from.",
-          "enum": [
-            "AUTO_GENERATED",
-            "USER_PROVIDED"
-          ],
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "ManagedInstanceOverrideDiskOverride": {
-      "id": "ManagedInstanceOverrideDiskOverride",
-      "properties": {
-        "deviceName": {
-          "description": "The name of the device on the VM",
-          "type": "string"
-        },
-        "mode": {
-          "description": "The mode in which to attach this disk, either READ_WRITE or READ_ONLY. If not specified, the default is to attach the disk in READ_WRITE mode.",
-          "enum": [
-            "READ_ONLY",
-            "READ_WRITE"
-          ],
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "type": "string"
-        },
-        "source": {
-          "description": "The disk that is/will be mounted",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
     "ManagedInstanceVersion": {
       "id": "ManagedInstanceVersion",
       "properties": {
@@ -43600,15 +43563,17 @@
           "description": "[Output Only] The type of the resource. Always compute#nodeGroup for node group.",
           "type": "string"
         },
-        "managedHoldback": {
+        "maintenancePolicy": {
           "enum": [
-            "MANAGED_HOLDBACK_UNSPECIFIED",
-            "OFF",
-            "ON"
+            "DEFAULT",
+            "MAINTENANCE_POLICY_UNSPECIFIED",
+            "MIGRATE_WITHIN_NODE_GROUP",
+            "RESTART_IN_PLACE"
           ],
           "enumDescriptions": [
             "",
             "",
+            "",
             ""
           ],
           "type": "string"
@@ -44191,7 +44156,7 @@
       "type": "object"
     },
     "NodeTemplate": {
-      "description": "Represent a sole-tenant Node Template resource.\n\nYou can use a template to define properties for nodes in a node group. For more information, read Creating node groups and instances. (== resource_for beta.nodeTemplates ==) (== resource_for v1.nodeTemplates ==) NextID: 16",
+      "description": "Represent a sole-tenant Node Template resource.\n\nYou can use a template to define properties for nodes in a node group. For more information, read Creating node groups and instances. (== resource_for beta.nodeTemplates ==) (== resource_for v1.nodeTemplates ==) (== NextID: 16 ==)",
       "id": "NodeTemplate",
       "properties": {
         "creationTimestamp": {
@@ -44251,7 +44216,7 @@
         },
         "serverBinding": {
           "$ref": "ServerBinding",
-          "description": "Binding properties for the physical server."
+          "description": "Sets the binding properties for the physical server. Valid values include:  \n- [Default] RESTART_NODE_ON_ANY_SERVER: Restarts VMs on any available physical server \n- RESTART_NODE_ON_MINIMAL_SERVER: Restarts VMs on the same physical server whenever possible  \n\nSee Sole-tenant node options for more information."
         },
         "status": {
           "description": "[Output Only] The status of the node template. One of the following values: CREATING, READY, and DELETING.",
@@ -46091,15 +46056,15 @@
     "PacketMirroringFilter": {
       "id": "PacketMirroringFilter",
       "properties": {
-        "IPProtocol": {
-          "description": "Protocols that apply as filter on mirrored traffic. If no protocols are specified, all traffic that matches the specified CIDR ranges is mirrored. If neither cidrRanges nor IpProtocols is specified, all traffic is mirrored.",
+        "IPProtocols": {
+          "description": "Protocols that apply as filter on mirrored traffic. If no protocols are specified, all traffic that matches the specified CIDR ranges is mirrored. If neither cidrRanges nor IPProtocols is specified, all traffic is mirrored.",
           "items": {
             "type": "string"
           },
           "type": "array"
         },
         "cidrRanges": {
-          "description": "IP CIDR ranges that apply as filter on the source (ingress) or destination (egress) IP in the IP header. Only IPv4 is supported. If no ranges are specified, all traffic that matches the specified IPProtocols is mirrored. If neither cidrRanges nor IpProtocols is specified, all traffic is mirrored.",
+          "description": "IP CIDR ranges that apply as filter on the source (ingress) or destination (egress) IP in the IP header. Only IPv4 is supported. If no ranges are specified, all traffic that matches the specified IPProtocols is mirrored. If neither cidrRanges nor IPProtocols is specified, all traffic is mirrored.",
           "items": {
             "type": "string"
           },
@@ -46498,17 +46463,10 @@
           "format": "byte",
           "type": "string"
         },
-        "instance": {
-          "description": "The URL of the instance. Serves as a merge key during UpdatePerInstanceConfigs operation, i.e. if per-instance config with the same instance URL exists then it will be updated, otherwise a new one will be created.",
-          "type": "string"
-        },
         "name": {
           "description": "The name of the per-instance config and the corresponding instance. Serves as a merge key during UpdatePerInstanceConfigs operation, i.e. if per-instance config with the same name exists then it will be updated, otherwise a new one will be created for the VM instance with the same name. An attempt to create a per-instance config for a VM instance that either doesn't exist or is not part of the group will result in a failure.",
           "type": "string"
         },
-        "override": {
-          "$ref": "ManagedInstanceOverride"
-        },
         "preservedState": {
           "$ref": "PreservedState",
           "description": "Intended preserved state for the given instance. Does not contain state generated based on Stateful Policy."
@@ -48512,7 +48470,7 @@
       "type": "object"
     },
     "ReservationAffinity": {
-      "description": "AllocationAffinity is the configuration of desired allocation which this instance could take capacity from.",
+      "description": "ReservationAffinity is the configuration of desired reservation which this instance could take capacity from.",
       "id": "ReservationAffinity",
       "properties": {
         "consumeReservationType": {
@@ -49497,6 +49455,9 @@
     "ResourcePolicyVmMaintenancePolicy": {
       "id": "ResourcePolicyVmMaintenancePolicy",
       "properties": {
+        "concurrencyControlGroup": {
+          "$ref": "ResourcePolicyVmMaintenancePolicyConcurrencyControl"
+        },
         "maintenanceWindow": {
           "$ref": "ResourcePolicyVmMaintenancePolicyMaintenanceWindow",
           "description": "Maintenance windows that are applied to VMs covered by this policy."
@@ -49504,6 +49465,17 @@
       },
       "type": "object"
     },
+    "ResourcePolicyVmMaintenancePolicyConcurrencyControl": {
+      "description": "A concurrency control configuration. Defines a group config that, when attached to an instance, recognizes that instance as part of a group of instances where only up the concurrency_limit of instances in that group can undergo simultaneous maintenance. For more information: go/concurrency-control-design-doc",
+      "id": "ResourcePolicyVmMaintenancePolicyConcurrencyControl",
+      "properties": {
+        "concurrencyLimit": {
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "type": "object"
+    },
     "ResourcePolicyVmMaintenancePolicyMaintenanceWindow": {
       "description": "A maintenance window for VMs. When set, we restrict our maintenance operations to this window.",
       "id": "ResourcePolicyVmMaintenancePolicyMaintenanceWindow",
@@ -51210,6 +51182,9 @@
           },
           "type": "array"
         },
+        "cloudArmorConfig": {
+          "$ref": "SecurityPolicyCloudArmorConfig"
+        },
         "creationTimestamp": {
           "description": "[Output Only] Creation timestamp in RFC3339 text format.",
           "type": "string"
@@ -51303,6 +51278,17 @@
       },
       "type": "object"
     },
+    "SecurityPolicyCloudArmorConfig": {
+      "description": "Configuration options for Cloud Armor.",
+      "id": "SecurityPolicyCloudArmorConfig",
+      "properties": {
+        "enableMl": {
+          "description": "If set to true, enables Cloud Armor Machine Learning.",
+          "type": "boolean"
+        }
+      },
+      "type": "object"
+    },
     "SecurityPolicyList": {
       "id": "SecurityPolicyList",
       "properties": {
@@ -52994,39 +52980,12 @@
     "StatefulPolicy": {
       "id": "StatefulPolicy",
       "properties": {
-        "preservedResources": {
-          "$ref": "StatefulPolicyPreservedResources"
-        },
         "preservedState": {
           "$ref": "StatefulPolicyPreservedState"
         }
       },
       "type": "object"
     },
-    "StatefulPolicyPreservedDisk": {
-      "id": "StatefulPolicyPreservedDisk",
-      "properties": {
-        "deviceName": {
-          "description": "Device name of the disk to be preserved",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "StatefulPolicyPreservedResources": {
-      "description": "Configuration of all preserved resources.",
-      "id": "StatefulPolicyPreservedResources",
-      "properties": {
-        "disks": {
-          "description": "Disks created on the instances that will be preserved on instance delete, resize down, etc.",
-          "items": {
-            "$ref": "StatefulPolicyPreservedDisk"
-          },
-          "type": "array"
-        }
-      },
-      "type": "object"
-    },
     "StatefulPolicyPreservedState": {
       "description": "Configuration of preserved resources.",
       "id": "StatefulPolicyPreservedState",
@@ -53521,7 +53480,7 @@
           "type": "number"
         },
         "metadata": {
-          "description": "Can only be specified if VPC flow logging for this subnetwork is enabled. Configures whether metadata fields should be added to the reported VPC flow logs. Default is INCLUDE_ALL_METADATA.",
+          "description": "Can only be specified if VPC flow logs for this subnetwork is enabled. Configures whether all, none or a subset of metadata fields should be added to the reported VPC flow logs. Default is INCLUDE_ALL_METADATA.",
           "enum": [
             "EXCLUDE_ALL_METADATA",
             "INCLUDE_ALL_METADATA"
diff --git a/compute/v0.alpha/compute-gen.go b/compute/v0.alpha/compute-gen.go
index 0675f7f..dd62637 100644
--- a/compute/v0.alpha/compute-gen.go
+++ b/compute/v0.alpha/compute-gen.go
@@ -22043,9 +22043,6 @@
 	// create or delete the instance.
 	LastAttempt *ManagedInstanceLastAttempt `json:"lastAttempt,omitempty"`
 
-	// Override: [Output Only] Override defined for this instance.
-	Override *ManagedInstanceOverride `json:"override,omitempty"`
-
 	// PreservedStateFromConfig: [Output Only] Preserved state applied from
 	// per-instance config for this instance.
 	PreservedStateFromConfig *PreservedState `json:"preservedStateFromConfig,omitempty"`
@@ -22222,125 +22219,6 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
-// ManagedInstanceOverride: Overrides of stateful properties for a given
-// instance
-type ManagedInstanceOverride struct {
-	// Disks: Disk overrides defined for this instance. According to
-	// documentation the maximum number of disks attached to an instance is
-	// 128: https://cloud.google.com/compute/docs/disks/ However, compute
-	// API defines the limit at 140, so this is what we check.
-	Disks []*ManagedInstanceOverrideDiskOverride `json:"disks,omitempty"`
-
-	// Metadata: Metadata overrides defined for this instance.
-	// TODO(b/69785416) validate the total length is <9 KB
-	Metadata []*ManagedInstanceOverrideMetadata `json:"metadata,omitempty"`
-
-	// Origin: [Output Only] Indicates where does the override come from.
-	//
-	// Possible values:
-	//   "AUTO_GENERATED"
-	//   "USER_PROVIDED"
-	Origin string `json:"origin,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "Disks") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "Disks") to include in API
-	// requests with the JSON null value. By default, fields with empty
-	// values are omitted from API requests. However, any field with an
-	// empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *ManagedInstanceOverride) MarshalJSON() ([]byte, error) {
-	type NoMethod ManagedInstanceOverride
-	raw := NoMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-type ManagedInstanceOverrideMetadata struct {
-	// Key: Key for the metadata entry. Keys must conform to the following
-	// regexp: [a-zA-Z0-9-_]+, and be less than 128 bytes in length. This is
-	// reflected as part of a URL in the metadata server. Additionally, to
-	// avoid ambiguity, keys must not conflict with any other metadata keys
-	// for the project.
-	Key string `json:"key,omitempty"`
-
-	// Value: Value for the metadata entry. These are free-form strings, and
-	// only have meaning as interpreted by the image running in the
-	// instance. The only restriction placed on values is that their size
-	// must be less than or equal to 262144 bytes (256 KiB).
-	Value string `json:"value,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "Key") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "Key") to include in API
-	// requests with the JSON null value. By default, fields with empty
-	// values are omitted from API requests. However, any field with an
-	// empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *ManagedInstanceOverrideMetadata) MarshalJSON() ([]byte, error) {
-	type NoMethod ManagedInstanceOverrideMetadata
-	raw := NoMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-type ManagedInstanceOverrideDiskOverride struct {
-	// DeviceName: The name of the device on the VM
-	DeviceName string `json:"deviceName,omitempty"`
-
-	// Mode: The mode in which to attach this disk, either READ_WRITE or
-	// READ_ONLY. If not specified, the default is to attach the disk in
-	// READ_WRITE mode.
-	//
-	// Possible values:
-	//   "READ_ONLY"
-	//   "READ_WRITE"
-	Mode string `json:"mode,omitempty"`
-
-	// Source: The disk that is/will be mounted
-	Source string `json:"source,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "DeviceName") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "DeviceName") to include in
-	// API requests with the JSON null value. By default, fields with empty
-	// values are omitted from API requests. However, any field with an
-	// empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *ManagedInstanceOverrideDiskOverride) MarshalJSON() ([]byte, error) {
-	type NoMethod ManagedInstanceOverrideDiskOverride
-	raw := NoMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
 type ManagedInstanceVersion struct {
 	// InstanceTemplate: [Output Only] The intended template of the
 	// instance. This field is empty when current_action is one of {
@@ -24330,10 +24208,11 @@
 	Kind string `json:"kind,omitempty"`
 
 	// Possible values:
-	//   "MANAGED_HOLDBACK_UNSPECIFIED"
-	//   "OFF"
-	//   "ON"
-	ManagedHoldback string `json:"managedHoldback,omitempty"`
+	//   "DEFAULT"
+	//   "MAINTENANCE_POLICY_UNSPECIFIED"
+	//   "MIGRATE_WITHIN_NODE_GROUP"
+	//   "RESTART_IN_PLACE"
+	MaintenancePolicy string `json:"maintenancePolicy,omitempty"`
 
 	// Name: The name of the resource, provided by the client when initially
 	// creating the resource. The resource name must be 1-63 characters
@@ -25188,7 +25067,7 @@
 // You can use a template to define properties for nodes in a node
 // group. For more information, read Creating node groups and instances.
 // (== resource_for beta.nodeTemplates ==) (== resource_for
-// v1.nodeTemplates ==) NextID: 16
+// v1.nodeTemplates ==) (== NextID: 16 ==)
 type NodeTemplate struct {
 	// CreationTimestamp: [Output Only] Creation timestamp in RFC3339 text
 	// format.
@@ -25245,7 +25124,14 @@
 	// with the resource id.
 	SelfLinkWithId string `json:"selfLinkWithId,omitempty"`
 
-	// ServerBinding: Binding properties for the physical server.
+	// ServerBinding: Sets the binding properties for the physical server.
+	// Valid values include:
+	// - [Default] RESTART_NODE_ON_ANY_SERVER: Restarts VMs on any available
+	// physical server
+	// - RESTART_NODE_ON_MINIMAL_SERVER: Restarts VMs on the same physical
+	// server whenever possible
+	//
+	// See Sole-tenant node options for more information.
 	ServerBinding *ServerBinding `json:"serverBinding,omitempty"`
 
 	// Status: [Output Only] The status of the node template. One of the
@@ -27865,20 +27751,20 @@
 }
 
 type PacketMirroringFilter struct {
-	// IPProtocol: Protocols that apply as filter on mirrored traffic. If no
-	// protocols are specified, all traffic that matches the specified CIDR
-	// ranges is mirrored. If neither cidrRanges nor IpProtocols is
+	// IPProtocols: Protocols that apply as filter on mirrored traffic. If
+	// no protocols are specified, all traffic that matches the specified
+	// CIDR ranges is mirrored. If neither cidrRanges nor IPProtocols is
 	// specified, all traffic is mirrored.
-	IPProtocol []string `json:"IPProtocol,omitempty"`
+	IPProtocols []string `json:"IPProtocols,omitempty"`
 
 	// CidrRanges: IP CIDR ranges that apply as filter on the source
 	// (ingress) or destination (egress) IP in the IP header. Only IPv4 is
 	// supported. If no ranges are specified, all traffic that matches the
 	// specified IPProtocols is mirrored. If neither cidrRanges nor
-	// IpProtocols is specified, all traffic is mirrored.
+	// IPProtocols is specified, all traffic is mirrored.
 	CidrRanges []string `json:"cidrRanges,omitempty"`
 
-	// ForceSendFields is a list of field names (e.g. "IPProtocol") to
+	// ForceSendFields is a list of field names (e.g. "IPProtocols") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
 	// non-interface field appearing in ForceSendFields will be sent to the
@@ -27886,10 +27772,10 @@
 	// used to include empty fields in Patch requests.
 	ForceSendFields []string `json:"-"`
 
-	// NullFields is a list of field names (e.g. "IPProtocol") to include in
-	// API requests with the JSON null value. By default, fields with empty
-	// values are omitted from API requests. However, any field with an
-	// empty value appearing in NullFields will be sent to the server as
+	// NullFields is a list of field names (e.g. "IPProtocols") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
 	// null. It is an error if a field in this list has a non-empty value.
 	// This may be used to include null fields in Patch requests.
 	NullFields []string `json:"-"`
@@ -28585,12 +28471,6 @@
 	// be unset.
 	Fingerprint string `json:"fingerprint,omitempty"`
 
-	// Instance: The URL of the instance. Serves as a merge key during
-	// UpdatePerInstanceConfigs operation, i.e. if per-instance config with
-	// the same instance URL exists then it will be updated, otherwise a new
-	// one will be created.
-	Instance string `json:"instance,omitempty"`
-
 	// Name: The name of the per-instance config and the corresponding
 	// instance. Serves as a merge key during UpdatePerInstanceConfigs
 	// operation, i.e. if per-instance config with the same name exists then
@@ -28600,8 +28480,6 @@
 	// the group will result in a failure.
 	Name string `json:"name,omitempty"`
 
-	Override *ManagedInstanceOverride `json:"override,omitempty"`
-
 	// PreservedState: Intended preserved state for the given instance. Does
 	// not contain state generated based on Stateful Policy.
 	PreservedState *PreservedState `json:"preservedState,omitempty"`
@@ -31530,8 +31408,8 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
-// ReservationAffinity: AllocationAffinity is the configuration of
-// desired allocation which this instance could take capacity from.
+// ReservationAffinity: ReservationAffinity is the configuration of
+// desired reservation which this instance could take capacity from.
 type ReservationAffinity struct {
 	// ConsumeReservationType: Specifies the type of reservation from which
 	// this instance can consume resources: ANY_RESERVATION (default),
@@ -32937,19 +32815,55 @@
 }
 
 type ResourcePolicyVmMaintenancePolicy struct {
+	ConcurrencyControlGroup *ResourcePolicyVmMaintenancePolicyConcurrencyControl `json:"concurrencyControlGroup,omitempty"`
+
 	// MaintenanceWindow: Maintenance windows that are applied to VMs
 	// covered by this policy.
 	MaintenanceWindow *ResourcePolicyVmMaintenancePolicyMaintenanceWindow `json:"maintenanceWindow,omitempty"`
 
-	// ForceSendFields is a list of field names (e.g. "MaintenanceWindow")
-	// to unconditionally include in API requests. By default, fields with
+	// ForceSendFields is a list of field names (e.g.
+	// "ConcurrencyControlGroup") to unconditionally include in API
+	// requests. By default, fields with empty values are omitted from API
+	// requests. However, any non-pointer, non-interface field appearing in
+	// ForceSendFields will be sent to the server regardless of whether the
+	// field is empty or not. This may be used to include empty fields in
+	// Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "ConcurrencyControlGroup")
+	// to include in API requests with the JSON null value. By default,
+	// fields with empty values are omitted from API requests. However, any
+	// field with an empty value appearing in NullFields will be sent to the
+	// server as null. It is an error if a field in this list has a
+	// non-empty value. This may be used to include null fields in Patch
+	// requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ResourcePolicyVmMaintenancePolicy) MarshalJSON() ([]byte, error) {
+	type NoMethod ResourcePolicyVmMaintenancePolicy
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ResourcePolicyVmMaintenancePolicyConcurrencyControl: A concurrency
+// control configuration. Defines a group config that, when attached to
+// an instance, recognizes that instance as part of a group of instances
+// where only up the concurrency_limit of instances in that group can
+// undergo simultaneous maintenance. For more information:
+// go/concurrency-control-design-doc
+type ResourcePolicyVmMaintenancePolicyConcurrencyControl struct {
+	ConcurrencyLimit int64 `json:"concurrencyLimit,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ConcurrencyLimit") to
+	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
 	// non-interface field appearing in ForceSendFields will be sent to the
 	// server regardless of whether the field is empty or not. This may be
 	// used to include empty fields in Patch requests.
 	ForceSendFields []string `json:"-"`
 
-	// NullFields is a list of field names (e.g. "MaintenanceWindow") to
+	// NullFields is a list of field names (e.g. "ConcurrencyLimit") to
 	// include in API requests with the JSON null value. By default, fields
 	// with empty values are omitted from API requests. However, any field
 	// with an empty value appearing in NullFields will be sent to the
@@ -32959,8 +32873,8 @@
 	NullFields []string `json:"-"`
 }
 
-func (s *ResourcePolicyVmMaintenancePolicy) MarshalJSON() ([]byte, error) {
-	type NoMethod ResourcePolicyVmMaintenancePolicy
+func (s *ResourcePolicyVmMaintenancePolicyConcurrencyControl) MarshalJSON() ([]byte, error) {
+	type NoMethod ResourcePolicyVmMaintenancePolicyConcurrencyControl
 	raw := NoMethod(*s)
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
@@ -35227,6 +35141,8 @@
 	// Associations: A list of assocations that belong to this policy.
 	Associations []*SecurityPolicyAssociation `json:"associations,omitempty"`
 
+	CloudArmorConfig *SecurityPolicyCloudArmorConfig `json:"cloudArmorConfig,omitempty"`
+
 	// CreationTimestamp: [Output Only] Creation timestamp in RFC3339 text
 	// format.
 	CreationTimestamp string `json:"creationTimestamp,omitempty"`
@@ -35371,6 +35287,35 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// SecurityPolicyCloudArmorConfig: Configuration options for Cloud
+// Armor.
+type SecurityPolicyCloudArmorConfig struct {
+	// EnableMl: If set to true, enables Cloud Armor Machine Learning.
+	EnableMl bool `json:"enableMl,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "EnableMl") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "EnableMl") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *SecurityPolicyCloudArmorConfig) MarshalJSON() ([]byte, error) {
+	type NoMethod SecurityPolicyCloudArmorConfig
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 type SecurityPolicyList struct {
 	// Id: [Output Only] Unique identifier for the resource; defined by the
 	// server.
@@ -37890,19 +37835,17 @@
 }
 
 type StatefulPolicy struct {
-	PreservedResources *StatefulPolicyPreservedResources `json:"preservedResources,omitempty"`
-
 	PreservedState *StatefulPolicyPreservedState `json:"preservedState,omitempty"`
 
-	// ForceSendFields is a list of field names (e.g. "PreservedResources")
-	// to unconditionally include in API requests. By default, fields with
+	// ForceSendFields is a list of field names (e.g. "PreservedState") to
+	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
 	// non-interface field appearing in ForceSendFields will be sent to the
 	// server regardless of whether the field is empty or not. This may be
 	// used to include empty fields in Patch requests.
 	ForceSendFields []string `json:"-"`
 
-	// NullFields is a list of field names (e.g. "PreservedResources") to
+	// NullFields is a list of field names (e.g. "PreservedState") to
 	// include in API requests with the JSON null value. By default, fields
 	// with empty values are omitted from API requests. However, any field
 	// with an empty value appearing in NullFields will be sent to the
@@ -37918,63 +37861,6 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
-type StatefulPolicyPreservedDisk struct {
-	// DeviceName: Device name of the disk to be preserved
-	DeviceName string `json:"deviceName,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "DeviceName") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "DeviceName") to include in
-	// API requests with the JSON null value. By default, fields with empty
-	// values are omitted from API requests. However, any field with an
-	// empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *StatefulPolicyPreservedDisk) MarshalJSON() ([]byte, error) {
-	type NoMethod StatefulPolicyPreservedDisk
-	raw := NoMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-// StatefulPolicyPreservedResources: Configuration of all preserved
-// resources.
-type StatefulPolicyPreservedResources struct {
-	// Disks: Disks created on the instances that will be preserved on
-	// instance delete, resize down, etc.
-	Disks []*StatefulPolicyPreservedDisk `json:"disks,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "Disks") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "Disks") to include in API
-	// requests with the JSON null value. By default, fields with empty
-	// values are omitted from API requests. However, any field with an
-	// empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *StatefulPolicyPreservedResources) MarshalJSON() ([]byte, error) {
-	type NoMethod StatefulPolicyPreservedResources
-	raw := NoMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
 // StatefulPolicyPreservedState: Configuration of preserved resources.
 type StatefulPolicyPreservedState struct {
 	// Disks: Disks created on the instances that will be preserved on
@@ -38650,9 +38536,10 @@
 	// reported.
 	FlowSampling float64 `json:"flowSampling,omitempty"`
 
-	// Metadata: Can only be specified if VPC flow logging for this
-	// subnetwork is enabled. Configures whether metadata fields should be
-	// added to the reported VPC flow logs. Default is INCLUDE_ALL_METADATA.
+	// Metadata: Can only be specified if VPC flow logs for this subnetwork
+	// is enabled. Configures whether all, none or a subset of metadata
+	// fields should be added to the reported VPC flow logs. Default is
+	// INCLUDE_ALL_METADATA.
 	//
 	// Possible values:
 	//   "EXCLUDE_ALL_METADATA"
@@ -109598,6 +109485,193 @@
 	}
 }
 
+// method id "compute.packetMirrorings.patch":
+
+type PacketMirroringsPatchCall struct {
+	s               *Service
+	project         string
+	region          string
+	packetMirroring string
+	packetmirroring *PacketMirroring
+	urlParams_      gensupport.URLParams
+	ctx_            context.Context
+	header_         http.Header
+}
+
+// Patch: Patches the specified PacketMirroring resource with the data
+// included in the request. This method supports PATCH semantics and
+// uses JSON merge patch format and processing rules.
+func (r *PacketMirroringsService) Patch(project string, region string, packetMirroring string, packetmirroring *PacketMirroring) *PacketMirroringsPatchCall {
+	c := &PacketMirroringsPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.project = project
+	c.region = region
+	c.packetMirroring = packetMirroring
+	c.packetmirroring = packetmirroring
+	return c
+}
+
+// RequestId sets the optional parameter "requestId": An optional
+// request ID to identify requests. Specify a unique request ID so that
+// if you must retry your request, the server will know to ignore the
+// request if it has already been completed.
+//
+// For example, consider a situation where you make an initial request
+// and the request times out. If you make the request again with the
+// same request ID, the server can check if original operation with the
+// same request ID was received, and if so, will ignore the second
+// request. This prevents clients from accidentally creating duplicate
+// commitments.
+//
+// The request ID must be a valid UUID with the exception that zero UUID
+// is not supported (00000000-0000-0000-0000-000000000000).
+func (c *PacketMirroringsPatchCall) RequestId(requestId string) *PacketMirroringsPatchCall {
+	c.urlParams_.Set("requestId", requestId)
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *PacketMirroringsPatchCall) Fields(s ...googleapi.Field) *PacketMirroringsPatchCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *PacketMirroringsPatchCall) Context(ctx context.Context) *PacketMirroringsPatchCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *PacketMirroringsPatchCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *PacketMirroringsPatchCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.packetmirroring)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/packetMirrorings/{packetMirroring}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("PATCH", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"project":         c.project,
+		"region":          c.region,
+		"packetMirroring": c.packetMirroring,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "compute.packetMirrorings.patch" call.
+// Exactly one of *Operation or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *Operation.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *PacketMirroringsPatchCall) Do(opts ...googleapi.CallOption) (*Operation, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Operation{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Patches the specified PacketMirroring resource with the data included in the request. This method supports PATCH semantics and uses JSON merge patch format and processing rules.",
+	//   "httpMethod": "PATCH",
+	//   "id": "compute.packetMirrorings.patch",
+	//   "parameterOrder": [
+	//     "project",
+	//     "region",
+	//     "packetMirroring"
+	//   ],
+	//   "parameters": {
+	//     "packetMirroring": {
+	//       "description": "Name of the PacketMirroring resource to patch.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?|[1-9][0-9]{0,19}",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "project": {
+	//       "description": "Project ID for this request.",
+	//       "location": "path",
+	//       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "region": {
+	//       "description": "Name of the region for this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "requestId": {
+	//       "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed.\n\nFor example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments.\n\nThe request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/regions/{region}/packetMirrorings/{packetMirroring}",
+	//   "request": {
+	//     "$ref": "PacketMirroring"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
 // method id "compute.packetMirrorings.testIamPermissions":
 
 type PacketMirroringsTestIamPermissionsCall struct {
@@ -138787,7 +138861,10 @@
 }
 
 // Update: Updates the specified Router resource with the data included
-// in the request.
+// in the request. This method conforms to PUT semantics, which requests
+// that the state of the target resource be created or replaced with the
+// state defined by the representation enclosed in the request message
+// payload.
 func (r *RoutersService) Update(project string, region string, router string, router2 *Router) *RoutersUpdateCall {
 	c := &RoutersUpdateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
 	c.project = project
@@ -138908,7 +138985,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Updates the specified Router resource with the data included in the request.",
+	//   "description": "Updates the specified Router resource with the data included in the request. This method conforms to PUT semantics, which requests that the state of the target resource be created or replaced with the state defined by the representation enclosed in the request message payload.",
 	//   "httpMethod": "PUT",
 	//   "id": "compute.routers.update",
 	//   "parameterOrder": [
diff --git a/compute/v0.beta/compute-api.json b/compute/v0.beta/compute-api.json
index 4b64c9d..eddf29b 100644
--- a/compute/v0.beta/compute-api.json
+++ b/compute/v0.beta/compute-api.json
@@ -29,7 +29,7 @@
   "description": "Creates and runs virtual machines on Google Cloud Platform.",
   "discoveryVersion": "v1",
   "documentationLink": "https://developers.google.com/compute/docs/reference/latest/",
-  "etag": "\"9eZ1uxVRThTDhLJCZHhqs3eQWz4/WOi0066EP2QsnYzvZOGl91lCb6A\"",
+  "etag": "\"9eZ1uxVRThTDhLJCZHhqs3eQWz4/jCdf6DOx4OjYPC7yhr7Zwy53EJw\"",
   "icons": {
     "x16": "https://www.google.com/images/icons/product/compute_engine-16.png",
     "x32": "https://www.google.com/images/icons/product/compute_engine-32.png"
@@ -17587,6 +17587,48 @@
             "https://www.googleapis.com/auth/compute.readonly"
           ]
         },
+        "getIamPolicy": {
+          "description": "Gets the access control policy for a resource. May be empty if no such policy or resource exists.",
+          "httpMethod": "GET",
+          "id": "compute.resourcePolicies.getIamPolicy",
+          "parameterOrder": [
+            "project",
+            "region",
+            "resource"
+          ],
+          "parameters": {
+            "project": {
+              "description": "Project ID for this request.",
+              "location": "path",
+              "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+              "required": true,
+              "type": "string"
+            },
+            "region": {
+              "description": "The name of the region for this request.",
+              "location": "path",
+              "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+              "required": true,
+              "type": "string"
+            },
+            "resource": {
+              "description": "Name or id of the resource for this request.",
+              "location": "path",
+              "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?|[1-9][0-9]{0,19}",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "path": "{project}/regions/{region}/resourcePolicies/{resource}/getIamPolicy",
+          "response": {
+            "$ref": "Policy"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/compute",
+            "https://www.googleapis.com/auth/compute.readonly"
+          ]
+        },
         "insert": {
           "description": "Creates a new resource policy.",
           "httpMethod": "POST",
@@ -17685,6 +17727,50 @@
             "https://www.googleapis.com/auth/compute.readonly"
           ]
         },
+        "setIamPolicy": {
+          "description": "Sets the access control policy on the specified resource. Replaces any existing policy.",
+          "httpMethod": "POST",
+          "id": "compute.resourcePolicies.setIamPolicy",
+          "parameterOrder": [
+            "project",
+            "region",
+            "resource"
+          ],
+          "parameters": {
+            "project": {
+              "description": "Project ID for this request.",
+              "location": "path",
+              "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+              "required": true,
+              "type": "string"
+            },
+            "region": {
+              "description": "The name of the region for this request.",
+              "location": "path",
+              "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+              "required": true,
+              "type": "string"
+            },
+            "resource": {
+              "description": "Name or id of the resource for this request.",
+              "location": "path",
+              "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?|[1-9][0-9]{0,19}",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "path": "{project}/regions/{region}/resourcePolicies/{resource}/setIamPolicy",
+          "request": {
+            "$ref": "RegionSetPolicyRequest"
+          },
+          "response": {
+            "$ref": "Policy"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/compute"
+          ]
+        },
         "testIamPermissions": {
           "description": "Returns permissions that a caller has on the specified resource.",
           "httpMethod": "POST",
@@ -18216,7 +18302,7 @@
           ]
         },
         "update": {
-          "description": "Updates the specified Router resource with the data included in the request.",
+          "description": "Updates the specified Router resource with the data included in the request. This method conforms to PUT semantics, which requests that the state of the target resource be created or replaced with the state defined by the representation enclosed in the request message payload.",
           "httpMethod": "PUT",
           "id": "compute.routers.update",
           "parameterOrder": [
@@ -24100,7 +24186,7 @@
       }
     }
   },
-  "revision": "20190530",
+  "revision": "20190607",
   "rootUrl": "https://www.googleapis.com/",
   "schemas": {
     "AcceleratorConfig": {
@@ -37711,7 +37797,7 @@
       "type": "object"
     },
     "NodeTemplate": {
-      "description": "Represent a sole-tenant Node Template resource.\n\nYou can use a template to define properties for nodes in a node group. For more information, read Creating node groups and instances. (== resource_for beta.nodeTemplates ==) (== resource_for v1.nodeTemplates ==) NextID: 16",
+      "description": "Represent a sole-tenant Node Template resource.\n\nYou can use a template to define properties for nodes in a node group. For more information, read Creating node groups and instances. (== resource_for beta.nodeTemplates ==) (== resource_for v1.nodeTemplates ==) (== NextID: 16 ==)",
       "id": "NodeTemplate",
       "properties": {
         "creationTimestamp": {
@@ -37761,7 +37847,7 @@
         },
         "serverBinding": {
           "$ref": "ServerBinding",
-          "description": "Binding properties for the physical server."
+          "description": "Sets the binding properties for the physical server. Valid values include:  \n- [Default] RESTART_NODE_ON_ANY_SERVER: Restarts VMs on any available physical server \n- RESTART_NODE_ON_MINIMAL_SERVER: Restarts VMs on the same physical server whenever possible  \n\nSee Sole-tenant node options for more information."
         },
         "status": {
           "description": "[Output Only] The status of the node template. One of the following values: CREATING, READY, and DELETING.",
@@ -40679,7 +40765,7 @@
       "type": "object"
     },
     "ReservationAffinity": {
-      "description": "AllocationAffinity is the configuration of desired allocation which this instance could take capacity from.",
+      "description": "ReservationAffinity is the configuration of desired reservation which this instance could take capacity from.",
       "id": "ReservationAffinity",
       "properties": {
         "consumeReservationType": {
@@ -44879,7 +44965,7 @@
           "type": "number"
         },
         "metadata": {
-          "description": "Can only be specified if VPC flow logging for this subnetwork is enabled. Configures whether metadata fields should be added to the reported VPC flow logs. Default is INCLUDE_ALL_METADATA.",
+          "description": "Can only be specified if VPC flow logs for this subnetwork is enabled. Configures whether all, none or a subset of metadata fields should be added to the reported VPC flow logs. Default is INCLUDE_ALL_METADATA.",
           "enum": [
             "EXCLUDE_ALL_METADATA",
             "INCLUDE_ALL_METADATA"
diff --git a/compute/v0.beta/compute-gen.go b/compute/v0.beta/compute-gen.go
index a53f683..f30e54a 100644
--- a/compute/v0.beta/compute-gen.go
+++ b/compute/v0.beta/compute-gen.go
@@ -21661,7 +21661,7 @@
 // You can use a template to define properties for nodes in a node
 // group. For more information, read Creating node groups and instances.
 // (== resource_for beta.nodeTemplates ==) (== resource_for
-// v1.nodeTemplates ==) NextID: 16
+// v1.nodeTemplates ==) (== NextID: 16 ==)
 type NodeTemplate struct {
 	// CreationTimestamp: [Output Only] Creation timestamp in RFC3339 text
 	// format.
@@ -21712,7 +21712,14 @@
 	// SelfLink: [Output Only] Server-defined URL for the resource.
 	SelfLink string `json:"selfLink,omitempty"`
 
-	// ServerBinding: Binding properties for the physical server.
+	// ServerBinding: Sets the binding properties for the physical server.
+	// Valid values include:
+	// - [Default] RESTART_NODE_ON_ANY_SERVER: Restarts VMs on any available
+	// physical server
+	// - RESTART_NODE_ON_MINIMAL_SERVER: Restarts VMs on the same physical
+	// server whenever possible
+	//
+	// See Sole-tenant node options for more information.
 	ServerBinding *ServerBinding `json:"serverBinding,omitempty"`
 
 	// Status: [Output Only] The status of the node template. One of the
@@ -26029,8 +26036,8 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
-// ReservationAffinity: AllocationAffinity is the configuration of
-// desired allocation which this instance could take capacity from.
+// ReservationAffinity: ReservationAffinity is the configuration of
+// desired reservation which this instance could take capacity from.
 type ReservationAffinity struct {
 	// ConsumeReservationType: Specifies the type of reservation from which
 	// this instance can consume resources: ANY_RESERVATION (default),
@@ -32037,9 +32044,10 @@
 	// reported.
 	FlowSampling float64 `json:"flowSampling,omitempty"`
 
-	// Metadata: Can only be specified if VPC flow logging for this
-	// subnetwork is enabled. Configures whether metadata fields should be
-	// added to the reported VPC flow logs. Default is INCLUDE_ALL_METADATA.
+	// Metadata: Can only be specified if VPC flow logs for this subnetwork
+	// is enabled. Configures whether all, none or a subset of metadata
+	// fields should be added to the reported VPC flow logs. Default is
+	// INCLUDE_ALL_METADATA.
 	//
 	// Possible values:
 	//   "EXCLUDE_ALL_METADATA"
@@ -112611,6 +112619,173 @@
 
 }
 
+// method id "compute.resourcePolicies.getIamPolicy":
+
+type ResourcePoliciesGetIamPolicyCall struct {
+	s            *Service
+	project      string
+	region       string
+	resource     string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// GetIamPolicy: Gets the access control policy for a resource. May be
+// empty if no such policy or resource exists.
+func (r *ResourcePoliciesService) GetIamPolicy(project string, region string, resource string) *ResourcePoliciesGetIamPolicyCall {
+	c := &ResourcePoliciesGetIamPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.project = project
+	c.region = region
+	c.resource = resource
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ResourcePoliciesGetIamPolicyCall) Fields(s ...googleapi.Field) *ResourcePoliciesGetIamPolicyCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// IfNoneMatch sets the optional parameter which makes the operation
+// fail if the object's ETag matches the given value. This is useful for
+// getting updates only after the object has changed since the last
+// request. Use googleapi.IsNotModified to check whether the response
+// error from Do is the result of In-None-Match.
+func (c *ResourcePoliciesGetIamPolicyCall) IfNoneMatch(entityTag string) *ResourcePoliciesGetIamPolicyCall {
+	c.ifNoneMatch_ = entityTag
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ResourcePoliciesGetIamPolicyCall) Context(ctx context.Context) *ResourcePoliciesGetIamPolicyCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ResourcePoliciesGetIamPolicyCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ResourcePoliciesGetIamPolicyCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/resourcePolicies/{resource}/getIamPolicy")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"project":  c.project,
+		"region":   c.region,
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "compute.resourcePolicies.getIamPolicy" call.
+// Exactly one of *Policy or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Policy.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *ResourcePoliciesGetIamPolicyCall) Do(opts ...googleapi.CallOption) (*Policy, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Policy{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets the access control policy for a resource. May be empty if no such policy or resource exists.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.resourcePolicies.getIamPolicy",
+	//   "parameterOrder": [
+	//     "project",
+	//     "region",
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "project": {
+	//       "description": "Project ID for this request.",
+	//       "location": "path",
+	//       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "region": {
+	//       "description": "The name of the region for this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "resource": {
+	//       "description": "Name or id of the resource for this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?|[1-9][0-9]{0,19}",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/regions/{region}/resourcePolicies/{resource}/getIamPolicy",
+	//   "response": {
+	//     "$ref": "Policy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
 // method id "compute.resourcePolicies.insert":
 
 type ResourcePoliciesInsertCall struct {
@@ -113048,6 +113223,168 @@
 	}
 }
 
+// method id "compute.resourcePolicies.setIamPolicy":
+
+type ResourcePoliciesSetIamPolicyCall struct {
+	s                      *Service
+	project                string
+	region                 string
+	resource               string
+	regionsetpolicyrequest *RegionSetPolicyRequest
+	urlParams_             gensupport.URLParams
+	ctx_                   context.Context
+	header_                http.Header
+}
+
+// SetIamPolicy: Sets the access control policy on the specified
+// resource. Replaces any existing policy.
+func (r *ResourcePoliciesService) SetIamPolicy(project string, region string, resource string, regionsetpolicyrequest *RegionSetPolicyRequest) *ResourcePoliciesSetIamPolicyCall {
+	c := &ResourcePoliciesSetIamPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.project = project
+	c.region = region
+	c.resource = resource
+	c.regionsetpolicyrequest = regionsetpolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ResourcePoliciesSetIamPolicyCall) Fields(s ...googleapi.Field) *ResourcePoliciesSetIamPolicyCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ResourcePoliciesSetIamPolicyCall) Context(ctx context.Context) *ResourcePoliciesSetIamPolicyCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ResourcePoliciesSetIamPolicyCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ResourcePoliciesSetIamPolicyCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.regionsetpolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/resourcePolicies/{resource}/setIamPolicy")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"project":  c.project,
+		"region":   c.region,
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "compute.resourcePolicies.setIamPolicy" call.
+// Exactly one of *Policy or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Policy.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *ResourcePoliciesSetIamPolicyCall) Do(opts ...googleapi.CallOption) (*Policy, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Policy{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Sets the access control policy on the specified resource. Replaces any existing policy.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.resourcePolicies.setIamPolicy",
+	//   "parameterOrder": [
+	//     "project",
+	//     "region",
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "project": {
+	//       "description": "Project ID for this request.",
+	//       "location": "path",
+	//       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "region": {
+	//       "description": "The name of the region for this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "resource": {
+	//       "description": "Name or id of the resource for this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?|[1-9][0-9]{0,19}",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/regions/{region}/resourcePolicies/{resource}/setIamPolicy",
+	//   "request": {
+	//     "$ref": "RegionSetPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Policy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
 // method id "compute.resourcePolicies.testIamPermissions":
 
 type ResourcePoliciesTestIamPermissionsCall struct {
@@ -115211,7 +115548,10 @@
 }
 
 // Update: Updates the specified Router resource with the data included
-// in the request.
+// in the request. This method conforms to PUT semantics, which requests
+// that the state of the target resource be created or replaced with the
+// state defined by the representation enclosed in the request message
+// payload.
 func (r *RoutersService) Update(project string, region string, router string, router2 *Router) *RoutersUpdateCall {
 	c := &RoutersUpdateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
 	c.project = project
@@ -115332,7 +115672,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Updates the specified Router resource with the data included in the request.",
+	//   "description": "Updates the specified Router resource with the data included in the request. This method conforms to PUT semantics, which requests that the state of the target resource be created or replaced with the state defined by the representation enclosed in the request message payload.",
 	//   "httpMethod": "PUT",
 	//   "id": "compute.routers.update",
 	//   "parameterOrder": [
diff --git a/compute/v1/compute-api.json b/compute/v1/compute-api.json
index a3060fd..0b67a1c 100644
--- a/compute/v1/compute-api.json
+++ b/compute/v1/compute-api.json
@@ -29,7 +29,7 @@
   "description": "Creates and runs virtual machines on Google Cloud Platform.",
   "discoveryVersion": "v1",
   "documentationLink": "https://developers.google.com/compute/docs/reference/latest/",
-  "etag": "\"9eZ1uxVRThTDhLJCZHhqs3eQWz4/kG6nGNXck7CmI0zhyV65F_DBbKw\"",
+  "etag": "\"9eZ1uxVRThTDhLJCZHhqs3eQWz4/QPp01-pQWovnKomfKhTDs6ph1VE\"",
   "icons": {
     "x16": "https://www.google.com/images/icons/product/compute_engine-16.png",
     "x32": "https://www.google.com/images/icons/product/compute_engine-32.png"
@@ -13445,6 +13445,425 @@
         }
       }
     },
+    "reservations": {
+      "methods": {
+        "aggregatedList": {
+          "description": "Retrieves an aggregated list of reservations.",
+          "httpMethod": "GET",
+          "id": "compute.reservations.aggregatedList",
+          "parameterOrder": [
+            "project"
+          ],
+          "parameters": {
+            "filter": {
+              "description": "A filter expression that filters resources listed in the response. The expression must specify the field name, a comparison operator, and the value that you want to use for filtering. The value must be a string, a number, or a boolean. The comparison operator must be either =, !=, \u003e, or \u003c.\n\nFor example, if you are filtering Compute Engine instances, you can exclude instances named example-instance by specifying name != example-instance.\n\nYou can also filter nested fields. For example, you could specify scheduling.automaticRestart = false to include instances only if they are not scheduled for automatic restarts. You can use filtering on nested fields to filter based on resource labels.\n\nTo filter on multiple expressions, provide each separate expression within parentheses. For example, (scheduling.automaticRestart = true) (cpuPlatform = \"Intel Skylake\"). By default, each expression is an AND expression. However, you can include AND and OR expressions explicitly. For example, (cpuPlatform = \"Intel Skylake\") OR (cpuPlatform = \"Intel Broadwell\") AND (scheduling.automaticRestart = true).",
+              "location": "query",
+              "type": "string"
+            },
+            "maxResults": {
+              "default": "500",
+              "description": "The maximum number of results per page that should be returned. If the number of available results is larger than maxResults, Compute Engine returns a nextPageToken that can be used to get the next page of results in subsequent list requests. Acceptable values are 0 to 500, inclusive. (Default: 500)",
+              "format": "uint32",
+              "location": "query",
+              "minimum": "0",
+              "type": "integer"
+            },
+            "orderBy": {
+              "description": "Sorts list results by a certain order. By default, results are returned in alphanumerical order based on the resource name.\n\nYou can also sort results in descending order based on the creation timestamp using orderBy=\"creationTimestamp desc\". This sorts results based on the creationTimestamp field in reverse chronological order (newest result first). Use this to sort resources like operations so that the newest operation is returned first.\n\nCurrently, only sorting by name or creationTimestamp desc is supported.",
+              "location": "query",
+              "type": "string"
+            },
+            "pageToken": {
+              "description": "Specifies a page token to use. Set pageToken to the nextPageToken returned by a previous list request to get the next page of results.",
+              "location": "query",
+              "type": "string"
+            },
+            "project": {
+              "description": "Project ID for this request.",
+              "location": "path",
+              "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "path": "{project}/aggregated/reservations",
+          "response": {
+            "$ref": "ReservationAggregatedList"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/compute",
+            "https://www.googleapis.com/auth/compute.readonly"
+          ]
+        },
+        "delete": {
+          "description": "Deletes the specified reservation.",
+          "httpMethod": "DELETE",
+          "id": "compute.reservations.delete",
+          "parameterOrder": [
+            "project",
+            "zone",
+            "reservation"
+          ],
+          "parameters": {
+            "project": {
+              "description": "Project ID for this request.",
+              "location": "path",
+              "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+              "required": true,
+              "type": "string"
+            },
+            "requestId": {
+              "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed.\n\nFor example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments.\n\nThe request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
+              "location": "query",
+              "type": "string"
+            },
+            "reservation": {
+              "description": "Name of the reservation to delete.",
+              "location": "path",
+              "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?|[1-9][0-9]{0,19}",
+              "required": true,
+              "type": "string"
+            },
+            "zone": {
+              "description": "Name of the zone for this request.",
+              "location": "path",
+              "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "path": "{project}/zones/{zone}/reservations/{reservation}",
+          "response": {
+            "$ref": "Operation"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/compute"
+          ]
+        },
+        "get": {
+          "description": "Retrieves all information of the specified reservation.",
+          "httpMethod": "GET",
+          "id": "compute.reservations.get",
+          "parameterOrder": [
+            "project",
+            "zone",
+            "reservation"
+          ],
+          "parameters": {
+            "project": {
+              "description": "Project ID for this request.",
+              "location": "path",
+              "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+              "required": true,
+              "type": "string"
+            },
+            "reservation": {
+              "description": "Name of the reservation to retrieve.",
+              "location": "path",
+              "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?|[1-9][0-9]{0,19}",
+              "required": true,
+              "type": "string"
+            },
+            "zone": {
+              "description": "Name of the zone for this request.",
+              "location": "path",
+              "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "path": "{project}/zones/{zone}/reservations/{reservation}",
+          "response": {
+            "$ref": "Reservation"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/compute",
+            "https://www.googleapis.com/auth/compute.readonly"
+          ]
+        },
+        "getIamPolicy": {
+          "description": "Gets the access control policy for a resource. May be empty if no such policy or resource exists.",
+          "httpMethod": "GET",
+          "id": "compute.reservations.getIamPolicy",
+          "parameterOrder": [
+            "project",
+            "zone",
+            "resource"
+          ],
+          "parameters": {
+            "project": {
+              "description": "Project ID for this request.",
+              "location": "path",
+              "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+              "required": true,
+              "type": "string"
+            },
+            "resource": {
+              "description": "Name or id of the resource for this request.",
+              "location": "path",
+              "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?|[1-9][0-9]{0,19}",
+              "required": true,
+              "type": "string"
+            },
+            "zone": {
+              "description": "The name of the zone for this request.",
+              "location": "path",
+              "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "path": "{project}/zones/{zone}/reservations/{resource}/getIamPolicy",
+          "response": {
+            "$ref": "Policy"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/compute",
+            "https://www.googleapis.com/auth/compute.readonly"
+          ]
+        },
+        "insert": {
+          "description": "Creates a new reservation.",
+          "httpMethod": "POST",
+          "id": "compute.reservations.insert",
+          "parameterOrder": [
+            "project",
+            "zone"
+          ],
+          "parameters": {
+            "project": {
+              "description": "Project ID for this request.",
+              "location": "path",
+              "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+              "required": true,
+              "type": "string"
+            },
+            "requestId": {
+              "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed.\n\nFor example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments.\n\nThe request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
+              "location": "query",
+              "type": "string"
+            },
+            "zone": {
+              "description": "Name of the zone for this request.",
+              "location": "path",
+              "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "path": "{project}/zones/{zone}/reservations",
+          "request": {
+            "$ref": "Reservation"
+          },
+          "response": {
+            "$ref": "Operation"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/compute"
+          ]
+        },
+        "list": {
+          "description": "A list all the reservations that have been configured for the specified project in specified zone.",
+          "httpMethod": "GET",
+          "id": "compute.reservations.list",
+          "parameterOrder": [
+            "project",
+            "zone"
+          ],
+          "parameters": {
+            "filter": {
+              "description": "A filter expression that filters resources listed in the response. The expression must specify the field name, a comparison operator, and the value that you want to use for filtering. The value must be a string, a number, or a boolean. The comparison operator must be either =, !=, \u003e, or \u003c.\n\nFor example, if you are filtering Compute Engine instances, you can exclude instances named example-instance by specifying name != example-instance.\n\nYou can also filter nested fields. For example, you could specify scheduling.automaticRestart = false to include instances only if they are not scheduled for automatic restarts. You can use filtering on nested fields to filter based on resource labels.\n\nTo filter on multiple expressions, provide each separate expression within parentheses. For example, (scheduling.automaticRestart = true) (cpuPlatform = \"Intel Skylake\"). By default, each expression is an AND expression. However, you can include AND and OR expressions explicitly. For example, (cpuPlatform = \"Intel Skylake\") OR (cpuPlatform = \"Intel Broadwell\") AND (scheduling.automaticRestart = true).",
+              "location": "query",
+              "type": "string"
+            },
+            "maxResults": {
+              "default": "500",
+              "description": "The maximum number of results per page that should be returned. If the number of available results is larger than maxResults, Compute Engine returns a nextPageToken that can be used to get the next page of results in subsequent list requests. Acceptable values are 0 to 500, inclusive. (Default: 500)",
+              "format": "uint32",
+              "location": "query",
+              "minimum": "0",
+              "type": "integer"
+            },
+            "orderBy": {
+              "description": "Sorts list results by a certain order. By default, results are returned in alphanumerical order based on the resource name.\n\nYou can also sort results in descending order based on the creation timestamp using orderBy=\"creationTimestamp desc\". This sorts results based on the creationTimestamp field in reverse chronological order (newest result first). Use this to sort resources like operations so that the newest operation is returned first.\n\nCurrently, only sorting by name or creationTimestamp desc is supported.",
+              "location": "query",
+              "type": "string"
+            },
+            "pageToken": {
+              "description": "Specifies a page token to use. Set pageToken to the nextPageToken returned by a previous list request to get the next page of results.",
+              "location": "query",
+              "type": "string"
+            },
+            "project": {
+              "description": "Project ID for this request.",
+              "location": "path",
+              "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+              "required": true,
+              "type": "string"
+            },
+            "zone": {
+              "description": "Name of the zone for this request.",
+              "location": "path",
+              "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "path": "{project}/zones/{zone}/reservations",
+          "response": {
+            "$ref": "ReservationList"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/compute",
+            "https://www.googleapis.com/auth/compute.readonly"
+          ]
+        },
+        "resize": {
+          "description": "Resizes the reservation (applicable to standalone reservations only)",
+          "httpMethod": "POST",
+          "id": "compute.reservations.resize",
+          "parameterOrder": [
+            "project",
+            "zone",
+            "reservation"
+          ],
+          "parameters": {
+            "project": {
+              "description": "Project ID for this request.",
+              "location": "path",
+              "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+              "required": true,
+              "type": "string"
+            },
+            "requestId": {
+              "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed.\n\nFor example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments.\n\nThe request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
+              "location": "query",
+              "type": "string"
+            },
+            "reservation": {
+              "description": "Name of the reservation to update.",
+              "location": "path",
+              "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+              "required": true,
+              "type": "string"
+            },
+            "zone": {
+              "description": "Name of the zone for this request.",
+              "location": "path",
+              "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "path": "{project}/zones/{zone}/reservations/{reservation}/resize",
+          "request": {
+            "$ref": "ReservationsResizeRequest"
+          },
+          "response": {
+            "$ref": "Operation"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/compute"
+          ]
+        },
+        "setIamPolicy": {
+          "description": "Sets the access control policy on the specified resource. Replaces any existing policy.",
+          "httpMethod": "POST",
+          "id": "compute.reservations.setIamPolicy",
+          "parameterOrder": [
+            "project",
+            "zone",
+            "resource"
+          ],
+          "parameters": {
+            "project": {
+              "description": "Project ID for this request.",
+              "location": "path",
+              "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+              "required": true,
+              "type": "string"
+            },
+            "resource": {
+              "description": "Name or id of the resource for this request.",
+              "location": "path",
+              "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?|[1-9][0-9]{0,19}",
+              "required": true,
+              "type": "string"
+            },
+            "zone": {
+              "description": "The name of the zone for this request.",
+              "location": "path",
+              "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "path": "{project}/zones/{zone}/reservations/{resource}/setIamPolicy",
+          "request": {
+            "$ref": "ZoneSetPolicyRequest"
+          },
+          "response": {
+            "$ref": "Policy"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/compute"
+          ]
+        },
+        "testIamPermissions": {
+          "description": "Returns permissions that a caller has on the specified resource.",
+          "httpMethod": "POST",
+          "id": "compute.reservations.testIamPermissions",
+          "parameterOrder": [
+            "project",
+            "zone",
+            "resource"
+          ],
+          "parameters": {
+            "project": {
+              "description": "Project ID for this request.",
+              "location": "path",
+              "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+              "required": true,
+              "type": "string"
+            },
+            "resource": {
+              "description": "Name or id of the resource for this request.",
+              "location": "path",
+              "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?|[1-9][0-9]{0,19}",
+              "required": true,
+              "type": "string"
+            },
+            "zone": {
+              "description": "The name of the zone for this request.",
+              "location": "path",
+              "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "path": "{project}/zones/{zone}/reservations/{resource}/testIamPermissions",
+          "request": {
+            "$ref": "TestPermissionsRequest"
+          },
+          "response": {
+            "$ref": "TestPermissionsResponse"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/compute",
+            "https://www.googleapis.com/auth/compute.readonly"
+          ]
+        }
+      }
+    },
     "resourcePolicies": {
       "methods": {
         "aggregatedList": {
@@ -13584,6 +14003,48 @@
             "https://www.googleapis.com/auth/compute.readonly"
           ]
         },
+        "getIamPolicy": {
+          "description": "Gets the access control policy for a resource. May be empty if no such policy or resource exists.",
+          "httpMethod": "GET",
+          "id": "compute.resourcePolicies.getIamPolicy",
+          "parameterOrder": [
+            "project",
+            "region",
+            "resource"
+          ],
+          "parameters": {
+            "project": {
+              "description": "Project ID for this request.",
+              "location": "path",
+              "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+              "required": true,
+              "type": "string"
+            },
+            "region": {
+              "description": "The name of the region for this request.",
+              "location": "path",
+              "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+              "required": true,
+              "type": "string"
+            },
+            "resource": {
+              "description": "Name or id of the resource for this request.",
+              "location": "path",
+              "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?|[1-9][0-9]{0,19}",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "path": "{project}/regions/{region}/resourcePolicies/{resource}/getIamPolicy",
+          "response": {
+            "$ref": "Policy"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/compute",
+            "https://www.googleapis.com/auth/compute.readonly"
+          ]
+        },
         "insert": {
           "description": "Creates a new resource policy.",
           "httpMethod": "POST",
@@ -13682,6 +14143,50 @@
             "https://www.googleapis.com/auth/compute.readonly"
           ]
         },
+        "setIamPolicy": {
+          "description": "Sets the access control policy on the specified resource. Replaces any existing policy.",
+          "httpMethod": "POST",
+          "id": "compute.resourcePolicies.setIamPolicy",
+          "parameterOrder": [
+            "project",
+            "region",
+            "resource"
+          ],
+          "parameters": {
+            "project": {
+              "description": "Project ID for this request.",
+              "location": "path",
+              "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+              "required": true,
+              "type": "string"
+            },
+            "region": {
+              "description": "The name of the region for this request.",
+              "location": "path",
+              "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+              "required": true,
+              "type": "string"
+            },
+            "resource": {
+              "description": "Name or id of the resource for this request.",
+              "location": "path",
+              "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?|[1-9][0-9]{0,19}",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "path": "{project}/regions/{region}/resourcePolicies/{resource}/setIamPolicy",
+          "request": {
+            "$ref": "RegionSetPolicyRequest"
+          },
+          "response": {
+            "$ref": "Policy"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/compute"
+          ]
+        },
         "testIamPermissions": {
           "description": "Returns permissions that a caller has on the specified resource.",
           "httpMethod": "POST",
@@ -14168,7 +14673,7 @@
           ]
         },
         "update": {
-          "description": "Updates the specified Router resource with the data included in the request.",
+          "description": "Updates the specified Router resource with the data included in the request. This method conforms to PUT semantics, which requests that the state of the target resource be created or replaced with the state defined by the representation enclosed in the request message payload.",
           "httpMethod": "PUT",
           "id": "compute.routers.update",
           "parameterOrder": [
@@ -18847,7 +19352,7 @@
       }
     }
   },
-  "revision": "20190530",
+  "revision": "20190607",
   "rootUrl": "https://www.googleapis.com/",
   "schemas": {
     "AcceleratorConfig": {
@@ -19752,6 +20257,79 @@
       },
       "type": "object"
     },
+    "AllocationSpecificSKUAllocationAllocatedInstancePropertiesReservedDisk": {
+      "id": "AllocationSpecificSKUAllocationAllocatedInstancePropertiesReservedDisk",
+      "properties": {
+        "diskSizeGb": {
+          "description": "Specifies the size of the disk in base-2 GB.",
+          "format": "int64",
+          "type": "string"
+        },
+        "interface": {
+          "description": "Specifies the disk interface to use for attaching this disk, which is either SCSI or NVME. The default is SCSI. For performance characteristics of SCSI over NVMe, see Local SSD performance.",
+          "enum": [
+            "NVME",
+            "SCSI"
+          ],
+          "enumDescriptions": [
+            "",
+            ""
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "AllocationSpecificSKUAllocationReservedInstanceProperties": {
+      "description": "Properties of the SKU instances being reserved.",
+      "id": "AllocationSpecificSKUAllocationReservedInstanceProperties",
+      "properties": {
+        "guestAccelerators": {
+          "description": "Specifies accelerator type and count.",
+          "items": {
+            "$ref": "AcceleratorConfig"
+          },
+          "type": "array"
+        },
+        "localSsds": {
+          "description": "Specifies amount of local ssd to reserve with each instance. The type of disk is local-ssd.",
+          "items": {
+            "$ref": "AllocationSpecificSKUAllocationAllocatedInstancePropertiesReservedDisk"
+          },
+          "type": "array"
+        },
+        "machineType": {
+          "description": "Specifies type of machine (name only) which has fixed number of vCPUs and fixed amount of memory. This also includes specifying custom machine type following custom-NUMBER_OF_CPUS-AMOUNT_OF_MEMORY pattern.",
+          "type": "string"
+        },
+        "minCpuPlatform": {
+          "description": "Minimum cpu platform the reservation.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "AllocationSpecificSKUReservation": {
+      "description": "This reservation type allows to pre allocate specific instance configuration.",
+      "id": "AllocationSpecificSKUReservation",
+      "properties": {
+        "count": {
+          "description": "Specifies number of resources that are allocated.",
+          "format": "int64",
+          "type": "string"
+        },
+        "inUseCount": {
+          "description": "[OutputOnly] Indicates how many resource are in use.",
+          "format": "int64",
+          "type": "string"
+        },
+        "instanceProperties": {
+          "$ref": "AllocationSpecificSKUAllocationReservedInstanceProperties",
+          "description": "The instance properties for this specific sku reservation."
+        }
+      },
+      "type": "object"
+    },
     "AttachedDisk": {
       "description": "An instance-attached disk resource.",
       "id": "AttachedDisk",
@@ -21419,6 +21997,13 @@
           "description": "[Output Only] URL of the region where this commitment may be used.",
           "type": "string"
         },
+        "reservations": {
+          "description": "List of reservations for this commitment.",
+          "items": {
+            "$ref": "Reservation"
+          },
+          "type": "array"
+        },
         "resources": {
           "description": "A list of commitment amounts for particular resources. Note that VCPU and MEMORY resource commitments must occur together.",
           "items": {
@@ -25055,6 +25640,10 @@
           },
           "type": "array"
         },
+        "reservationAffinity": {
+          "$ref": "ReservationAffinity",
+          "description": "The configuration of desired reservations from which this Instance can consume capacity from."
+        },
         "scheduling": {
           "$ref": "Scheduling",
           "description": "Sets the scheduling options for this instance."
@@ -26748,6 +27337,10 @@
           },
           "type": "array"
         },
+        "reservationAffinity": {
+          "$ref": "ReservationAffinity",
+          "description": "The configuration of desired reservations which this Instance could consume capacity from."
+        },
         "scheduling": {
           "$ref": "Scheduling",
           "description": "Specifies the scheduling options for the instances that are created from this template."
@@ -30813,7 +31406,7 @@
       "type": "object"
     },
     "NodeTemplate": {
-      "description": "Represent a sole-tenant Node Template resource.\n\nYou can use a template to define properties for nodes in a node group. For more information, read Creating node groups and instances. (== resource_for beta.nodeTemplates ==) (== resource_for v1.nodeTemplates ==) NextID: 16",
+      "description": "Represent a sole-tenant Node Template resource.\n\nYou can use a template to define properties for nodes in a node group. For more information, read Creating node groups and instances. (== resource_for beta.nodeTemplates ==) (== resource_for v1.nodeTemplates ==) (== NextID: 16 ==)",
       "id": "NodeTemplate",
       "properties": {
         "creationTimestamp": {
@@ -30863,7 +31456,7 @@
         },
         "serverBinding": {
           "$ref": "ServerBinding",
-          "description": "Binding properties for the physical server."
+          "description": "Sets the binding properties for the physical server. Valid values include:  \n- [Default] RESTART_NODE_ON_ANY_SERVER: Restarts VMs on any available physical server \n- RESTART_NODE_ON_MINIMAL_SERVER: Restarts VMs on the same physical server whenever possible  \n\nSee Sole-tenant node options for more information."
         },
         "status": {
           "description": "[Output Only] The status of the node template. One of the following values: CREATING, READY, and DELETING.",
@@ -33498,10 +34091,450 @@
       },
       "type": "object"
     },
+    "Reservation": {
+      "description": "Reservation resource NextID: 13",
+      "id": "Reservation",
+      "properties": {
+        "commitment": {
+          "description": "[OutputOnly] Full or partial url for parent commitment for reservations which are tied to a commitment.",
+          "type": "string"
+        },
+        "creationTimestamp": {
+          "description": "[Output Only] Creation timestamp in RFC3339 text format.",
+          "type": "string"
+        },
+        "description": {
+          "description": "An optional description of this resource. Provide this property when you create the resource.",
+          "type": "string"
+        },
+        "id": {
+          "description": "[Output Only] The unique identifier for the resource. This identifier is defined by the server.",
+          "format": "uint64",
+          "type": "string"
+        },
+        "kind": {
+          "default": "compute#reservation",
+          "description": "[Output Only] Type of the resource. Always compute#reservations for reservations.",
+          "type": "string"
+        },
+        "name": {
+          "annotations": {
+            "required": [
+              "compute.instances.insert"
+            ]
+          },
+          "description": "The name of the resource, provided by the client when initially creating the resource. The resource name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.",
+          "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+          "type": "string"
+        },
+        "selfLink": {
+          "description": "[Output Only] Server-defined fully-qualified URL for this resource.",
+          "type": "string"
+        },
+        "specificReservation": {
+          "$ref": "AllocationSpecificSKUReservation",
+          "description": "Reservation for instances with specific machine shapes."
+        },
+        "specificReservationRequired": {
+          "description": "Indicates whether the reservation can be consumed by VMs with \"any reservation\" defined. If the field is set, then only VMs that target the reservation by name using --reservation-affinity can consume this reservation.",
+          "type": "boolean"
+        },
+        "status": {
+          "description": "[Output Only] The status of the reservation.",
+          "enum": [
+            "CREATING",
+            "DELETING",
+            "INVALID",
+            "READY",
+            "UPDATING"
+          ],
+          "enumDescriptions": [
+            "",
+            "",
+            "",
+            "",
+            ""
+          ],
+          "type": "string"
+        },
+        "zone": {
+          "description": "Zone in which the reservation resides, must be provided if reservation is created with commitment creation.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "ReservationAffinity": {
+      "description": "ReservationAffinity is the configuration of desired reservation which this instance could take capacity from.",
+      "id": "ReservationAffinity",
+      "properties": {
+        "consumeReservationType": {
+          "description": "Specifies the type of reservation from which this instance can consume resources: ANY_RESERVATION (default), SPECIFIC_RESERVATION, or NO_RESERVATION. See  Consuming reserved instances for examples.",
+          "enum": [
+            "ANY_RESERVATION",
+            "NO_RESERVATION",
+            "SPECIFIC_RESERVATION",
+            "UNSPECIFIED"
+          ],
+          "enumDescriptions": [
+            "",
+            "",
+            "",
+            ""
+          ],
+          "type": "string"
+        },
+        "key": {
+          "description": "Corresponds to the label key of reservation resource.",
+          "type": "string"
+        },
+        "values": {
+          "description": "Corresponds to the label values of reservation resource.",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "ReservationAggregatedList": {
+      "description": "Contains a list of reservations.",
+      "id": "ReservationAggregatedList",
+      "properties": {
+        "id": {
+          "description": "[Output Only] Unique identifier for the resource; defined by the server.",
+          "type": "string"
+        },
+        "items": {
+          "additionalProperties": {
+            "$ref": "ReservationsScopedList",
+            "description": "Name of the scope containing this set of reservations."
+          },
+          "description": "A list of Allocation resources.",
+          "type": "object"
+        },
+        "kind": {
+          "default": "compute#reservationAggregatedList",
+          "description": "Type of resource.",
+          "type": "string"
+        },
+        "nextPageToken": {
+          "description": "[Output Only] This token allows you to get the next page of results for list requests. If the number of results is larger than maxResults, use the nextPageToken as a value for the query parameter pageToken in the next list request. Subsequent list requests will have their own nextPageToken to continue paging through the results.",
+          "type": "string"
+        },
+        "selfLink": {
+          "description": "[Output Only] Server-defined URL for this resource.",
+          "type": "string"
+        },
+        "warning": {
+          "description": "[Output Only] Informational warning message.",
+          "properties": {
+            "code": {
+              "description": "[Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.",
+              "enum": [
+                "CLEANUP_FAILED",
+                "DEPRECATED_RESOURCE_USED",
+                "DEPRECATED_TYPE_USED",
+                "DISK_SIZE_LARGER_THAN_IMAGE_SIZE",
+                "EXPERIMENTAL_TYPE_USED",
+                "EXTERNAL_API_WARNING",
+                "FIELD_VALUE_OVERRIDEN",
+                "INJECTED_KERNELS_DEPRECATED",
+                "MISSING_TYPE_DEPENDENCY",
+                "NEXT_HOP_ADDRESS_NOT_ASSIGNED",
+                "NEXT_HOP_CANNOT_IP_FORWARD",
+                "NEXT_HOP_INSTANCE_NOT_FOUND",
+                "NEXT_HOP_INSTANCE_NOT_ON_NETWORK",
+                "NEXT_HOP_NOT_RUNNING",
+                "NOT_CRITICAL_ERROR",
+                "NO_RESULTS_ON_PAGE",
+                "REQUIRED_TOS_AGREEMENT",
+                "RESOURCE_IN_USE_BY_OTHER_RESOURCE_WARNING",
+                "RESOURCE_NOT_DELETED",
+                "SCHEMA_VALIDATION_IGNORED",
+                "SINGLE_INSTANCE_PROPERTY_TEMPLATE",
+                "UNDECLARED_PROPERTIES",
+                "UNREACHABLE"
+              ],
+              "enumDescriptions": [
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                ""
+              ],
+              "type": "string"
+            },
+            "data": {
+              "description": "[Output Only] Metadata about this warning in key: value format. For example:\n\"data\": [ { \"key\": \"scope\", \"value\": \"zones/us-east1-d\" }",
+              "items": {
+                "properties": {
+                  "key": {
+                    "description": "[Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).",
+                    "type": "string"
+                  },
+                  "value": {
+                    "description": "[Output Only] A warning data value corresponding to the key.",
+                    "type": "string"
+                  }
+                },
+                "type": "object"
+              },
+              "type": "array"
+            },
+            "message": {
+              "description": "[Output Only] A human-readable description of the warning code.",
+              "type": "string"
+            }
+          },
+          "type": "object"
+        }
+      },
+      "type": "object"
+    },
+    "ReservationList": {
+      "id": "ReservationList",
+      "properties": {
+        "id": {
+          "description": "[Output Only] The unique identifier for the resource. This identifier is defined by the server.",
+          "type": "string"
+        },
+        "items": {
+          "description": "[Output Only] A list of Allocation resources.",
+          "items": {
+            "$ref": "Reservation"
+          },
+          "type": "array"
+        },
+        "kind": {
+          "default": "compute#reservationList",
+          "description": "[Output Only] Type of resource.Always compute#reservationsList for listsof reservations",
+          "type": "string"
+        },
+        "nextPageToken": {
+          "description": "[Output Only] This token allows you to get the next page of results for list requests. If the number of results is larger than maxResults, use the nextPageToken as a value for the query parameter pageToken in the next list request. Subsequent list requests will have their own nextPageToken to continue paging through the results.",
+          "type": "string"
+        },
+        "selfLink": {
+          "description": "[Output Only] Server-defined URL for this resource.",
+          "type": "string"
+        },
+        "warning": {
+          "description": "[Output Only] Informational warning message.",
+          "properties": {
+            "code": {
+              "description": "[Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.",
+              "enum": [
+                "CLEANUP_FAILED",
+                "DEPRECATED_RESOURCE_USED",
+                "DEPRECATED_TYPE_USED",
+                "DISK_SIZE_LARGER_THAN_IMAGE_SIZE",
+                "EXPERIMENTAL_TYPE_USED",
+                "EXTERNAL_API_WARNING",
+                "FIELD_VALUE_OVERRIDEN",
+                "INJECTED_KERNELS_DEPRECATED",
+                "MISSING_TYPE_DEPENDENCY",
+                "NEXT_HOP_ADDRESS_NOT_ASSIGNED",
+                "NEXT_HOP_CANNOT_IP_FORWARD",
+                "NEXT_HOP_INSTANCE_NOT_FOUND",
+                "NEXT_HOP_INSTANCE_NOT_ON_NETWORK",
+                "NEXT_HOP_NOT_RUNNING",
+                "NOT_CRITICAL_ERROR",
+                "NO_RESULTS_ON_PAGE",
+                "REQUIRED_TOS_AGREEMENT",
+                "RESOURCE_IN_USE_BY_OTHER_RESOURCE_WARNING",
+                "RESOURCE_NOT_DELETED",
+                "SCHEMA_VALIDATION_IGNORED",
+                "SINGLE_INSTANCE_PROPERTY_TEMPLATE",
+                "UNDECLARED_PROPERTIES",
+                "UNREACHABLE"
+              ],
+              "enumDescriptions": [
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                ""
+              ],
+              "type": "string"
+            },
+            "data": {
+              "description": "[Output Only] Metadata about this warning in key: value format. For example:\n\"data\": [ { \"key\": \"scope\", \"value\": \"zones/us-east1-d\" }",
+              "items": {
+                "properties": {
+                  "key": {
+                    "description": "[Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).",
+                    "type": "string"
+                  },
+                  "value": {
+                    "description": "[Output Only] A warning data value corresponding to the key.",
+                    "type": "string"
+                  }
+                },
+                "type": "object"
+              },
+              "type": "array"
+            },
+            "message": {
+              "description": "[Output Only] A human-readable description of the warning code.",
+              "type": "string"
+            }
+          },
+          "type": "object"
+        }
+      },
+      "type": "object"
+    },
+    "ReservationsResizeRequest": {
+      "id": "ReservationsResizeRequest",
+      "properties": {
+        "specificSkuCount": {
+          "description": "Number of allocated resources can be resized with minimum = 1 and maximum = 1000.",
+          "format": "int64",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "ReservationsScopedList": {
+      "id": "ReservationsScopedList",
+      "properties": {
+        "reservations": {
+          "description": "A list of reservations contained in this scope.",
+          "items": {
+            "$ref": "Reservation"
+          },
+          "type": "array"
+        },
+        "warning": {
+          "description": "Informational warning which replaces the list of reservations when the list is empty.",
+          "properties": {
+            "code": {
+              "description": "[Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.",
+              "enum": [
+                "CLEANUP_FAILED",
+                "DEPRECATED_RESOURCE_USED",
+                "DEPRECATED_TYPE_USED",
+                "DISK_SIZE_LARGER_THAN_IMAGE_SIZE",
+                "EXPERIMENTAL_TYPE_USED",
+                "EXTERNAL_API_WARNING",
+                "FIELD_VALUE_OVERRIDEN",
+                "INJECTED_KERNELS_DEPRECATED",
+                "MISSING_TYPE_DEPENDENCY",
+                "NEXT_HOP_ADDRESS_NOT_ASSIGNED",
+                "NEXT_HOP_CANNOT_IP_FORWARD",
+                "NEXT_HOP_INSTANCE_NOT_FOUND",
+                "NEXT_HOP_INSTANCE_NOT_ON_NETWORK",
+                "NEXT_HOP_NOT_RUNNING",
+                "NOT_CRITICAL_ERROR",
+                "NO_RESULTS_ON_PAGE",
+                "REQUIRED_TOS_AGREEMENT",
+                "RESOURCE_IN_USE_BY_OTHER_RESOURCE_WARNING",
+                "RESOURCE_NOT_DELETED",
+                "SCHEMA_VALIDATION_IGNORED",
+                "SINGLE_INSTANCE_PROPERTY_TEMPLATE",
+                "UNDECLARED_PROPERTIES",
+                "UNREACHABLE"
+              ],
+              "enumDescriptions": [
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                "",
+                ""
+              ],
+              "type": "string"
+            },
+            "data": {
+              "description": "[Output Only] Metadata about this warning in key: value format. For example:\n\"data\": [ { \"key\": \"scope\", \"value\": \"zones/us-east1-d\" }",
+              "items": {
+                "properties": {
+                  "key": {
+                    "description": "[Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).",
+                    "type": "string"
+                  },
+                  "value": {
+                    "description": "[Output Only] A warning data value corresponding to the key.",
+                    "type": "string"
+                  }
+                },
+                "type": "object"
+              },
+              "type": "array"
+            },
+            "message": {
+              "description": "[Output Only] A human-readable description of the warning code.",
+              "type": "string"
+            }
+          },
+          "type": "object"
+        }
+      },
+      "type": "object"
+    },
     "ResourceCommitment": {
       "description": "Commitment for a particular resource (a Commitment is composed of one or more of these).",
       "id": "ResourceCommitment",
       "properties": {
+        "acceleratorType": {
+          "description": "Name of the accelerator type resource. Applicable only when the type is ACCELERATOR.",
+          "type": "string"
+        },
         "amount": {
           "description": "The amount of the resource purchased (in a type-dependent unit, such as bytes). For vCPUs, this can just be an integer. For memory, this must be provided in MB. Memory must be a multiple of 256 MB, with up to 6.5GB of memory per every vCPU.",
           "format": "int64",
@@ -33510,6 +34543,8 @@
         "type": {
           "description": "Type of resource for which this commitment applies. Possible values are VCPU and MEMORY",
           "enum": [
+            "ACCELERATOR",
+            "LOCAL_SSD",
             "MEMORY",
             "UNSPECIFIED",
             "VCPU"
@@ -33517,6 +34552,8 @@
           "enumDescriptions": [
             "",
             "",
+            "",
+            "",
             ""
           ],
           "type": "string"
diff --git a/compute/v1/compute-gen.go b/compute/v1/compute-gen.go
index ab8d257..c8c93d9 100644
--- a/compute/v1/compute-gen.go
+++ b/compute/v1/compute-gen.go
@@ -176,6 +176,7 @@
 	s.RegionInstanceGroups = NewRegionInstanceGroupsService(s)
 	s.RegionOperations = NewRegionOperationsService(s)
 	s.Regions = NewRegionsService(s)
+	s.Reservations = NewReservationsService(s)
 	s.ResourcePolicies = NewResourcePoliciesService(s)
 	s.Routers = NewRoutersService(s)
 	s.Routes = NewRoutesService(s)
@@ -285,6 +286,8 @@
 
 	Regions *RegionsService
 
+	Reservations *ReservationsService
+
 	ResourcePolicies *ResourcePoliciesService
 
 	Routers *RoutersService
@@ -700,6 +703,15 @@
 	s *Service
 }
 
+func NewReservationsService(s *Service) *ReservationsService {
+	rs := &ReservationsService{s: s}
+	return rs
+}
+
+type ReservationsService struct {
+	s *Service
+}
+
 func NewResourcePoliciesService(s *Service) *ResourcePoliciesService {
 	rs := &ResourcePoliciesService{s: s}
 	return rs
@@ -2151,6 +2163,122 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+type AllocationSpecificSKUAllocationAllocatedInstancePropertiesReservedDisk struct {
+	// DiskSizeGb: Specifies the size of the disk in base-2 GB.
+	DiskSizeGb int64 `json:"diskSizeGb,omitempty,string"`
+
+	// Interface: Specifies the disk interface to use for attaching this
+	// disk, which is either SCSI or NVME. The default is SCSI. For
+	// performance characteristics of SCSI over NVMe, see Local SSD
+	// performance.
+	//
+	// Possible values:
+	//   "NVME"
+	//   "SCSI"
+	Interface string `json:"interface,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "DiskSizeGb") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "DiskSizeGb") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *AllocationSpecificSKUAllocationAllocatedInstancePropertiesReservedDisk) MarshalJSON() ([]byte, error) {
+	type NoMethod AllocationSpecificSKUAllocationAllocatedInstancePropertiesReservedDisk
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// AllocationSpecificSKUAllocationReservedInstanceProperties: Properties
+// of the SKU instances being reserved.
+type AllocationSpecificSKUAllocationReservedInstanceProperties struct {
+	// GuestAccelerators: Specifies accelerator type and count.
+	GuestAccelerators []*AcceleratorConfig `json:"guestAccelerators,omitempty"`
+
+	// LocalSsds: Specifies amount of local ssd to reserve with each
+	// instance. The type of disk is local-ssd.
+	LocalSsds []*AllocationSpecificSKUAllocationAllocatedInstancePropertiesReservedDisk `json:"localSsds,omitempty"`
+
+	// MachineType: Specifies type of machine (name only) which has fixed
+	// number of vCPUs and fixed amount of memory. This also includes
+	// specifying custom machine type following
+	// custom-NUMBER_OF_CPUS-AMOUNT_OF_MEMORY pattern.
+	MachineType string `json:"machineType,omitempty"`
+
+	// MinCpuPlatform: Minimum cpu platform the reservation.
+	MinCpuPlatform string `json:"minCpuPlatform,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "GuestAccelerators")
+	// to unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "GuestAccelerators") to
+	// include in API requests with the JSON null value. By default, fields
+	// with empty values are omitted from API requests. However, any field
+	// with an empty value appearing in NullFields will be sent to the
+	// server as null. It is an error if a field in this list has a
+	// non-empty value. This may be used to include null fields in Patch
+	// requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *AllocationSpecificSKUAllocationReservedInstanceProperties) MarshalJSON() ([]byte, error) {
+	type NoMethod AllocationSpecificSKUAllocationReservedInstanceProperties
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// AllocationSpecificSKUReservation: This reservation type allows to pre
+// allocate specific instance configuration.
+type AllocationSpecificSKUReservation struct {
+	// Count: Specifies number of resources that are allocated.
+	Count int64 `json:"count,omitempty,string"`
+
+	// InUseCount: [OutputOnly] Indicates how many resource are in use.
+	InUseCount int64 `json:"inUseCount,omitempty,string"`
+
+	// InstanceProperties: The instance properties for this specific sku
+	// reservation.
+	InstanceProperties *AllocationSpecificSKUAllocationReservedInstanceProperties `json:"instanceProperties,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Count") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Count") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *AllocationSpecificSKUReservation) MarshalJSON() ([]byte, error) {
+	type NoMethod AllocationSpecificSKUReservation
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // AttachedDisk: An instance-attached disk resource.
 type AttachedDisk struct {
 	// AutoDelete: Specifies whether the disk will be auto-deleted when the
@@ -4786,6 +4914,9 @@
 	// used.
 	Region string `json:"region,omitempty"`
 
+	// Reservations: List of reservations for this commitment.
+	Reservations []*Reservation `json:"reservations,omitempty"`
+
 	// Resources: A list of commitment amounts for particular resources.
 	// Note that VCPU and MEMORY resource commitments must occur together.
 	Resources []*ResourceCommitment `json:"resources,omitempty"`
@@ -10139,6 +10270,10 @@
 	// Multiple interfaces are supported per instance.
 	NetworkInterfaces []*NetworkInterface `json:"networkInterfaces,omitempty"`
 
+	// ReservationAffinity: The configuration of desired reservations from
+	// which this Instance can consume capacity from.
+	ReservationAffinity *ReservationAffinity `json:"reservationAffinity,omitempty"`
+
 	// Scheduling: Sets the scheduling options for this instance.
 	Scheduling *Scheduling `json:"scheduling,omitempty"`
 
@@ -12667,6 +12802,10 @@
 	// interface.
 	NetworkInterfaces []*NetworkInterface `json:"networkInterfaces,omitempty"`
 
+	// ReservationAffinity: The configuration of desired reservations which
+	// this Instance could consume capacity from.
+	ReservationAffinity *ReservationAffinity `json:"reservationAffinity,omitempty"`
+
 	// Scheduling: Specifies the scheduling options for the instances that
 	// are created from this template.
 	Scheduling *Scheduling `json:"scheduling,omitempty"`
@@ -18735,7 +18874,7 @@
 // You can use a template to define properties for nodes in a node
 // group. For more information, read Creating node groups and instances.
 // (== resource_for beta.nodeTemplates ==) (== resource_for
-// v1.nodeTemplates ==) NextID: 16
+// v1.nodeTemplates ==) (== NextID: 16 ==)
 type NodeTemplate struct {
 	// CreationTimestamp: [Output Only] Creation timestamp in RFC3339 text
 	// format.
@@ -18786,7 +18925,14 @@
 	// SelfLink: [Output Only] Server-defined URL for the resource.
 	SelfLink string `json:"selfLink,omitempty"`
 
-	// ServerBinding: Binding properties for the physical server.
+	// ServerBinding: Sets the binding properties for the physical server.
+	// Valid values include:
+	// - [Default] RESTART_NODE_ON_ANY_SERVER: Restarts VMs on any available
+	// physical server
+	// - RESTART_NODE_ON_MINIMAL_SERVER: Restarts VMs on the same physical
+	// server whenever possible
+	//
+	// See Sole-tenant node options for more information.
 	ServerBinding *ServerBinding `json:"serverBinding,omitempty"`
 
 	// Status: [Output Only] The status of the node template. One of the
@@ -22629,9 +22775,617 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// Reservation: Reservation resource NextID: 13
+type Reservation struct {
+	// Commitment: [OutputOnly] Full or partial url for parent commitment
+	// for reservations which are tied to a commitment.
+	Commitment string `json:"commitment,omitempty"`
+
+	// CreationTimestamp: [Output Only] Creation timestamp in RFC3339 text
+	// format.
+	CreationTimestamp string `json:"creationTimestamp,omitempty"`
+
+	// Description: An optional description of this resource. Provide this
+	// property when you create the resource.
+	Description string `json:"description,omitempty"`
+
+	// Id: [Output Only] The unique identifier for the resource. This
+	// identifier is defined by the server.
+	Id uint64 `json:"id,omitempty,string"`
+
+	// Kind: [Output Only] Type of the resource. Always compute#reservations
+	// for reservations.
+	Kind string `json:"kind,omitempty"`
+
+	// Name: The name of the resource, provided by the client when initially
+	// creating the resource. The resource name must be 1-63 characters
+	// long, and comply with RFC1035. Specifically, the name must be 1-63
+	// characters long and match the regular expression
+	// `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be
+	// a lowercase letter, and all following characters must be a dash,
+	// lowercase letter, or digit, except the last character, which cannot
+	// be a dash.
+	Name string `json:"name,omitempty"`
+
+	// SelfLink: [Output Only] Server-defined fully-qualified URL for this
+	// resource.
+	SelfLink string `json:"selfLink,omitempty"`
+
+	// SpecificReservation: Reservation for instances with specific machine
+	// shapes.
+	SpecificReservation *AllocationSpecificSKUReservation `json:"specificReservation,omitempty"`
+
+	// SpecificReservationRequired: Indicates whether the reservation can be
+	// consumed by VMs with "any reservation" defined. If the field is set,
+	// then only VMs that target the reservation by name using
+	// --reservation-affinity can consume this reservation.
+	SpecificReservationRequired bool `json:"specificReservationRequired,omitempty"`
+
+	// Status: [Output Only] The status of the reservation.
+	//
+	// Possible values:
+	//   "CREATING"
+	//   "DELETING"
+	//   "INVALID"
+	//   "READY"
+	//   "UPDATING"
+	Status string `json:"status,omitempty"`
+
+	// Zone: Zone in which the reservation resides, must be provided if
+	// reservation is created with commitment creation.
+	Zone string `json:"zone,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Commitment") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Commitment") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Reservation) MarshalJSON() ([]byte, error) {
+	type NoMethod Reservation
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ReservationAffinity: ReservationAffinity is the configuration of
+// desired reservation which this instance could take capacity from.
+type ReservationAffinity struct {
+	// ConsumeReservationType: Specifies the type of reservation from which
+	// this instance can consume resources: ANY_RESERVATION (default),
+	// SPECIFIC_RESERVATION, or NO_RESERVATION. See  Consuming reserved
+	// instances for examples.
+	//
+	// Possible values:
+	//   "ANY_RESERVATION"
+	//   "NO_RESERVATION"
+	//   "SPECIFIC_RESERVATION"
+	//   "UNSPECIFIED"
+	ConsumeReservationType string `json:"consumeReservationType,omitempty"`
+
+	// Key: Corresponds to the label key of reservation resource.
+	Key string `json:"key,omitempty"`
+
+	// Values: Corresponds to the label values of reservation resource.
+	Values []string `json:"values,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g.
+	// "ConsumeReservationType") to unconditionally include in API requests.
+	// By default, fields with empty values are omitted from API requests.
+	// However, any non-pointer, non-interface field appearing in
+	// ForceSendFields will be sent to the server regardless of whether the
+	// field is empty or not. This may be used to include empty fields in
+	// Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "ConsumeReservationType")
+	// to include in API requests with the JSON null value. By default,
+	// fields with empty values are omitted from API requests. However, any
+	// field with an empty value appearing in NullFields will be sent to the
+	// server as null. It is an error if a field in this list has a
+	// non-empty value. This may be used to include null fields in Patch
+	// requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ReservationAffinity) MarshalJSON() ([]byte, error) {
+	type NoMethod ReservationAffinity
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ReservationAggregatedList: Contains a list of reservations.
+type ReservationAggregatedList struct {
+	// Id: [Output Only] Unique identifier for the resource; defined by the
+	// server.
+	Id string `json:"id,omitempty"`
+
+	// Items: A list of Allocation resources.
+	Items map[string]ReservationsScopedList `json:"items,omitempty"`
+
+	// Kind: Type of resource.
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: [Output Only] This token allows you to get the next
+	// page of results for list requests. If the number of results is larger
+	// than maxResults, use the nextPageToken as a value for the query
+	// parameter pageToken in the next list request. Subsequent list
+	// requests will have their own nextPageToken to continue paging through
+	// the results.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// SelfLink: [Output Only] Server-defined URL for this resource.
+	SelfLink string `json:"selfLink,omitempty"`
+
+	// Warning: [Output Only] Informational warning message.
+	Warning *ReservationAggregatedListWarning `json:"warning,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Id") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Id") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ReservationAggregatedList) MarshalJSON() ([]byte, error) {
+	type NoMethod ReservationAggregatedList
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ReservationAggregatedListWarning: [Output Only] Informational warning
+// message.
+type ReservationAggregatedListWarning struct {
+	// Code: [Output Only] A warning code, if applicable. For example,
+	// Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in
+	// the response.
+	//
+	// Possible values:
+	//   "CLEANUP_FAILED"
+	//   "DEPRECATED_RESOURCE_USED"
+	//   "DEPRECATED_TYPE_USED"
+	//   "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
+	//   "EXPERIMENTAL_TYPE_USED"
+	//   "EXTERNAL_API_WARNING"
+	//   "FIELD_VALUE_OVERRIDEN"
+	//   "INJECTED_KERNELS_DEPRECATED"
+	//   "MISSING_TYPE_DEPENDENCY"
+	//   "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
+	//   "NEXT_HOP_CANNOT_IP_FORWARD"
+	//   "NEXT_HOP_INSTANCE_NOT_FOUND"
+	//   "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
+	//   "NEXT_HOP_NOT_RUNNING"
+	//   "NOT_CRITICAL_ERROR"
+	//   "NO_RESULTS_ON_PAGE"
+	//   "REQUIRED_TOS_AGREEMENT"
+	//   "RESOURCE_IN_USE_BY_OTHER_RESOURCE_WARNING"
+	//   "RESOURCE_NOT_DELETED"
+	//   "SCHEMA_VALIDATION_IGNORED"
+	//   "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
+	//   "UNDECLARED_PROPERTIES"
+	//   "UNREACHABLE"
+	Code string `json:"code,omitempty"`
+
+	// Data: [Output Only] Metadata about this warning in key: value format.
+	// For example:
+	// "data": [ { "key": "scope", "value": "zones/us-east1-d" }
+	Data []*ReservationAggregatedListWarningData `json:"data,omitempty"`
+
+	// Message: [Output Only] A human-readable description of the warning
+	// code.
+	Message string `json:"message,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Code") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Code") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ReservationAggregatedListWarning) MarshalJSON() ([]byte, error) {
+	type NoMethod ReservationAggregatedListWarning
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type ReservationAggregatedListWarningData struct {
+	// Key: [Output Only] A key that provides more detail on the warning
+	// being returned. For example, for warnings where there are no results
+	// in a list request for a particular zone, this key might be scope and
+	// the key value might be the zone name. Other examples might be a key
+	// indicating a deprecated resource and a suggested replacement, or a
+	// warning about invalid network settings (for example, if an instance
+	// attempts to perform IP forwarding but is not enabled for IP
+	// forwarding).
+	Key string `json:"key,omitempty"`
+
+	// Value: [Output Only] A warning data value corresponding to the key.
+	Value string `json:"value,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Key") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Key") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ReservationAggregatedListWarningData) MarshalJSON() ([]byte, error) {
+	type NoMethod ReservationAggregatedListWarningData
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type ReservationList struct {
+	// Id: [Output Only] The unique identifier for the resource. This
+	// identifier is defined by the server.
+	Id string `json:"id,omitempty"`
+
+	// Items: [Output Only] A list of Allocation resources.
+	Items []*Reservation `json:"items,omitempty"`
+
+	// Kind: [Output Only] Type of resource.Always compute#reservationsList
+	// for listsof reservations
+	Kind string `json:"kind,omitempty"`
+
+	// NextPageToken: [Output Only] This token allows you to get the next
+	// page of results for list requests. If the number of results is larger
+	// than maxResults, use the nextPageToken as a value for the query
+	// parameter pageToken in the next list request. Subsequent list
+	// requests will have their own nextPageToken to continue paging through
+	// the results.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// SelfLink: [Output Only] Server-defined URL for this resource.
+	SelfLink string `json:"selfLink,omitempty"`
+
+	// Warning: [Output Only] Informational warning message.
+	Warning *ReservationListWarning `json:"warning,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Id") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Id") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ReservationList) MarshalJSON() ([]byte, error) {
+	type NoMethod ReservationList
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ReservationListWarning: [Output Only] Informational warning message.
+type ReservationListWarning struct {
+	// Code: [Output Only] A warning code, if applicable. For example,
+	// Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in
+	// the response.
+	//
+	// Possible values:
+	//   "CLEANUP_FAILED"
+	//   "DEPRECATED_RESOURCE_USED"
+	//   "DEPRECATED_TYPE_USED"
+	//   "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
+	//   "EXPERIMENTAL_TYPE_USED"
+	//   "EXTERNAL_API_WARNING"
+	//   "FIELD_VALUE_OVERRIDEN"
+	//   "INJECTED_KERNELS_DEPRECATED"
+	//   "MISSING_TYPE_DEPENDENCY"
+	//   "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
+	//   "NEXT_HOP_CANNOT_IP_FORWARD"
+	//   "NEXT_HOP_INSTANCE_NOT_FOUND"
+	//   "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
+	//   "NEXT_HOP_NOT_RUNNING"
+	//   "NOT_CRITICAL_ERROR"
+	//   "NO_RESULTS_ON_PAGE"
+	//   "REQUIRED_TOS_AGREEMENT"
+	//   "RESOURCE_IN_USE_BY_OTHER_RESOURCE_WARNING"
+	//   "RESOURCE_NOT_DELETED"
+	//   "SCHEMA_VALIDATION_IGNORED"
+	//   "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
+	//   "UNDECLARED_PROPERTIES"
+	//   "UNREACHABLE"
+	Code string `json:"code,omitempty"`
+
+	// Data: [Output Only] Metadata about this warning in key: value format.
+	// For example:
+	// "data": [ { "key": "scope", "value": "zones/us-east1-d" }
+	Data []*ReservationListWarningData `json:"data,omitempty"`
+
+	// Message: [Output Only] A human-readable description of the warning
+	// code.
+	Message string `json:"message,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Code") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Code") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ReservationListWarning) MarshalJSON() ([]byte, error) {
+	type NoMethod ReservationListWarning
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type ReservationListWarningData struct {
+	// Key: [Output Only] A key that provides more detail on the warning
+	// being returned. For example, for warnings where there are no results
+	// in a list request for a particular zone, this key might be scope and
+	// the key value might be the zone name. Other examples might be a key
+	// indicating a deprecated resource and a suggested replacement, or a
+	// warning about invalid network settings (for example, if an instance
+	// attempts to perform IP forwarding but is not enabled for IP
+	// forwarding).
+	Key string `json:"key,omitempty"`
+
+	// Value: [Output Only] A warning data value corresponding to the key.
+	Value string `json:"value,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Key") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Key") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ReservationListWarningData) MarshalJSON() ([]byte, error) {
+	type NoMethod ReservationListWarningData
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type ReservationsResizeRequest struct {
+	// SpecificSkuCount: Number of allocated resources can be resized with
+	// minimum = 1 and maximum = 1000.
+	SpecificSkuCount int64 `json:"specificSkuCount,omitempty,string"`
+
+	// ForceSendFields is a list of field names (e.g. "SpecificSkuCount") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "SpecificSkuCount") to
+	// include in API requests with the JSON null value. By default, fields
+	// with empty values are omitted from API requests. However, any field
+	// with an empty value appearing in NullFields will be sent to the
+	// server as null. It is an error if a field in this list has a
+	// non-empty value. This may be used to include null fields in Patch
+	// requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ReservationsResizeRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod ReservationsResizeRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type ReservationsScopedList struct {
+	// Reservations: A list of reservations contained in this scope.
+	Reservations []*Reservation `json:"reservations,omitempty"`
+
+	// Warning: Informational warning which replaces the list of
+	// reservations when the list is empty.
+	Warning *ReservationsScopedListWarning `json:"warning,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Reservations") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Reservations") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ReservationsScopedList) MarshalJSON() ([]byte, error) {
+	type NoMethod ReservationsScopedList
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ReservationsScopedListWarning: Informational warning which replaces
+// the list of reservations when the list is empty.
+type ReservationsScopedListWarning struct {
+	// Code: [Output Only] A warning code, if applicable. For example,
+	// Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in
+	// the response.
+	//
+	// Possible values:
+	//   "CLEANUP_FAILED"
+	//   "DEPRECATED_RESOURCE_USED"
+	//   "DEPRECATED_TYPE_USED"
+	//   "DISK_SIZE_LARGER_THAN_IMAGE_SIZE"
+	//   "EXPERIMENTAL_TYPE_USED"
+	//   "EXTERNAL_API_WARNING"
+	//   "FIELD_VALUE_OVERRIDEN"
+	//   "INJECTED_KERNELS_DEPRECATED"
+	//   "MISSING_TYPE_DEPENDENCY"
+	//   "NEXT_HOP_ADDRESS_NOT_ASSIGNED"
+	//   "NEXT_HOP_CANNOT_IP_FORWARD"
+	//   "NEXT_HOP_INSTANCE_NOT_FOUND"
+	//   "NEXT_HOP_INSTANCE_NOT_ON_NETWORK"
+	//   "NEXT_HOP_NOT_RUNNING"
+	//   "NOT_CRITICAL_ERROR"
+	//   "NO_RESULTS_ON_PAGE"
+	//   "REQUIRED_TOS_AGREEMENT"
+	//   "RESOURCE_IN_USE_BY_OTHER_RESOURCE_WARNING"
+	//   "RESOURCE_NOT_DELETED"
+	//   "SCHEMA_VALIDATION_IGNORED"
+	//   "SINGLE_INSTANCE_PROPERTY_TEMPLATE"
+	//   "UNDECLARED_PROPERTIES"
+	//   "UNREACHABLE"
+	Code string `json:"code,omitempty"`
+
+	// Data: [Output Only] Metadata about this warning in key: value format.
+	// For example:
+	// "data": [ { "key": "scope", "value": "zones/us-east1-d" }
+	Data []*ReservationsScopedListWarningData `json:"data,omitempty"`
+
+	// Message: [Output Only] A human-readable description of the warning
+	// code.
+	Message string `json:"message,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Code") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Code") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ReservationsScopedListWarning) MarshalJSON() ([]byte, error) {
+	type NoMethod ReservationsScopedListWarning
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type ReservationsScopedListWarningData struct {
+	// Key: [Output Only] A key that provides more detail on the warning
+	// being returned. For example, for warnings where there are no results
+	// in a list request for a particular zone, this key might be scope and
+	// the key value might be the zone name. Other examples might be a key
+	// indicating a deprecated resource and a suggested replacement, or a
+	// warning about invalid network settings (for example, if an instance
+	// attempts to perform IP forwarding but is not enabled for IP
+	// forwarding).
+	Key string `json:"key,omitempty"`
+
+	// Value: [Output Only] A warning data value corresponding to the key.
+	Value string `json:"value,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Key") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Key") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ReservationsScopedListWarningData) MarshalJSON() ([]byte, error) {
+	type NoMethod ReservationsScopedListWarningData
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // ResourceCommitment: Commitment for a particular resource (a
 // Commitment is composed of one or more of these).
 type ResourceCommitment struct {
+	// AcceleratorType: Name of the accelerator type resource. Applicable
+	// only when the type is ACCELERATOR.
+	AcceleratorType string `json:"acceleratorType,omitempty"`
+
 	// Amount: The amount of the resource purchased (in a type-dependent
 	// unit, such as bytes). For vCPUs, this can just be an integer. For
 	// memory, this must be provided in MB. Memory must be a multiple of 256
@@ -22642,12 +23396,14 @@
 	// values are VCPU and MEMORY
 	//
 	// Possible values:
+	//   "ACCELERATOR"
+	//   "LOCAL_SSD"
 	//   "MEMORY"
 	//   "UNSPECIFIED"
 	//   "VCPU"
 	Type string `json:"type,omitempty"`
 
-	// ForceSendFields is a list of field names (e.g. "Amount") to
+	// ForceSendFields is a list of field names (e.g. "AcceleratorType") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
 	// non-interface field appearing in ForceSendFields will be sent to the
@@ -22655,12 +23411,13 @@
 	// used to include empty fields in Patch requests.
 	ForceSendFields []string `json:"-"`
 
-	// NullFields is a list of field names (e.g. "Amount") to include in API
-	// requests with the JSON null value. By default, fields with empty
-	// values are omitted from API requests. However, any field with an
-	// empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
+	// NullFields is a list of field names (e.g. "AcceleratorType") to
+	// include in API requests with the JSON null value. By default, fields
+	// with empty values are omitted from API requests. However, any field
+	// with an empty value appearing in NullFields will be sent to the
+	// server as null. It is an error if a field in this list has a
+	// non-empty value. This may be used to include null fields in Patch
+	// requests.
 	NullFields []string `json:"-"`
 }
 
@@ -89464,6 +90221,1713 @@
 	}
 }
 
+// method id "compute.reservations.aggregatedList":
+
+type ReservationsAggregatedListCall struct {
+	s            *Service
+	project      string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// AggregatedList: Retrieves an aggregated list of reservations.
+func (r *ReservationsService) AggregatedList(project string) *ReservationsAggregatedListCall {
+	c := &ReservationsAggregatedListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.project = project
+	return c
+}
+
+// Filter sets the optional parameter "filter": A filter expression that
+// filters resources listed in the response. The expression must specify
+// the field name, a comparison operator, and the value that you want to
+// use for filtering. The value must be a string, a number, or a
+// boolean. The comparison operator must be either =, !=, >, or <.
+//
+// For example, if you are filtering Compute Engine instances, you can
+// exclude instances named example-instance by specifying name !=
+// example-instance.
+//
+// You can also filter nested fields. For example, you could specify
+// scheduling.automaticRestart = false to include instances only if they
+// are not scheduled for automatic restarts. You can use filtering on
+// nested fields to filter based on resource labels.
+//
+// To filter on multiple expressions, provide each separate expression
+// within parentheses. For example, (scheduling.automaticRestart = true)
+// (cpuPlatform = "Intel Skylake"). By default, each expression is an
+// AND expression. However, you can include AND and OR expressions
+// explicitly. For example, (cpuPlatform = "Intel Skylake") OR
+// (cpuPlatform = "Intel Broadwell") AND (scheduling.automaticRestart =
+// true).
+func (c *ReservationsAggregatedListCall) Filter(filter string) *ReservationsAggregatedListCall {
+	c.urlParams_.Set("filter", filter)
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of results per page that should be returned. If the number of
+// available results is larger than maxResults, Compute Engine returns a
+// nextPageToken that can be used to get the next page of results in
+// subsequent list requests. Acceptable values are 0 to 500, inclusive.
+// (Default: 500)
+func (c *ReservationsAggregatedListCall) MaxResults(maxResults int64) *ReservationsAggregatedListCall {
+	c.urlParams_.Set("maxResults", fmt.Sprint(maxResults))
+	return c
+}
+
+// OrderBy sets the optional parameter "orderBy": Sorts list results by
+// a certain order. By default, results are returned in alphanumerical
+// order based on the resource name.
+//
+// You can also sort results in descending order based on the creation
+// timestamp using orderBy="creationTimestamp desc". This sorts results
+// based on the creationTimestamp field in reverse chronological order
+// (newest result first). Use this to sort resources like operations so
+// that the newest operation is returned first.
+//
+// Currently, only sorting by name or creationTimestamp desc is
+// supported.
+func (c *ReservationsAggregatedListCall) OrderBy(orderBy string) *ReservationsAggregatedListCall {
+	c.urlParams_.Set("orderBy", orderBy)
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Specifies a page
+// token to use. Set pageToken to the nextPageToken returned by a
+// previous list request to get the next page of results.
+func (c *ReservationsAggregatedListCall) PageToken(pageToken string) *ReservationsAggregatedListCall {
+	c.urlParams_.Set("pageToken", pageToken)
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ReservationsAggregatedListCall) Fields(s ...googleapi.Field) *ReservationsAggregatedListCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// IfNoneMatch sets the optional parameter which makes the operation
+// fail if the object's ETag matches the given value. This is useful for
+// getting updates only after the object has changed since the last
+// request. Use googleapi.IsNotModified to check whether the response
+// error from Do is the result of In-None-Match.
+func (c *ReservationsAggregatedListCall) IfNoneMatch(entityTag string) *ReservationsAggregatedListCall {
+	c.ifNoneMatch_ = entityTag
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ReservationsAggregatedListCall) Context(ctx context.Context) *ReservationsAggregatedListCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ReservationsAggregatedListCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ReservationsAggregatedListCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/aggregated/reservations")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"project": c.project,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "compute.reservations.aggregatedList" call.
+// Exactly one of *ReservationAggregatedList or error will be non-nil.
+// Any non-2xx status code is an error. Response headers are in either
+// *ReservationAggregatedList.ServerResponse.Header or (if a response
+// was returned at all) in error.(*googleapi.Error).Header. Use
+// googleapi.IsNotModified to check whether the returned error was
+// because http.StatusNotModified was returned.
+func (c *ReservationsAggregatedListCall) Do(opts ...googleapi.CallOption) (*ReservationAggregatedList, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &ReservationAggregatedList{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves an aggregated list of reservations.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.reservations.aggregatedList",
+	//   "parameterOrder": [
+	//     "project"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "A filter expression that filters resources listed in the response. The expression must specify the field name, a comparison operator, and the value that you want to use for filtering. The value must be a string, a number, or a boolean. The comparison operator must be either =, !=, \u003e, or \u003c.\n\nFor example, if you are filtering Compute Engine instances, you can exclude instances named example-instance by specifying name != example-instance.\n\nYou can also filter nested fields. For example, you could specify scheduling.automaticRestart = false to include instances only if they are not scheduled for automatic restarts. You can use filtering on nested fields to filter based on resource labels.\n\nTo filter on multiple expressions, provide each separate expression within parentheses. For example, (scheduling.automaticRestart = true) (cpuPlatform = \"Intel Skylake\"). By default, each expression is an AND expression. However, you can include AND and OR expressions explicitly. For example, (cpuPlatform = \"Intel Skylake\") OR (cpuPlatform = \"Intel Broadwell\") AND (scheduling.automaticRestart = true).",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "default": "500",
+	//       "description": "The maximum number of results per page that should be returned. If the number of available results is larger than maxResults, Compute Engine returns a nextPageToken that can be used to get the next page of results in subsequent list requests. Acceptable values are 0 to 500, inclusive. (Default: 500)",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "orderBy": {
+	//       "description": "Sorts list results by a certain order. By default, results are returned in alphanumerical order based on the resource name.\n\nYou can also sort results in descending order based on the creation timestamp using orderBy=\"creationTimestamp desc\". This sorts results based on the creationTimestamp field in reverse chronological order (newest result first). Use this to sort resources like operations so that the newest operation is returned first.\n\nCurrently, only sorting by name or creationTimestamp desc is supported.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "pageToken": {
+	//       "description": "Specifies a page token to use. Set pageToken to the nextPageToken returned by a previous list request to get the next page of results.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "project": {
+	//       "description": "Project ID for this request.",
+	//       "location": "path",
+	//       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/aggregated/reservations",
+	//   "response": {
+	//     "$ref": "ReservationAggregatedList"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// Pages invokes f for each page of results.
+// A non-nil error returned from f will halt the iteration.
+// The provided context supersedes any context provided to the Context method.
+func (c *ReservationsAggregatedListCall) Pages(ctx context.Context, f func(*ReservationAggregatedList) error) error {
+	c.ctx_ = ctx
+	defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point
+	for {
+		x, err := c.Do()
+		if err != nil {
+			return err
+		}
+		if err := f(x); err != nil {
+			return err
+		}
+		if x.NextPageToken == "" {
+			return nil
+		}
+		c.PageToken(x.NextPageToken)
+	}
+}
+
+// method id "compute.reservations.delete":
+
+type ReservationsDeleteCall struct {
+	s           *Service
+	project     string
+	zone        string
+	reservation string
+	urlParams_  gensupport.URLParams
+	ctx_        context.Context
+	header_     http.Header
+}
+
+// Delete: Deletes the specified reservation.
+func (r *ReservationsService) Delete(project string, zone string, reservation string) *ReservationsDeleteCall {
+	c := &ReservationsDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.project = project
+	c.zone = zone
+	c.reservation = reservation
+	return c
+}
+
+// RequestId sets the optional parameter "requestId": An optional
+// request ID to identify requests. Specify a unique request ID so that
+// if you must retry your request, the server will know to ignore the
+// request if it has already been completed.
+//
+// For example, consider a situation where you make an initial request
+// and the request times out. If you make the request again with the
+// same request ID, the server can check if original operation with the
+// same request ID was received, and if so, will ignore the second
+// request. This prevents clients from accidentally creating duplicate
+// commitments.
+//
+// The request ID must be a valid UUID with the exception that zero UUID
+// is not supported (00000000-0000-0000-0000-000000000000).
+func (c *ReservationsDeleteCall) RequestId(requestId string) *ReservationsDeleteCall {
+	c.urlParams_.Set("requestId", requestId)
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ReservationsDeleteCall) Fields(s ...googleapi.Field) *ReservationsDeleteCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ReservationsDeleteCall) Context(ctx context.Context) *ReservationsDeleteCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ReservationsDeleteCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ReservationsDeleteCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/reservations/{reservation}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("DELETE", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"project":     c.project,
+		"zone":        c.zone,
+		"reservation": c.reservation,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "compute.reservations.delete" call.
+// Exactly one of *Operation or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *Operation.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *ReservationsDeleteCall) Do(opts ...googleapi.CallOption) (*Operation, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Operation{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Deletes the specified reservation.",
+	//   "httpMethod": "DELETE",
+	//   "id": "compute.reservations.delete",
+	//   "parameterOrder": [
+	//     "project",
+	//     "zone",
+	//     "reservation"
+	//   ],
+	//   "parameters": {
+	//     "project": {
+	//       "description": "Project ID for this request.",
+	//       "location": "path",
+	//       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "requestId": {
+	//       "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed.\n\nFor example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments.\n\nThe request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "reservation": {
+	//       "description": "Name of the reservation to delete.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?|[1-9][0-9]{0,19}",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "zone": {
+	//       "description": "Name of the zone for this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/zones/{zone}/reservations/{reservation}",
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.reservations.get":
+
+type ReservationsGetCall struct {
+	s            *Service
+	project      string
+	zone         string
+	reservation  string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// Get: Retrieves all information of the specified reservation.
+func (r *ReservationsService) Get(project string, zone string, reservation string) *ReservationsGetCall {
+	c := &ReservationsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.project = project
+	c.zone = zone
+	c.reservation = reservation
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ReservationsGetCall) Fields(s ...googleapi.Field) *ReservationsGetCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// IfNoneMatch sets the optional parameter which makes the operation
+// fail if the object's ETag matches the given value. This is useful for
+// getting updates only after the object has changed since the last
+// request. Use googleapi.IsNotModified to check whether the response
+// error from Do is the result of In-None-Match.
+func (c *ReservationsGetCall) IfNoneMatch(entityTag string) *ReservationsGetCall {
+	c.ifNoneMatch_ = entityTag
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ReservationsGetCall) Context(ctx context.Context) *ReservationsGetCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ReservationsGetCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ReservationsGetCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/reservations/{reservation}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"project":     c.project,
+		"zone":        c.zone,
+		"reservation": c.reservation,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "compute.reservations.get" call.
+// Exactly one of *Reservation or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *Reservation.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *ReservationsGetCall) Do(opts ...googleapi.CallOption) (*Reservation, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Reservation{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Retrieves all information of the specified reservation.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.reservations.get",
+	//   "parameterOrder": [
+	//     "project",
+	//     "zone",
+	//     "reservation"
+	//   ],
+	//   "parameters": {
+	//     "project": {
+	//       "description": "Project ID for this request.",
+	//       "location": "path",
+	//       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "reservation": {
+	//       "description": "Name of the reservation to retrieve.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?|[1-9][0-9]{0,19}",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "zone": {
+	//       "description": "Name of the zone for this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/zones/{zone}/reservations/{reservation}",
+	//   "response": {
+	//     "$ref": "Reservation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.reservations.getIamPolicy":
+
+type ReservationsGetIamPolicyCall struct {
+	s            *Service
+	project      string
+	zone         string
+	resource     string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// GetIamPolicy: Gets the access control policy for a resource. May be
+// empty if no such policy or resource exists.
+func (r *ReservationsService) GetIamPolicy(project string, zone string, resource string) *ReservationsGetIamPolicyCall {
+	c := &ReservationsGetIamPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.project = project
+	c.zone = zone
+	c.resource = resource
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ReservationsGetIamPolicyCall) Fields(s ...googleapi.Field) *ReservationsGetIamPolicyCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// IfNoneMatch sets the optional parameter which makes the operation
+// fail if the object's ETag matches the given value. This is useful for
+// getting updates only after the object has changed since the last
+// request. Use googleapi.IsNotModified to check whether the response
+// error from Do is the result of In-None-Match.
+func (c *ReservationsGetIamPolicyCall) IfNoneMatch(entityTag string) *ReservationsGetIamPolicyCall {
+	c.ifNoneMatch_ = entityTag
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ReservationsGetIamPolicyCall) Context(ctx context.Context) *ReservationsGetIamPolicyCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ReservationsGetIamPolicyCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ReservationsGetIamPolicyCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/reservations/{resource}/getIamPolicy")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"project":  c.project,
+		"zone":     c.zone,
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "compute.reservations.getIamPolicy" call.
+// Exactly one of *Policy or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Policy.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *ReservationsGetIamPolicyCall) Do(opts ...googleapi.CallOption) (*Policy, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Policy{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets the access control policy for a resource. May be empty if no such policy or resource exists.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.reservations.getIamPolicy",
+	//   "parameterOrder": [
+	//     "project",
+	//     "zone",
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "project": {
+	//       "description": "Project ID for this request.",
+	//       "location": "path",
+	//       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "resource": {
+	//       "description": "Name or id of the resource for this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?|[1-9][0-9]{0,19}",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "zone": {
+	//       "description": "The name of the zone for this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/zones/{zone}/reservations/{resource}/getIamPolicy",
+	//   "response": {
+	//     "$ref": "Policy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// method id "compute.reservations.insert":
+
+type ReservationsInsertCall struct {
+	s           *Service
+	project     string
+	zone        string
+	reservation *Reservation
+	urlParams_  gensupport.URLParams
+	ctx_        context.Context
+	header_     http.Header
+}
+
+// Insert: Creates a new reservation.
+func (r *ReservationsService) Insert(project string, zone string, reservation *Reservation) *ReservationsInsertCall {
+	c := &ReservationsInsertCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.project = project
+	c.zone = zone
+	c.reservation = reservation
+	return c
+}
+
+// RequestId sets the optional parameter "requestId": An optional
+// request ID to identify requests. Specify a unique request ID so that
+// if you must retry your request, the server will know to ignore the
+// request if it has already been completed.
+//
+// For example, consider a situation where you make an initial request
+// and the request times out. If you make the request again with the
+// same request ID, the server can check if original operation with the
+// same request ID was received, and if so, will ignore the second
+// request. This prevents clients from accidentally creating duplicate
+// commitments.
+//
+// The request ID must be a valid UUID with the exception that zero UUID
+// is not supported (00000000-0000-0000-0000-000000000000).
+func (c *ReservationsInsertCall) RequestId(requestId string) *ReservationsInsertCall {
+	c.urlParams_.Set("requestId", requestId)
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ReservationsInsertCall) Fields(s ...googleapi.Field) *ReservationsInsertCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ReservationsInsertCall) Context(ctx context.Context) *ReservationsInsertCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ReservationsInsertCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ReservationsInsertCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.reservation)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/reservations")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"project": c.project,
+		"zone":    c.zone,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "compute.reservations.insert" call.
+// Exactly one of *Operation or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *Operation.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *ReservationsInsertCall) Do(opts ...googleapi.CallOption) (*Operation, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Operation{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Creates a new reservation.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.reservations.insert",
+	//   "parameterOrder": [
+	//     "project",
+	//     "zone"
+	//   ],
+	//   "parameters": {
+	//     "project": {
+	//       "description": "Project ID for this request.",
+	//       "location": "path",
+	//       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "requestId": {
+	//       "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed.\n\nFor example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments.\n\nThe request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "zone": {
+	//       "description": "Name of the zone for this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/zones/{zone}/reservations",
+	//   "request": {
+	//     "$ref": "Reservation"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.reservations.list":
+
+type ReservationsListCall struct {
+	s            *Service
+	project      string
+	zone         string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// List: A list all the reservations that have been configured for the
+// specified project in specified zone.
+func (r *ReservationsService) List(project string, zone string) *ReservationsListCall {
+	c := &ReservationsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.project = project
+	c.zone = zone
+	return c
+}
+
+// Filter sets the optional parameter "filter": A filter expression that
+// filters resources listed in the response. The expression must specify
+// the field name, a comparison operator, and the value that you want to
+// use for filtering. The value must be a string, a number, or a
+// boolean. The comparison operator must be either =, !=, >, or <.
+//
+// For example, if you are filtering Compute Engine instances, you can
+// exclude instances named example-instance by specifying name !=
+// example-instance.
+//
+// You can also filter nested fields. For example, you could specify
+// scheduling.automaticRestart = false to include instances only if they
+// are not scheduled for automatic restarts. You can use filtering on
+// nested fields to filter based on resource labels.
+//
+// To filter on multiple expressions, provide each separate expression
+// within parentheses. For example, (scheduling.automaticRestart = true)
+// (cpuPlatform = "Intel Skylake"). By default, each expression is an
+// AND expression. However, you can include AND and OR expressions
+// explicitly. For example, (cpuPlatform = "Intel Skylake") OR
+// (cpuPlatform = "Intel Broadwell") AND (scheduling.automaticRestart =
+// true).
+func (c *ReservationsListCall) Filter(filter string) *ReservationsListCall {
+	c.urlParams_.Set("filter", filter)
+	return c
+}
+
+// MaxResults sets the optional parameter "maxResults": The maximum
+// number of results per page that should be returned. If the number of
+// available results is larger than maxResults, Compute Engine returns a
+// nextPageToken that can be used to get the next page of results in
+// subsequent list requests. Acceptable values are 0 to 500, inclusive.
+// (Default: 500)
+func (c *ReservationsListCall) MaxResults(maxResults int64) *ReservationsListCall {
+	c.urlParams_.Set("maxResults", fmt.Sprint(maxResults))
+	return c
+}
+
+// OrderBy sets the optional parameter "orderBy": Sorts list results by
+// a certain order. By default, results are returned in alphanumerical
+// order based on the resource name.
+//
+// You can also sort results in descending order based on the creation
+// timestamp using orderBy="creationTimestamp desc". This sorts results
+// based on the creationTimestamp field in reverse chronological order
+// (newest result first). Use this to sort resources like operations so
+// that the newest operation is returned first.
+//
+// Currently, only sorting by name or creationTimestamp desc is
+// supported.
+func (c *ReservationsListCall) OrderBy(orderBy string) *ReservationsListCall {
+	c.urlParams_.Set("orderBy", orderBy)
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Specifies a page
+// token to use. Set pageToken to the nextPageToken returned by a
+// previous list request to get the next page of results.
+func (c *ReservationsListCall) PageToken(pageToken string) *ReservationsListCall {
+	c.urlParams_.Set("pageToken", pageToken)
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ReservationsListCall) Fields(s ...googleapi.Field) *ReservationsListCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// IfNoneMatch sets the optional parameter which makes the operation
+// fail if the object's ETag matches the given value. This is useful for
+// getting updates only after the object has changed since the last
+// request. Use googleapi.IsNotModified to check whether the response
+// error from Do is the result of In-None-Match.
+func (c *ReservationsListCall) IfNoneMatch(entityTag string) *ReservationsListCall {
+	c.ifNoneMatch_ = entityTag
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ReservationsListCall) Context(ctx context.Context) *ReservationsListCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ReservationsListCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ReservationsListCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/reservations")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"project": c.project,
+		"zone":    c.zone,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "compute.reservations.list" call.
+// Exactly one of *ReservationList or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *ReservationList.ServerResponse.Header or (if a response was returned
+// at all) in error.(*googleapi.Error).Header. Use
+// googleapi.IsNotModified to check whether the returned error was
+// because http.StatusNotModified was returned.
+func (c *ReservationsListCall) Do(opts ...googleapi.CallOption) (*ReservationList, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &ReservationList{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "A list all the reservations that have been configured for the specified project in specified zone.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.reservations.list",
+	//   "parameterOrder": [
+	//     "project",
+	//     "zone"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "A filter expression that filters resources listed in the response. The expression must specify the field name, a comparison operator, and the value that you want to use for filtering. The value must be a string, a number, or a boolean. The comparison operator must be either =, !=, \u003e, or \u003c.\n\nFor example, if you are filtering Compute Engine instances, you can exclude instances named example-instance by specifying name != example-instance.\n\nYou can also filter nested fields. For example, you could specify scheduling.automaticRestart = false to include instances only if they are not scheduled for automatic restarts. You can use filtering on nested fields to filter based on resource labels.\n\nTo filter on multiple expressions, provide each separate expression within parentheses. For example, (scheduling.automaticRestart = true) (cpuPlatform = \"Intel Skylake\"). By default, each expression is an AND expression. However, you can include AND and OR expressions explicitly. For example, (cpuPlatform = \"Intel Skylake\") OR (cpuPlatform = \"Intel Broadwell\") AND (scheduling.automaticRestart = true).",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "maxResults": {
+	//       "default": "500",
+	//       "description": "The maximum number of results per page that should be returned. If the number of available results is larger than maxResults, Compute Engine returns a nextPageToken that can be used to get the next page of results in subsequent list requests. Acceptable values are 0 to 500, inclusive. (Default: 500)",
+	//       "format": "uint32",
+	//       "location": "query",
+	//       "minimum": "0",
+	//       "type": "integer"
+	//     },
+	//     "orderBy": {
+	//       "description": "Sorts list results by a certain order. By default, results are returned in alphanumerical order based on the resource name.\n\nYou can also sort results in descending order based on the creation timestamp using orderBy=\"creationTimestamp desc\". This sorts results based on the creationTimestamp field in reverse chronological order (newest result first). Use this to sort resources like operations so that the newest operation is returned first.\n\nCurrently, only sorting by name or creationTimestamp desc is supported.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "pageToken": {
+	//       "description": "Specifies a page token to use. Set pageToken to the nextPageToken returned by a previous list request to get the next page of results.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "project": {
+	//       "description": "Project ID for this request.",
+	//       "location": "path",
+	//       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "zone": {
+	//       "description": "Name of the zone for this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/zones/{zone}/reservations",
+	//   "response": {
+	//     "$ref": "ReservationList"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
+// Pages invokes f for each page of results.
+// A non-nil error returned from f will halt the iteration.
+// The provided context supersedes any context provided to the Context method.
+func (c *ReservationsListCall) Pages(ctx context.Context, f func(*ReservationList) error) error {
+	c.ctx_ = ctx
+	defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point
+	for {
+		x, err := c.Do()
+		if err != nil {
+			return err
+		}
+		if err := f(x); err != nil {
+			return err
+		}
+		if x.NextPageToken == "" {
+			return nil
+		}
+		c.PageToken(x.NextPageToken)
+	}
+}
+
+// method id "compute.reservations.resize":
+
+type ReservationsResizeCall struct {
+	s                         *Service
+	project                   string
+	zone                      string
+	reservation               string
+	reservationsresizerequest *ReservationsResizeRequest
+	urlParams_                gensupport.URLParams
+	ctx_                      context.Context
+	header_                   http.Header
+}
+
+// Resize: Resizes the reservation (applicable to standalone
+// reservations only)
+func (r *ReservationsService) Resize(project string, zone string, reservation string, reservationsresizerequest *ReservationsResizeRequest) *ReservationsResizeCall {
+	c := &ReservationsResizeCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.project = project
+	c.zone = zone
+	c.reservation = reservation
+	c.reservationsresizerequest = reservationsresizerequest
+	return c
+}
+
+// RequestId sets the optional parameter "requestId": An optional
+// request ID to identify requests. Specify a unique request ID so that
+// if you must retry your request, the server will know to ignore the
+// request if it has already been completed.
+//
+// For example, consider a situation where you make an initial request
+// and the request times out. If you make the request again with the
+// same request ID, the server can check if original operation with the
+// same request ID was received, and if so, will ignore the second
+// request. This prevents clients from accidentally creating duplicate
+// commitments.
+//
+// The request ID must be a valid UUID with the exception that zero UUID
+// is not supported (00000000-0000-0000-0000-000000000000).
+func (c *ReservationsResizeCall) RequestId(requestId string) *ReservationsResizeCall {
+	c.urlParams_.Set("requestId", requestId)
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ReservationsResizeCall) Fields(s ...googleapi.Field) *ReservationsResizeCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ReservationsResizeCall) Context(ctx context.Context) *ReservationsResizeCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ReservationsResizeCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ReservationsResizeCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.reservationsresizerequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/reservations/{reservation}/resize")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"project":     c.project,
+		"zone":        c.zone,
+		"reservation": c.reservation,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "compute.reservations.resize" call.
+// Exactly one of *Operation or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *Operation.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *ReservationsResizeCall) Do(opts ...googleapi.CallOption) (*Operation, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Operation{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Resizes the reservation (applicable to standalone reservations only)",
+	//   "httpMethod": "POST",
+	//   "id": "compute.reservations.resize",
+	//   "parameterOrder": [
+	//     "project",
+	//     "zone",
+	//     "reservation"
+	//   ],
+	//   "parameters": {
+	//     "project": {
+	//       "description": "Project ID for this request.",
+	//       "location": "path",
+	//       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "requestId": {
+	//       "description": "An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed.\n\nFor example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments.\n\nThe request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "reservation": {
+	//       "description": "Name of the reservation to update.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "zone": {
+	//       "description": "Name of the zone for this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/zones/{zone}/reservations/{reservation}/resize",
+	//   "request": {
+	//     "$ref": "ReservationsResizeRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.reservations.setIamPolicy":
+
+type ReservationsSetIamPolicyCall struct {
+	s                    *Service
+	project              string
+	zone                 string
+	resource             string
+	zonesetpolicyrequest *ZoneSetPolicyRequest
+	urlParams_           gensupport.URLParams
+	ctx_                 context.Context
+	header_              http.Header
+}
+
+// SetIamPolicy: Sets the access control policy on the specified
+// resource. Replaces any existing policy.
+func (r *ReservationsService) SetIamPolicy(project string, zone string, resource string, zonesetpolicyrequest *ZoneSetPolicyRequest) *ReservationsSetIamPolicyCall {
+	c := &ReservationsSetIamPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.project = project
+	c.zone = zone
+	c.resource = resource
+	c.zonesetpolicyrequest = zonesetpolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ReservationsSetIamPolicyCall) Fields(s ...googleapi.Field) *ReservationsSetIamPolicyCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ReservationsSetIamPolicyCall) Context(ctx context.Context) *ReservationsSetIamPolicyCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ReservationsSetIamPolicyCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ReservationsSetIamPolicyCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.zonesetpolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/reservations/{resource}/setIamPolicy")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"project":  c.project,
+		"zone":     c.zone,
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "compute.reservations.setIamPolicy" call.
+// Exactly one of *Policy or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Policy.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *ReservationsSetIamPolicyCall) Do(opts ...googleapi.CallOption) (*Policy, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Policy{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Sets the access control policy on the specified resource. Replaces any existing policy.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.reservations.setIamPolicy",
+	//   "parameterOrder": [
+	//     "project",
+	//     "zone",
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "project": {
+	//       "description": "Project ID for this request.",
+	//       "location": "path",
+	//       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "resource": {
+	//       "description": "Name or id of the resource for this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?|[1-9][0-9]{0,19}",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "zone": {
+	//       "description": "The name of the zone for this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/zones/{zone}/reservations/{resource}/setIamPolicy",
+	//   "request": {
+	//     "$ref": "ZoneSetPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Policy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
+// method id "compute.reservations.testIamPermissions":
+
+type ReservationsTestIamPermissionsCall struct {
+	s                      *Service
+	project                string
+	zone                   string
+	resource               string
+	testpermissionsrequest *TestPermissionsRequest
+	urlParams_             gensupport.URLParams
+	ctx_                   context.Context
+	header_                http.Header
+}
+
+// TestIamPermissions: Returns permissions that a caller has on the
+// specified resource.
+func (r *ReservationsService) TestIamPermissions(project string, zone string, resource string, testpermissionsrequest *TestPermissionsRequest) *ReservationsTestIamPermissionsCall {
+	c := &ReservationsTestIamPermissionsCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.project = project
+	c.zone = zone
+	c.resource = resource
+	c.testpermissionsrequest = testpermissionsrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ReservationsTestIamPermissionsCall) Fields(s ...googleapi.Field) *ReservationsTestIamPermissionsCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ReservationsTestIamPermissionsCall) Context(ctx context.Context) *ReservationsTestIamPermissionsCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ReservationsTestIamPermissionsCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ReservationsTestIamPermissionsCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/reservations/{resource}/testIamPermissions")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"project":  c.project,
+		"zone":     c.zone,
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "compute.reservations.testIamPermissions" call.
+// Exactly one of *TestPermissionsResponse or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *TestPermissionsResponse.ServerResponse.Header or (if a response was
+// returned at all) in error.(*googleapi.Error).Header. Use
+// googleapi.IsNotModified to check whether the returned error was
+// because http.StatusNotModified was returned.
+func (c *ReservationsTestIamPermissionsCall) Do(opts ...googleapi.CallOption) (*TestPermissionsResponse, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &TestPermissionsResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Returns permissions that a caller has on the specified resource.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.reservations.testIamPermissions",
+	//   "parameterOrder": [
+	//     "project",
+	//     "zone",
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "project": {
+	//       "description": "Project ID for this request.",
+	//       "location": "path",
+	//       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "resource": {
+	//       "description": "Name or id of the resource for this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?|[1-9][0-9]{0,19}",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "zone": {
+	//       "description": "The name of the zone for this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/zones/{zone}/reservations/{resource}/testIamPermissions",
+	//   "request": {
+	//     "$ref": "TestPermissionsRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "TestPermissionsResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
 // method id "compute.resourcePolicies.aggregatedList":
 
 type ResourcePoliciesAggregatedListCall struct {
@@ -90056,6 +92520,173 @@
 
 }
 
+// method id "compute.resourcePolicies.getIamPolicy":
+
+type ResourcePoliciesGetIamPolicyCall struct {
+	s            *Service
+	project      string
+	region       string
+	resource     string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// GetIamPolicy: Gets the access control policy for a resource. May be
+// empty if no such policy or resource exists.
+func (r *ResourcePoliciesService) GetIamPolicy(project string, region string, resource string) *ResourcePoliciesGetIamPolicyCall {
+	c := &ResourcePoliciesGetIamPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.project = project
+	c.region = region
+	c.resource = resource
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ResourcePoliciesGetIamPolicyCall) Fields(s ...googleapi.Field) *ResourcePoliciesGetIamPolicyCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// IfNoneMatch sets the optional parameter which makes the operation
+// fail if the object's ETag matches the given value. This is useful for
+// getting updates only after the object has changed since the last
+// request. Use googleapi.IsNotModified to check whether the response
+// error from Do is the result of In-None-Match.
+func (c *ResourcePoliciesGetIamPolicyCall) IfNoneMatch(entityTag string) *ResourcePoliciesGetIamPolicyCall {
+	c.ifNoneMatch_ = entityTag
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ResourcePoliciesGetIamPolicyCall) Context(ctx context.Context) *ResourcePoliciesGetIamPolicyCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ResourcePoliciesGetIamPolicyCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ResourcePoliciesGetIamPolicyCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/resourcePolicies/{resource}/getIamPolicy")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"project":  c.project,
+		"region":   c.region,
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "compute.resourcePolicies.getIamPolicy" call.
+// Exactly one of *Policy or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Policy.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *ResourcePoliciesGetIamPolicyCall) Do(opts ...googleapi.CallOption) (*Policy, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Policy{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets the access control policy for a resource. May be empty if no such policy or resource exists.",
+	//   "httpMethod": "GET",
+	//   "id": "compute.resourcePolicies.getIamPolicy",
+	//   "parameterOrder": [
+	//     "project",
+	//     "region",
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "project": {
+	//       "description": "Project ID for this request.",
+	//       "location": "path",
+	//       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "region": {
+	//       "description": "The name of the region for this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "resource": {
+	//       "description": "Name or id of the resource for this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?|[1-9][0-9]{0,19}",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/regions/{region}/resourcePolicies/{resource}/getIamPolicy",
+	//   "response": {
+	//     "$ref": "Policy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
+	//   ]
+	// }
+
+}
+
 // method id "compute.resourcePolicies.insert":
 
 type ResourcePoliciesInsertCall struct {
@@ -90493,6 +93124,168 @@
 	}
 }
 
+// method id "compute.resourcePolicies.setIamPolicy":
+
+type ResourcePoliciesSetIamPolicyCall struct {
+	s                      *Service
+	project                string
+	region                 string
+	resource               string
+	regionsetpolicyrequest *RegionSetPolicyRequest
+	urlParams_             gensupport.URLParams
+	ctx_                   context.Context
+	header_                http.Header
+}
+
+// SetIamPolicy: Sets the access control policy on the specified
+// resource. Replaces any existing policy.
+func (r *ResourcePoliciesService) SetIamPolicy(project string, region string, resource string, regionsetpolicyrequest *RegionSetPolicyRequest) *ResourcePoliciesSetIamPolicyCall {
+	c := &ResourcePoliciesSetIamPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.project = project
+	c.region = region
+	c.resource = resource
+	c.regionsetpolicyrequest = regionsetpolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ResourcePoliciesSetIamPolicyCall) Fields(s ...googleapi.Field) *ResourcePoliciesSetIamPolicyCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ResourcePoliciesSetIamPolicyCall) Context(ctx context.Context) *ResourcePoliciesSetIamPolicyCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ResourcePoliciesSetIamPolicyCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ResourcePoliciesSetIamPolicyCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.regionsetpolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/resourcePolicies/{resource}/setIamPolicy")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"project":  c.project,
+		"region":   c.region,
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "compute.resourcePolicies.setIamPolicy" call.
+// Exactly one of *Policy or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Policy.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *ResourcePoliciesSetIamPolicyCall) Do(opts ...googleapi.CallOption) (*Policy, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Policy{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Sets the access control policy on the specified resource. Replaces any existing policy.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.resourcePolicies.setIamPolicy",
+	//   "parameterOrder": [
+	//     "project",
+	//     "region",
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "project": {
+	//       "description": "Project ID for this request.",
+	//       "location": "path",
+	//       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "region": {
+	//       "description": "The name of the region for this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "resource": {
+	//       "description": "Name or id of the resource for this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?|[1-9][0-9]{0,19}",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/regions/{region}/resourcePolicies/{resource}/setIamPolicy",
+	//   "request": {
+	//     "$ref": "RegionSetPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Policy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
 // method id "compute.resourcePolicies.testIamPermissions":
 
 type ResourcePoliciesTestIamPermissionsCall struct {
@@ -92493,7 +95286,10 @@
 }
 
 // Update: Updates the specified Router resource with the data included
-// in the request.
+// in the request. This method conforms to PUT semantics, which requests
+// that the state of the target resource be created or replaced with the
+// state defined by the representation enclosed in the request message
+// payload.
 func (r *RoutersService) Update(project string, region string, router string, router2 *Router) *RoutersUpdateCall {
 	c := &RoutersUpdateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
 	c.project = project
@@ -92614,7 +95410,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Updates the specified Router resource with the data included in the request.",
+	//   "description": "Updates the specified Router resource with the data included in the request. This method conforms to PUT semantics, which requests that the state of the target resource be created or replaced with the state defined by the representation enclosed in the request message payload.",
 	//   "httpMethod": "PUT",
 	//   "id": "compute.routers.update",
 	//   "parameterOrder": [
diff --git a/dataflow/v1b3/dataflow-api.json b/dataflow/v1b3/dataflow-api.json
index a5b986e..d823626 100644
--- a/dataflow/v1b3/dataflow-api.json
+++ b/dataflow/v1b3/dataflow-api.json
@@ -1972,7 +1972,7 @@
       }
     }
   },
-  "revision": "20190519",
+  "revision": "20190607",
   "rootUrl": "https://dataflow.googleapis.com/",
   "schemas": {
     "ApproximateProgress": {
@@ -3062,6 +3062,26 @@
       },
       "type": "object"
     },
+    "HotKeyDetection": {
+      "description": "Proto describing a hot key detected on a given WorkItem.",
+      "id": "HotKeyDetection",
+      "properties": {
+        "hotKeyAge": {
+          "description": "The age of the hot key measured from when it was first detected.",
+          "format": "google-duration",
+          "type": "string"
+        },
+        "systemName": {
+          "description": "System-defined name of the step containing this hot key.\nUnique across the workflow.",
+          "type": "string"
+        },
+        "userStepName": {
+          "description": "User-provided name of the step that contains this hot key.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "InstructionInput": {
       "description": "An input of an instruction, as a reference to an output of a\nproducer instruction.",
       "id": "InstructionInput",
@@ -4939,7 +4959,7 @@
       "type": "object"
     },
     "Status": {
-      "description": "The `Status` type defines a logical error model that is suitable for\ndifferent programming environments, including REST APIs and RPC APIs. It is\nused by [gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error\nmessage, and error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed.  The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` that can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n    it may embed the `Status` in the normal response to indicate the partial\n    errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n    have a `Status` message for error reporting.\n\n- Batch operations. If a client uses batch request and batch response, the\n    `Status` message should be used directly inside batch response, one for\n    each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n    results in its response, the status of those operations should be\n    represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n    be used directly after any stripping needed for security/privacy reasons.",
+      "description": "The `Status` type defines a logical error model that is suitable for\ndifferent programming environments, including REST APIs and RPC APIs. It is\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\nthree pieces of data: error code, error message, and error details.\n\nYou can find out more about this error model and how to work with it in the\n[API Design Guide](https://cloud.google.com/apis/design/errors).",
       "id": "Status",
       "properties": {
         "code": {
@@ -5543,6 +5563,10 @@
           "description": "Other data returned by the service, specific to the particular\nworker harness.",
           "type": "object"
         },
+        "hotKeyDetection": {
+          "$ref": "HotKeyDetection",
+          "description": "A hot key is a symptom of poor data distribution in which there are enough\nelements mapped to a single key to impact pipeline performance. When\npresent, this field includes metadata associated with any hot key."
+        },
         "leaseExpireTime": {
           "description": "Time at which the current lease will expire.",
           "format": "google-datetime",
diff --git a/dataflow/v1b3/dataflow-gen.go b/dataflow/v1b3/dataflow-gen.go
index 7dbc292..ec475df 100644
--- a/dataflow/v1b3/dataflow-gen.go
+++ b/dataflow/v1b3/dataflow-gen.go
@@ -2284,6 +2284,45 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// HotKeyDetection: Proto describing a hot key detected on a given
+// WorkItem.
+type HotKeyDetection struct {
+	// HotKeyAge: The age of the hot key measured from when it was first
+	// detected.
+	HotKeyAge string `json:"hotKeyAge,omitempty"`
+
+	// SystemName: System-defined name of the step containing this hot
+	// key.
+	// Unique across the workflow.
+	SystemName string `json:"systemName,omitempty"`
+
+	// UserStepName: User-provided name of the step that contains this hot
+	// key.
+	UserStepName string `json:"userStepName,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "HotKeyAge") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "HotKeyAge") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *HotKeyDetection) MarshalJSON() ([]byte, error) {
+	type NoMethod HotKeyDetection
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // InstructionInput: An input of an instruction, as a reference to an
 // output of a
 // producer instruction.
@@ -5626,81 +5665,14 @@
 // suitable for
 // different programming environments, including REST APIs and RPC APIs.
 // It is
-// used by [gRPC](https://github.com/grpc). The error model is designed
-// to be:
+// used by [gRPC](https://github.com/grpc). Each `Status` message
+// contains
+// three pieces of data: error code, error message, and error
+// details.
 //
-// - Simple to use and understand for most users
-// - Flexible enough to meet unexpected needs
-//
-// # Overview
-//
-// The `Status` message contains three pieces of data: error code,
-// error
-// message, and error details. The error code should be an enum value
-// of
-// google.rpc.Code, but it may accept additional error codes if needed.
-// The
-// error message should be a developer-facing English message that
-// helps
-// developers *understand* and *resolve* the error. If a localized
-// user-facing
-// error message is needed, put the localized message in the error
-// details or
-// localize it in the client. The optional error details may contain
-// arbitrary
-// information about the error. There is a predefined set of error
-// detail types
-// in the package `google.rpc` that can be used for common error
-// conditions.
-//
-// # Language mapping
-//
-// The `Status` message is the logical representation of the error
-// model, but it
-// is not necessarily the actual wire format. When the `Status` message
-// is
-// exposed in different client libraries and different wire protocols,
-// it can be
-// mapped differently. For example, it will likely be mapped to some
-// exceptions
-// in Java, but more likely mapped to some error codes in C.
-//
-// # Other uses
-//
-// The error model and the `Status` message can be used in a variety
-// of
-// environments, either with or without APIs, to provide a
-// consistent developer experience across different
-// environments.
-//
-// Example uses of this error model include:
-//
-// - Partial errors. If a service needs to return partial errors to the
-// client,
-//     it may embed the `Status` in the normal response to indicate the
-// partial
-//     errors.
-//
-// - Workflow errors. A typical workflow has multiple steps. Each step
-// may
-//     have a `Status` message for error reporting.
-//
-// - Batch operations. If a client uses batch request and batch
-// response, the
-//     `Status` message should be used directly inside batch response,
-// one for
-//     each error sub-response.
-//
-// - Asynchronous operations. If an API call embeds asynchronous
-// operation
-//     results in its response, the status of those operations should
-// be
-//     represented directly using the `Status` message.
-//
-// - Logging. If some API errors are stored in logs, the message
-// `Status` could
-//     be used directly after any stripping needed for security/privacy
-// reasons.
+// You can find out more about this error model and how to work with it
+// in the
+// [API Design Guide](https://cloud.google.com/apis/design/errors).
 type Status struct {
 	// Code: The status code, which should be an enum value of
 	// google.rpc.Code.
@@ -6623,6 +6595,13 @@
 	// worker harness.
 	HarnessData googleapi.RawMessage `json:"harnessData,omitempty"`
 
+	// HotKeyDetection: A hot key is a symptom of poor data distribution in
+	// which there are enough
+	// elements mapped to a single key to impact pipeline performance.
+	// When
+	// present, this field includes metadata associated with any hot key.
+	HotKeyDetection *HotKeyDetection `json:"hotKeyDetection,omitempty"`
+
 	// LeaseExpireTime: Time at which the current lease will expire.
 	LeaseExpireTime string `json:"leaseExpireTime,omitempty"`
 
diff --git a/tagmanager/v2/tagmanager-api.json b/tagmanager/v2/tagmanager-api.json
index 918faef..b94b39d 100644
--- a/tagmanager/v2/tagmanager-api.json
+++ b/tagmanager/v2/tagmanager-api.json
@@ -26,17 +26,16 @@
       }
     }
   },
-  "basePath": "/tagmanager/v2/",
-  "baseUrl": "https://www.googleapis.com/tagmanager/v2/",
-  "batchPath": "batch/tagmanager/v2",
+  "basePath": "",
+  "baseUrl": "https://www.googleapis.com/",
+  "batchPath": "batch",
   "canonicalName": "Tag Manager",
-  "description": "Accesses Tag Manager accounts and containers.",
+  "description": "This API allows clients to access and modify container and tag\n     configuration.",
   "discoveryVersion": "v1",
-  "documentationLink": "https://developers.google.com/tag-manager/api/v2/",
-  "etag": "\"VPK3KBfpaEgZ16pozGOoMYfKc0U/DTmHY5YcSH4XeouavtxWfeZiT6M\"",
+  "documentationLink": "https://developers.google.com/tag-manager",
   "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+    "x16": "http://www.google.com/images/icons/product/search-16.gif",
+    "x32": "http://www.google.com/images/icons/product/search-32.gif"
   },
   "id": "tagmanager:v2",
   "kind": "discovery#restDescription",
@@ -44,18 +43,45 @@
   "ownerDomain": "google.com",
   "ownerName": "Google",
   "parameters": {
-    "alt": {
-      "default": "json",
-      "description": "Data format for the response.",
+    "$.xgafv": {
+      "description": "V1 error format.",
       "enum": [
-        "json"
+        "1",
+        "2"
       ],
       "enumDescriptions": [
-        "Responses with Content-Type of application/json"
+        "v1 error format",
+        "v2 error format"
       ],
       "location": "query",
       "type": "string"
     },
+    "access_token": {
+      "description": "OAuth access token.",
+      "location": "query",
+      "type": "string"
+    },
+    "alt": {
+      "default": "json",
+      "description": "Data format for response.",
+      "enum": [
+        "json",
+        "media",
+        "proto"
+      ],
+      "enumDescriptions": [
+        "Responses with Content-Type of application/json",
+        "Media download with context-dependent Content-Type",
+        "Responses with Content-Type of application/x-protobuf"
+      ],
+      "location": "query",
+      "type": "string"
+    },
+    "callback": {
+      "description": "JSONP",
+      "location": "query",
+      "type": "string"
+    },
     "fields": {
       "description": "Selector specifying which fields to include in a partial response.",
       "location": "query",
@@ -78,12 +104,17 @@
       "type": "boolean"
     },
     "quotaUser": {
-      "description": "An opaque string that represents a user for quota purposes. Must not exceed 40 characters.",
+      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
       "location": "query",
       "type": "string"
     },
-    "userIp": {
-      "description": "Deprecated. Please use quotaUser instead.",
+    "uploadType": {
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+      "location": "query",
+      "type": "string"
+    },
+    "upload_protocol": {
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
       "location": "query",
       "type": "string"
     }
@@ -94,6 +125,7 @@
       "methods": {
         "get": {
           "description": "Gets a GTM Account.",
+          "flatPath": "tagmanager/v2/accounts/{accountsId}",
           "httpMethod": "GET",
           "id": "tagmanager.accounts.get",
           "parameterOrder": [
@@ -101,13 +133,14 @@
           ],
           "parameters": {
             "path": {
-              "description": "GTM Accounts's API relative path. Example: accounts/{account_id}",
+              "description": "GTM Accounts's API relative path.\nExample: accounts/{account_id}",
               "location": "path",
+              "pattern": "^accounts/[^/]+$",
               "required": true,
               "type": "string"
             }
           },
-          "path": "{+path}",
+          "path": "tagmanager/v2/{+path}",
           "response": {
             "$ref": "Account"
           },
@@ -119,8 +152,10 @@
         },
         "list": {
           "description": "Lists all GTM Accounts that a user has access to.",
+          "flatPath": "tagmanager/v2/accounts",
           "httpMethod": "GET",
           "id": "tagmanager.accounts.list",
+          "parameterOrder": [],
           "parameters": {
             "pageToken": {
               "description": "Continuation token for fetching the next page of results.",
@@ -128,7 +163,7 @@
               "type": "string"
             }
           },
-          "path": "accounts",
+          "path": "tagmanager/v2/accounts",
           "response": {
             "$ref": "ListAccountsResponse"
           },
@@ -140,6 +175,7 @@
         },
         "update": {
           "description": "Updates a GTM Account.",
+          "flatPath": "tagmanager/v2/accounts/{accountsId}",
           "httpMethod": "PUT",
           "id": "tagmanager.accounts.update",
           "parameterOrder": [
@@ -147,18 +183,19 @@
           ],
           "parameters": {
             "fingerprint": {
-              "description": "When provided, this fingerprint must match the fingerprint of the account in storage.",
+              "description": "When provided, this fingerprint must match the fingerprint of the account\nin storage.",
               "location": "query",
               "type": "string"
             },
             "path": {
-              "description": "GTM Accounts's API relative path. Example: accounts/{account_id}",
+              "description": "GTM Accounts's API relative path.\nExample: accounts/{account_id}",
               "location": "path",
+              "pattern": "^accounts/[^/]+$",
               "required": true,
               "type": "string"
             }
           },
-          "path": "{+path}",
+          "path": "tagmanager/v2/{+path}",
           "request": {
             "$ref": "Account"
           },
@@ -175,6 +212,7 @@
           "methods": {
             "create": {
               "description": "Creates a Container.",
+              "flatPath": "tagmanager/v2/accounts/{accountsId}/containers",
               "httpMethod": "POST",
               "id": "tagmanager.accounts.containers.create",
               "parameterOrder": [
@@ -182,13 +220,14 @@
               ],
               "parameters": {
                 "parent": {
-                  "description": "GTM Account's API relative path. Example: accounts/{account_id}.",
+                  "description": "GTM Account's API relative path.\nExample: accounts/{account_id}.",
                   "location": "path",
+                  "pattern": "^accounts/[^/]+$",
                   "required": true,
                   "type": "string"
                 }
               },
-              "path": "{+parent}/containers",
+              "path": "tagmanager/v2/{+parent}/containers",
               "request": {
                 "$ref": "Container"
               },
@@ -201,6 +240,7 @@
             },
             "delete": {
               "description": "Deletes a Container.",
+              "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}",
               "httpMethod": "DELETE",
               "id": "tagmanager.accounts.containers.delete",
               "parameterOrder": [
@@ -208,19 +248,21 @@
               ],
               "parameters": {
                 "path": {
-                  "description": "GTM Container's API relative path. Example: accounts/{account_id}/containers/{container_id}",
+                  "description": "GTM Container's API relative path.\nExample: accounts/{account_id}/containers/{container_id}",
                   "location": "path",
+                  "pattern": "^accounts/[^/]+/containers/[^/]+$",
                   "required": true,
                   "type": "string"
                 }
               },
-              "path": "{+path}",
+              "path": "tagmanager/v2/{+path}",
               "scopes": [
                 "https://www.googleapis.com/auth/tagmanager.delete.containers"
               ]
             },
             "get": {
               "description": "Gets a Container.",
+              "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}",
               "httpMethod": "GET",
               "id": "tagmanager.accounts.containers.get",
               "parameterOrder": [
@@ -228,13 +270,14 @@
               ],
               "parameters": {
                 "path": {
-                  "description": "GTM Container's API relative path. Example: accounts/{account_id}/containers/{container_id}",
+                  "description": "GTM Container's API relative path.\nExample: accounts/{account_id}/containers/{container_id}",
                   "location": "path",
+                  "pattern": "^accounts/[^/]+/containers/[^/]+$",
                   "required": true,
                   "type": "string"
                 }
               },
-              "path": "{+path}",
+              "path": "tagmanager/v2/{+path}",
               "response": {
                 "$ref": "Container"
               },
@@ -245,6 +288,7 @@
             },
             "list": {
               "description": "Lists all Containers that belongs to a GTM Account.",
+              "flatPath": "tagmanager/v2/accounts/{accountsId}/containers",
               "httpMethod": "GET",
               "id": "tagmanager.accounts.containers.list",
               "parameterOrder": [
@@ -257,13 +301,14 @@
                   "type": "string"
                 },
                 "parent": {
-                  "description": "GTM Accounts's API relative path. Example: accounts/{account_id}.",
+                  "description": "GTM Accounts's API relative path.\nExample: accounts/{account_id}.",
                   "location": "path",
+                  "pattern": "^accounts/[^/]+$",
                   "required": true,
                   "type": "string"
                 }
               },
-              "path": "{+parent}/containers",
+              "path": "tagmanager/v2/{+parent}/containers",
               "response": {
                 "$ref": "ListContainersResponse"
               },
@@ -274,6 +319,7 @@
             },
             "update": {
               "description": "Updates a Container.",
+              "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}",
               "httpMethod": "PUT",
               "id": "tagmanager.accounts.containers.update",
               "parameterOrder": [
@@ -281,18 +327,19 @@
               ],
               "parameters": {
                 "fingerprint": {
-                  "description": "When provided, this fingerprint must match the fingerprint of the container in storage.",
+                  "description": "When provided, this fingerprint must match the fingerprint of the\ncontainer in storage.",
                   "location": "query",
                   "type": "string"
                 },
                 "path": {
-                  "description": "GTM Container's API relative path. Example: accounts/{account_id}/containers/{container_id}",
+                  "description": "GTM Container's API relative path.\nExample: accounts/{account_id}/containers/{container_id}",
                   "location": "path",
+                  "pattern": "^accounts/[^/]+/containers/[^/]+$",
                   "required": true,
                   "type": "string"
                 }
               },
-              "path": "{+path}",
+              "path": "tagmanager/v2/{+path}",
               "request": {
                 "$ref": "Container"
               },
@@ -309,6 +356,7 @@
               "methods": {
                 "create": {
                   "description": "Creates a GTM Environment.",
+                  "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/environments",
                   "httpMethod": "POST",
                   "id": "tagmanager.accounts.containers.environments.create",
                   "parameterOrder": [
@@ -316,13 +364,14 @@
                   ],
                   "parameters": {
                     "parent": {
-                      "description": "GTM Container's API relative path. Example: accounts/{account_id}/containers/{container_id}",
+                      "description": "GTM Container's API relative path.\nExample: accounts/{account_id}/containers/{container_id}",
                       "location": "path",
+                      "pattern": "^accounts/[^/]+/containers/[^/]+$",
                       "required": true,
                       "type": "string"
                     }
                   },
-                  "path": "{+parent}/environments",
+                  "path": "tagmanager/v2/{+parent}/environments",
                   "request": {
                     "$ref": "Environment"
                   },
@@ -335,6 +384,7 @@
                 },
                 "delete": {
                   "description": "Deletes a GTM Environment.",
+                  "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/environments/{environmentsId}",
                   "httpMethod": "DELETE",
                   "id": "tagmanager.accounts.containers.environments.delete",
                   "parameterOrder": [
@@ -342,19 +392,21 @@
                   ],
                   "parameters": {
                     "path": {
-                      "description": "GTM Environment's API relative path. Example: accounts/{account_id}/containers/{container_id}/environments/{environment_id}",
+                      "description": "GTM Environment's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/environments/{environment_id}",
                       "location": "path",
+                      "pattern": "^accounts/[^/]+/containers/[^/]+/environments/[^/]+$",
                       "required": true,
                       "type": "string"
                     }
                   },
-                  "path": "{+path}",
+                  "path": "tagmanager/v2/{+path}",
                   "scopes": [
                     "https://www.googleapis.com/auth/tagmanager.edit.containers"
                   ]
                 },
                 "get": {
                   "description": "Gets a GTM Environment.",
+                  "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/environments/{environmentsId}",
                   "httpMethod": "GET",
                   "id": "tagmanager.accounts.containers.environments.get",
                   "parameterOrder": [
@@ -362,13 +414,14 @@
                   ],
                   "parameters": {
                     "path": {
-                      "description": "GTM Environment's API relative path. Example: accounts/{account_id}/containers/{container_id}/environments/{environment_id}",
+                      "description": "GTM Environment's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/environments/{environment_id}",
                       "location": "path",
+                      "pattern": "^accounts/[^/]+/containers/[^/]+/environments/[^/]+$",
                       "required": true,
                       "type": "string"
                     }
                   },
-                  "path": "{+path}",
+                  "path": "tagmanager/v2/{+path}",
                   "response": {
                     "$ref": "Environment"
                   },
@@ -379,6 +432,7 @@
                 },
                 "list": {
                   "description": "Lists all GTM Environments of a GTM Container.",
+                  "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/environments",
                   "httpMethod": "GET",
                   "id": "tagmanager.accounts.containers.environments.list",
                   "parameterOrder": [
@@ -391,13 +445,14 @@
                       "type": "string"
                     },
                     "parent": {
-                      "description": "GTM Container's API relative path. Example: accounts/{account_id}/containers/{container_id}",
+                      "description": "GTM Container's API relative path.\nExample: accounts/{account_id}/containers/{container_id}",
                       "location": "path",
+                      "pattern": "^accounts/[^/]+/containers/[^/]+$",
                       "required": true,
                       "type": "string"
                     }
                   },
-                  "path": "{+parent}/environments",
+                  "path": "tagmanager/v2/{+parent}/environments",
                   "response": {
                     "$ref": "ListEnvironmentsResponse"
                   },
@@ -408,6 +463,7 @@
                 },
                 "reauthorize": {
                   "description": "Re-generates the authorization code for a GTM Environment.",
+                  "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/environments/{environmentsId}:reauthorize",
                   "httpMethod": "POST",
                   "id": "tagmanager.accounts.containers.environments.reauthorize",
                   "parameterOrder": [
@@ -415,13 +471,14 @@
                   ],
                   "parameters": {
                     "path": {
-                      "description": "GTM Environment's API relative path. Example: accounts/{account_id}/containers/{container_id}/environments/{environment_id}",
+                      "description": "GTM Environment's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/environments/{environment_id}",
                       "location": "path",
+                      "pattern": "^accounts/[^/]+/containers/[^/]+/environments/[^/]+$",
                       "required": true,
                       "type": "string"
                     }
                   },
-                  "path": "{+path}:reauthorize",
+                  "path": "tagmanager/v2/{+path}:reauthorize",
                   "request": {
                     "$ref": "Environment"
                   },
@@ -434,6 +491,7 @@
                 },
                 "update": {
                   "description": "Updates a GTM Environment.",
+                  "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/environments/{environmentsId}",
                   "httpMethod": "PUT",
                   "id": "tagmanager.accounts.containers.environments.update",
                   "parameterOrder": [
@@ -441,18 +499,19 @@
                   ],
                   "parameters": {
                     "fingerprint": {
-                      "description": "When provided, this fingerprint must match the fingerprint of the environment in storage.",
+                      "description": "When provided, this fingerprint must match the fingerprint of the\nenvironment in storage.",
                       "location": "query",
                       "type": "string"
                     },
                     "path": {
-                      "description": "GTM Environment's API relative path. Example: accounts/{account_id}/containers/{container_id}/environments/{environment_id}",
+                      "description": "GTM Environment's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/environments/{environment_id}",
                       "location": "path",
+                      "pattern": "^accounts/[^/]+/containers/[^/]+/environments/[^/]+$",
                       "required": true,
                       "type": "string"
                     }
                   },
-                  "path": "{+path}",
+                  "path": "tagmanager/v2/{+path}",
                   "request": {
                     "$ref": "Environment"
                   },
@@ -469,6 +528,7 @@
               "methods": {
                 "latest": {
                   "description": "Gets the latest container version header",
+                  "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/version_headers:latest",
                   "httpMethod": "GET",
                   "id": "tagmanager.accounts.containers.version_headers.latest",
                   "parameterOrder": [
@@ -476,13 +536,14 @@
                   ],
                   "parameters": {
                     "parent": {
-                      "description": "GTM Container's API relative path. Example: accounts/{account_id}/containers/{container_id}",
+                      "description": "GTM Container's API relative path.\nExample: accounts/{account_id}/containers/{container_id}",
                       "location": "path",
+                      "pattern": "^accounts/[^/]+/containers/[^/]+$",
                       "required": true,
                       "type": "string"
                     }
                   },
-                  "path": "{+parent}/version_headers:latest",
+                  "path": "tagmanager/v2/{+parent}/version_headers:latest",
                   "response": {
                     "$ref": "ContainerVersionHeader"
                   },
@@ -493,6 +554,7 @@
                 },
                 "list": {
                   "description": "Lists all Container Versions of a GTM Container.",
+                  "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/version_headers",
                   "httpMethod": "GET",
                   "id": "tagmanager.accounts.containers.version_headers.list",
                   "parameterOrder": [
@@ -510,13 +572,14 @@
                       "type": "string"
                     },
                     "parent": {
-                      "description": "GTM Container's API relative path. Example: accounts/{account_id}/containers/{container_id}",
+                      "description": "GTM Container's API relative path.\nExample: accounts/{account_id}/containers/{container_id}",
                       "location": "path",
+                      "pattern": "^accounts/[^/]+/containers/[^/]+$",
                       "required": true,
                       "type": "string"
                     }
                   },
-                  "path": "{+parent}/version_headers",
+                  "path": "tagmanager/v2/{+parent}/version_headers",
                   "response": {
                     "$ref": "ListContainerVersionsResponse"
                   },
@@ -532,6 +595,7 @@
               "methods": {
                 "delete": {
                   "description": "Deletes a Container Version.",
+                  "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/versions/{versionsId}",
                   "httpMethod": "DELETE",
                   "id": "tagmanager.accounts.containers.versions.delete",
                   "parameterOrder": [
@@ -539,19 +603,21 @@
                   ],
                   "parameters": {
                     "path": {
-                      "description": "GTM ContainerVersion's API relative path. Example: accounts/{account_id}/containers/{container_id}/versions/{version_id}",
+                      "description": "GTM ContainerVersion's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/versions/{version_id}",
                       "location": "path",
+                      "pattern": "^accounts/[^/]+/containers/[^/]+/versions/[^/]+$",
                       "required": true,
                       "type": "string"
                     }
                   },
-                  "path": "{+path}",
+                  "path": "tagmanager/v2/{+path}",
                   "scopes": [
                     "https://www.googleapis.com/auth/tagmanager.edit.containerversions"
                   ]
                 },
                 "get": {
                   "description": "Gets a Container Version.",
+                  "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/versions/{versionsId}",
                   "httpMethod": "GET",
                   "id": "tagmanager.accounts.containers.versions.get",
                   "parameterOrder": [
@@ -559,18 +625,19 @@
                   ],
                   "parameters": {
                     "containerVersionId": {
-                      "description": "The GTM ContainerVersion ID. Specify published to retrieve the currently published version.",
+                      "description": "The GTM ContainerVersion ID. Specify \u003ccode\u003epublished\u003c/code\u003e to retrieve\nthe currently published version.",
                       "location": "query",
                       "type": "string"
                     },
                     "path": {
-                      "description": "GTM ContainerVersion's API relative path. Example: accounts/{account_id}/containers/{container_id}/versions/{version_id}",
+                      "description": "GTM ContainerVersion's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/versions/{version_id}",
                       "location": "path",
+                      "pattern": "^accounts/[^/]+/containers/[^/]+/versions/[^/]+$",
                       "required": true,
                       "type": "string"
                     }
                   },
-                  "path": "{+path}",
+                  "path": "tagmanager/v2/{+path}",
                   "response": {
                     "$ref": "ContainerVersion"
                   },
@@ -582,6 +649,7 @@
                 },
                 "live": {
                   "description": "Gets the live (i.e. published) container version",
+                  "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/versions:live",
                   "httpMethod": "GET",
                   "id": "tagmanager.accounts.containers.versions.live",
                   "parameterOrder": [
@@ -589,13 +657,14 @@
                   ],
                   "parameters": {
                     "parent": {
-                      "description": "GTM Container's API relative path. Example: accounts/{account_id}/containers/{container_id}",
+                      "description": "GTM Container's API relative path.\nExample: accounts/{account_id}/containers/{container_id}",
                       "location": "path",
+                      "pattern": "^accounts/[^/]+/containers/[^/]+$",
                       "required": true,
                       "type": "string"
                     }
                   },
-                  "path": "{+parent}/versions:live",
+                  "path": "tagmanager/v2/{+parent}/versions:live",
                   "response": {
                     "$ref": "ContainerVersion"
                   },
@@ -606,6 +675,7 @@
                 },
                 "publish": {
                   "description": "Publishes a Container Version.",
+                  "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/versions/{versionsId}:publish",
                   "httpMethod": "POST",
                   "id": "tagmanager.accounts.containers.versions.publish",
                   "parameterOrder": [
@@ -613,18 +683,19 @@
                   ],
                   "parameters": {
                     "fingerprint": {
-                      "description": "When provided, this fingerprint must match the fingerprint of the container version in storage.",
+                      "description": "When provided, this fingerprint must match the fingerprint of the\ncontainer version in storage.",
                       "location": "query",
                       "type": "string"
                     },
                     "path": {
-                      "description": "GTM ContainerVersion's API relative path. Example: accounts/{account_id}/containers/{container_id}/versions/{version_id}",
+                      "description": "GTM ContainerVersion's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/versions/{version_id}",
                       "location": "path",
+                      "pattern": "^accounts/[^/]+/containers/[^/]+/versions/[^/]+$",
                       "required": true,
                       "type": "string"
                     }
                   },
-                  "path": "{+path}:publish",
+                  "path": "tagmanager/v2/{+path}:publish",
                   "response": {
                     "$ref": "PublishContainerVersionResponse"
                   },
@@ -633,7 +704,8 @@
                   ]
                 },
                 "set_latest": {
-                  "description": "Sets the latest version used for synchronization of workspaces when detecting conflicts and errors.",
+                  "description": "Sets the latest version used for synchronization of workspaces when\ndetecting conflicts and errors.",
+                  "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/versions/{versionsId}:set_latest",
                   "httpMethod": "POST",
                   "id": "tagmanager.accounts.containers.versions.set_latest",
                   "parameterOrder": [
@@ -641,13 +713,14 @@
                   ],
                   "parameters": {
                     "path": {
-                      "description": "GTM ContainerVersion's API relative path. Example: accounts/{account_id}/containers/{container_id}/versions/{version_id}",
+                      "description": "GTM ContainerVersion's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/versions/{version_id}",
                       "location": "path",
+                      "pattern": "^accounts/[^/]+/containers/[^/]+/versions/[^/]+$",
                       "required": true,
                       "type": "string"
                     }
                   },
-                  "path": "{+path}:set_latest",
+                  "path": "tagmanager/v2/{+path}:set_latest",
                   "response": {
                     "$ref": "ContainerVersion"
                   },
@@ -657,6 +730,7 @@
                 },
                 "undelete": {
                   "description": "Undeletes a Container Version.",
+                  "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/versions/{versionsId}:undelete",
                   "httpMethod": "POST",
                   "id": "tagmanager.accounts.containers.versions.undelete",
                   "parameterOrder": [
@@ -664,13 +738,14 @@
                   ],
                   "parameters": {
                     "path": {
-                      "description": "GTM ContainerVersion's API relative path. Example: accounts/{account_id}/containers/{container_id}/versions/{version_id}",
+                      "description": "GTM ContainerVersion's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/versions/{version_id}",
                       "location": "path",
+                      "pattern": "^accounts/[^/]+/containers/[^/]+/versions/[^/]+$",
                       "required": true,
                       "type": "string"
                     }
                   },
-                  "path": "{+path}:undelete",
+                  "path": "tagmanager/v2/{+path}:undelete",
                   "response": {
                     "$ref": "ContainerVersion"
                   },
@@ -680,6 +755,7 @@
                 },
                 "update": {
                   "description": "Updates a Container Version.",
+                  "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/versions/{versionsId}",
                   "httpMethod": "PUT",
                   "id": "tagmanager.accounts.containers.versions.update",
                   "parameterOrder": [
@@ -687,18 +763,19 @@
                   ],
                   "parameters": {
                     "fingerprint": {
-                      "description": "When provided, this fingerprint must match the fingerprint of the container version in storage.",
+                      "description": "When provided, this fingerprint must match the fingerprint of the\ncontainer version in storage.",
                       "location": "query",
                       "type": "string"
                     },
                     "path": {
-                      "description": "GTM ContainerVersion's API relative path. Example: accounts/{account_id}/containers/{container_id}/versions/{version_id}",
+                      "description": "GTM ContainerVersion's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/versions/{version_id}",
                       "location": "path",
+                      "pattern": "^accounts/[^/]+/containers/[^/]+/versions/[^/]+$",
                       "required": true,
                       "type": "string"
                     }
                   },
-                  "path": "{+path}",
+                  "path": "tagmanager/v2/{+path}",
                   "request": {
                     "$ref": "ContainerVersion"
                   },
@@ -715,6 +792,7 @@
               "methods": {
                 "create": {
                   "description": "Creates a Workspace.",
+                  "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces",
                   "httpMethod": "POST",
                   "id": "tagmanager.accounts.containers.workspaces.create",
                   "parameterOrder": [
@@ -722,13 +800,14 @@
                   ],
                   "parameters": {
                     "parent": {
-                      "description": "GTM parent Container's API relative path. Example: accounts/{account_id}/containers/{container_id}",
+                      "description": "GTM parent Container's API relative path.\nExample: accounts/{account_id}/containers/{container_id}",
                       "location": "path",
+                      "pattern": "^accounts/[^/]+/containers/[^/]+$",
                       "required": true,
                       "type": "string"
                     }
                   },
-                  "path": "{+parent}/workspaces",
+                  "path": "tagmanager/v2/{+parent}/workspaces",
                   "request": {
                     "$ref": "Workspace"
                   },
@@ -740,7 +819,8 @@
                   ]
                 },
                 "create_version": {
-                  "description": "Creates a Container Version from the entities present in the workspace, deletes the workspace, and sets the base container version to the newly created version.",
+                  "description": "Creates a Container Version from the entities present in the workspace,\ndeletes the workspace, and sets the base container version to the newly\ncreated version.",
+                  "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}:create_version",
                   "httpMethod": "POST",
                   "id": "tagmanager.accounts.containers.workspaces.create_version",
                   "parameterOrder": [
@@ -748,13 +828,14 @@
                   ],
                   "parameters": {
                     "path": {
-                      "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+                      "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
                       "location": "path",
+                      "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
                       "required": true,
                       "type": "string"
                     }
                   },
-                  "path": "{+path}:create_version",
+                  "path": "tagmanager/v2/{+path}:create_version",
                   "request": {
                     "$ref": "CreateContainerVersionRequestVersionOptions"
                   },
@@ -767,6 +848,7 @@
                 },
                 "delete": {
                   "description": "Deletes a Workspace.",
+                  "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}",
                   "httpMethod": "DELETE",
                   "id": "tagmanager.accounts.containers.workspaces.delete",
                   "parameterOrder": [
@@ -774,19 +856,21 @@
                   ],
                   "parameters": {
                     "path": {
-                      "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+                      "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
                       "location": "path",
+                      "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
                       "required": true,
                       "type": "string"
                     }
                   },
-                  "path": "{+path}",
+                  "path": "tagmanager/v2/{+path}",
                   "scopes": [
                     "https://www.googleapis.com/auth/tagmanager.delete.containers"
                   ]
                 },
                 "get": {
                   "description": "Gets a Workspace.",
+                  "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}",
                   "httpMethod": "GET",
                   "id": "tagmanager.accounts.containers.workspaces.get",
                   "parameterOrder": [
@@ -794,13 +878,14 @@
                   ],
                   "parameters": {
                     "path": {
-                      "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+                      "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
                       "location": "path",
+                      "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
                       "required": true,
                       "type": "string"
                     }
                   },
-                  "path": "{+path}",
+                  "path": "tagmanager/v2/{+path}",
                   "response": {
                     "$ref": "Workspace"
                   },
@@ -811,6 +896,7 @@
                 },
                 "getStatus": {
                   "description": "Finds conflicting and modified entities in the workspace.",
+                  "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/status",
                   "httpMethod": "GET",
                   "id": "tagmanager.accounts.containers.workspaces.getStatus",
                   "parameterOrder": [
@@ -818,13 +904,14 @@
                   ],
                   "parameters": {
                     "path": {
-                      "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+                      "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
                       "location": "path",
+                      "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
                       "required": true,
                       "type": "string"
                     }
                   },
-                  "path": "{+path}/status",
+                  "path": "tagmanager/v2/{+path}/status",
                   "response": {
                     "$ref": "GetWorkspaceStatusResponse"
                   },
@@ -835,6 +922,7 @@
                 },
                 "list": {
                   "description": "Lists all Workspaces that belong to a GTM Container.",
+                  "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces",
                   "httpMethod": "GET",
                   "id": "tagmanager.accounts.containers.workspaces.list",
                   "parameterOrder": [
@@ -847,13 +935,14 @@
                       "type": "string"
                     },
                     "parent": {
-                      "description": "GTM parent Container's API relative path. Example: accounts/{account_id}/containers/{container_id}",
+                      "description": "GTM parent Container's API relative path.\nExample: accounts/{account_id}/containers/{container_id}",
                       "location": "path",
+                      "pattern": "^accounts/[^/]+/containers/[^/]+$",
                       "required": true,
                       "type": "string"
                     }
                   },
-                  "path": "{+parent}/workspaces",
+                  "path": "tagmanager/v2/{+parent}/workspaces",
                   "response": {
                     "$ref": "ListWorkspacesResponse"
                   },
@@ -863,7 +952,8 @@
                   ]
                 },
                 "quick_preview": {
-                  "description": "Quick previews a workspace by creating a fake container version from all entities in the provided workspace.",
+                  "description": "Quick previews a workspace by creating a fake container version from all\nentities in the provided workspace.",
+                  "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}:quick_preview",
                   "httpMethod": "POST",
                   "id": "tagmanager.accounts.containers.workspaces.quick_preview",
                   "parameterOrder": [
@@ -871,13 +961,14 @@
                   ],
                   "parameters": {
                     "path": {
-                      "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+                      "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
                       "location": "path",
+                      "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
                       "required": true,
                       "type": "string"
                     }
                   },
-                  "path": "{+path}:quick_preview",
+                  "path": "tagmanager/v2/{+path}:quick_preview",
                   "response": {
                     "$ref": "QuickPreviewResponse"
                   },
@@ -886,7 +977,8 @@
                   ]
                 },
                 "resolve_conflict": {
-                  "description": "Resolves a merge conflict for a workspace entity by updating it to the resolved entity passed in the request.",
+                  "description": "Resolves a merge conflict for a workspace entity by updating it to the\nresolved entity passed in the request.",
+                  "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}:resolve_conflict",
                   "httpMethod": "POST",
                   "id": "tagmanager.accounts.containers.workspaces.resolve_conflict",
                   "parameterOrder": [
@@ -894,18 +986,19 @@
                   ],
                   "parameters": {
                     "fingerprint": {
-                      "description": "When provided, this fingerprint must match the fingerprint of the entity_in_workspace in the merge conflict.",
+                      "description": "When provided, this fingerprint must match the fingerprint of the\nentity_in_workspace in the merge conflict.",
                       "location": "query",
                       "type": "string"
                     },
                     "path": {
-                      "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+                      "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
                       "location": "path",
+                      "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
                       "required": true,
                       "type": "string"
                     }
                   },
-                  "path": "{+path}:resolve_conflict",
+                  "path": "tagmanager/v2/{+path}:resolve_conflict",
                   "request": {
                     "$ref": "Entity"
                   },
@@ -914,7 +1007,8 @@
                   ]
                 },
                 "sync": {
-                  "description": "Syncs a workspace to the latest container version by updating all unmodified workspace entities and displaying conflicts for modified entities.",
+                  "description": "Syncs a workspace to the latest container version by updating all\nunmodified workspace entities and displaying conflicts for modified\nentities.",
+                  "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}:sync",
                   "httpMethod": "POST",
                   "id": "tagmanager.accounts.containers.workspaces.sync",
                   "parameterOrder": [
@@ -922,13 +1016,14 @@
                   ],
                   "parameters": {
                     "path": {
-                      "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+                      "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
                       "location": "path",
+                      "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
                       "required": true,
                       "type": "string"
                     }
                   },
-                  "path": "{+path}:sync",
+                  "path": "tagmanager/v2/{+path}:sync",
                   "response": {
                     "$ref": "SyncWorkspaceResponse"
                   },
@@ -938,6 +1033,7 @@
                 },
                 "update": {
                   "description": "Updates a Workspace.",
+                  "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}",
                   "httpMethod": "PUT",
                   "id": "tagmanager.accounts.containers.workspaces.update",
                   "parameterOrder": [
@@ -945,18 +1041,19 @@
                   ],
                   "parameters": {
                     "fingerprint": {
-                      "description": "When provided, this fingerprint must match the fingerprint of the workspace in storage.",
+                      "description": "When provided, this fingerprint must match the fingerprint of the\nworkspace in storage.",
                       "location": "query",
                       "type": "string"
                     },
                     "path": {
-                      "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+                      "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
                       "location": "path",
+                      "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
                       "required": true,
                       "type": "string"
                     }
                   },
-                  "path": "{+path}",
+                  "path": "tagmanager/v2/{+path}",
                   "request": {
                     "$ref": "Workspace"
                   },
@@ -973,6 +1070,7 @@
                   "methods": {
                     "create": {
                       "description": "Creates one or more GTM Built-In Variables.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/built_in_variables",
                       "httpMethod": "POST",
                       "id": "tagmanager.accounts.containers.workspaces.built_in_variables.create",
                       "parameterOrder": [
@@ -980,233 +1078,127 @@
                       ],
                       "parameters": {
                         "parent": {
-                          "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+                          "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
                           "required": true,
                           "type": "string"
                         },
                         "type": {
                           "description": "The types of built-in variables to enable.",
                           "enum": [
-                            "advertiserId",
-                            "advertisingTrackingEnabled",
-                            "ampBrowserLanguage",
-                            "ampCanonicalHost",
-                            "ampCanonicalPath",
-                            "ampCanonicalUrl",
-                            "ampClientId",
-                            "ampClientMaxScrollX",
-                            "ampClientMaxScrollY",
-                            "ampClientScreenHeight",
-                            "ampClientScreenWidth",
-                            "ampClientScrollX",
-                            "ampClientScrollY",
-                            "ampClientTimestamp",
-                            "ampClientTimezone",
-                            "ampGtmEvent",
-                            "ampPageDownloadTime",
-                            "ampPageLoadTime",
-                            "ampPageViewId",
-                            "ampReferrer",
-                            "ampTitle",
-                            "ampTotalEngagedTime",
-                            "appId",
-                            "appName",
-                            "appVersionCode",
-                            "appVersionName",
-                            "builtInVariableTypeUnspecified",
-                            "clickClasses",
-                            "clickElement",
-                            "clickId",
-                            "clickTarget",
-                            "clickText",
-                            "clickUrl",
-                            "containerId",
-                            "containerVersion",
-                            "debugMode",
-                            "deviceName",
-                            "elementVisibilityFirstTime",
-                            "elementVisibilityRatio",
-                            "elementVisibilityRecentTime",
-                            "elementVisibilityTime",
-                            "environmentName",
-                            "errorLine",
-                            "errorMessage",
-                            "errorUrl",
-                            "event",
-                            "eventName",
-                            "firebaseEventParameterCampaign",
-                            "firebaseEventParameterCampaignAclid",
-                            "firebaseEventParameterCampaignAnid",
-                            "firebaseEventParameterCampaignClickTimestamp",
-                            "firebaseEventParameterCampaignContent",
-                            "firebaseEventParameterCampaignCp1",
-                            "firebaseEventParameterCampaignGclid",
-                            "firebaseEventParameterCampaignSource",
-                            "firebaseEventParameterCampaignTerm",
-                            "firebaseEventParameterCurrency",
-                            "firebaseEventParameterDynamicLinkAcceptTime",
-                            "firebaseEventParameterDynamicLinkLinkid",
-                            "firebaseEventParameterNotificationMessageDeviceTime",
-                            "firebaseEventParameterNotificationMessageId",
-                            "firebaseEventParameterNotificationMessageName",
-                            "firebaseEventParameterNotificationMessageTime",
-                            "firebaseEventParameterNotificationTopic",
-                            "firebaseEventParameterPreviousAppVersion",
-                            "firebaseEventParameterPreviousOsVersion",
-                            "firebaseEventParameterPrice",
-                            "firebaseEventParameterProductId",
-                            "firebaseEventParameterQuantity",
-                            "firebaseEventParameterValue",
-                            "formClasses",
-                            "formElement",
-                            "formId",
-                            "formTarget",
-                            "formText",
-                            "formUrl",
-                            "historySource",
-                            "htmlId",
-                            "language",
-                            "newHistoryFragment",
-                            "newHistoryState",
-                            "newHistoryUrl",
-                            "oldHistoryFragment",
-                            "oldHistoryState",
-                            "oldHistoryUrl",
-                            "osVersion",
-                            "pageHostname",
-                            "pagePath",
-                            "pageUrl",
-                            "platform",
-                            "randomNumber",
-                            "referrer",
-                            "resolution",
-                            "scrollDepthDirection",
-                            "scrollDepthThreshold",
-                            "scrollDepthUnits",
-                            "sdkVersion",
-                            "videoCurrentTime",
-                            "videoDuration",
-                            "videoPercent",
-                            "videoProvider",
-                            "videoStatus",
-                            "videoTitle",
-                            "videoUrl",
-                            "videoVisible"
-                          ],
-                          "enumDescriptions": [
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            ""
+                            "BUILT_IN_VARIABLE_TYPE_UNSPECIFIED",
+                            "PAGE_URL",
+                            "PAGE_HOSTNAME",
+                            "PAGE_PATH",
+                            "REFERRER",
+                            "EVENT",
+                            "CLICK_ELEMENT",
+                            "CLICK_CLASSES",
+                            "CLICK_ID",
+                            "CLICK_TARGET",
+                            "CLICK_URL",
+                            "CLICK_TEXT",
+                            "FORM_ELEMENT",
+                            "FORM_CLASSES",
+                            "FORM_ID",
+                            "FORM_TARGET",
+                            "FORM_URL",
+                            "FORM_TEXT",
+                            "ERROR_MESSAGE",
+                            "ERROR_URL",
+                            "ERROR_LINE",
+                            "NEW_HISTORY_URL",
+                            "OLD_HISTORY_URL",
+                            "NEW_HISTORY_FRAGMENT",
+                            "OLD_HISTORY_FRAGMENT",
+                            "NEW_HISTORY_STATE",
+                            "OLD_HISTORY_STATE",
+                            "HISTORY_SOURCE",
+                            "CONTAINER_VERSION",
+                            "DEBUG_MODE",
+                            "RANDOM_NUMBER",
+                            "CONTAINER_ID",
+                            "APP_ID",
+                            "APP_NAME",
+                            "APP_VERSION_CODE",
+                            "APP_VERSION_NAME",
+                            "LANGUAGE",
+                            "OS_VERSION",
+                            "PLATFORM",
+                            "SDK_VERSION",
+                            "DEVICE_NAME",
+                            "RESOLUTION",
+                            "ADVERTISER_ID",
+                            "ADVERTISING_TRACKING_ENABLED",
+                            "HTML_ID",
+                            "ENVIRONMENT_NAME",
+                            "AMP_BROWSER_LANGUAGE",
+                            "AMP_CANONICAL_PATH",
+                            "AMP_CANONICAL_URL",
+                            "AMP_CANONICAL_HOST",
+                            "AMP_REFERRER",
+                            "AMP_TITLE",
+                            "AMP_CLIENT_ID",
+                            "AMP_CLIENT_TIMEZONE",
+                            "AMP_CLIENT_TIMESTAMP",
+                            "AMP_CLIENT_SCREEN_WIDTH",
+                            "AMP_CLIENT_SCREEN_HEIGHT",
+                            "AMP_CLIENT_SCROLL_X",
+                            "AMP_CLIENT_SCROLL_Y",
+                            "AMP_CLIENT_MAX_SCROLL_X",
+                            "AMP_CLIENT_MAX_SCROLL_Y",
+                            "AMP_TOTAL_ENGAGED_TIME",
+                            "AMP_PAGE_VIEW_ID",
+                            "AMP_PAGE_LOAD_TIME",
+                            "AMP_PAGE_DOWNLOAD_TIME",
+                            "AMP_GTM_EVENT",
+                            "EVENT_NAME",
+                            "FIREBASE_EVENT_PARAMETER_CAMPAIGN",
+                            "FIREBASE_EVENT_PARAMETER_CAMPAIGN_ACLID",
+                            "FIREBASE_EVENT_PARAMETER_CAMPAIGN_ANID",
+                            "FIREBASE_EVENT_PARAMETER_CAMPAIGN_CLICK_TIMESTAMP",
+                            "FIREBASE_EVENT_PARAMETER_CAMPAIGN_CONTENT",
+                            "FIREBASE_EVENT_PARAMETER_CAMPAIGN_CP1",
+                            "FIREBASE_EVENT_PARAMETER_CAMPAIGN_GCLID",
+                            "FIREBASE_EVENT_PARAMETER_CAMPAIGN_SOURCE",
+                            "FIREBASE_EVENT_PARAMETER_CAMPAIGN_TERM",
+                            "FIREBASE_EVENT_PARAMETER_CURRENCY",
+                            "FIREBASE_EVENT_PARAMETER_DYNAMIC_LINK_ACCEPT_TIME",
+                            "FIREBASE_EVENT_PARAMETER_DYNAMIC_LINK_LINKID",
+                            "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_DEVICE_TIME",
+                            "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_ID",
+                            "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_NAME",
+                            "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_TIME",
+                            "FIREBASE_EVENT_PARAMETER_NOTIFICATION_TOPIC",
+                            "FIREBASE_EVENT_PARAMETER_PREVIOUS_APP_VERSION",
+                            "FIREBASE_EVENT_PARAMETER_PREVIOUS_OS_VERSION",
+                            "FIREBASE_EVENT_PARAMETER_PRICE",
+                            "FIREBASE_EVENT_PARAMETER_PRODUCT_ID",
+                            "FIREBASE_EVENT_PARAMETER_QUANTITY",
+                            "FIREBASE_EVENT_PARAMETER_VALUE",
+                            "VIDEO_PROVIDER",
+                            "VIDEO_URL",
+                            "VIDEO_TITLE",
+                            "VIDEO_DURATION",
+                            "VIDEO_PERCENT",
+                            "VIDEO_VISIBLE",
+                            "VIDEO_STATUS",
+                            "VIDEO_CURRENT_TIME",
+                            "SCROLL_DEPTH_THRESHOLD",
+                            "SCROLL_DEPTH_UNITS",
+                            "SCROLL_DEPTH_DIRECTION",
+                            "ELEMENT_VISIBILITY_RATIO",
+                            "ELEMENT_VISIBILITY_TIME",
+                            "ELEMENT_VISIBILITY_FIRST_TIME",
+                            "ELEMENT_VISIBILITY_RECENT_TIME"
                           ],
                           "location": "query",
                           "repeated": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+parent}/built_in_variables",
+                      "path": "tagmanager/v2/{+parent}/built_in_variables",
                       "response": {
                         "$ref": "CreateBuiltInVariableResponse"
                       },
@@ -1216,6 +1208,7 @@
                     },
                     "delete": {
                       "description": "Deletes one or more GTM Built-In Variables.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/built_in_variables",
                       "httpMethod": "DELETE",
                       "id": "tagmanager.accounts.containers.workspaces.built_in_variables.delete",
                       "parameterOrder": [
@@ -1223,239 +1216,134 @@
                       ],
                       "parameters": {
                         "path": {
-                          "description": "GTM BuiltInVariable's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/built_in_variables",
+                          "description": "GTM BuiltInVariable's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/built_in_variables",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/built_in_variables$",
                           "required": true,
                           "type": "string"
                         },
                         "type": {
                           "description": "The types of built-in variables to delete.",
                           "enum": [
-                            "advertiserId",
-                            "advertisingTrackingEnabled",
-                            "ampBrowserLanguage",
-                            "ampCanonicalHost",
-                            "ampCanonicalPath",
-                            "ampCanonicalUrl",
-                            "ampClientId",
-                            "ampClientMaxScrollX",
-                            "ampClientMaxScrollY",
-                            "ampClientScreenHeight",
-                            "ampClientScreenWidth",
-                            "ampClientScrollX",
-                            "ampClientScrollY",
-                            "ampClientTimestamp",
-                            "ampClientTimezone",
-                            "ampGtmEvent",
-                            "ampPageDownloadTime",
-                            "ampPageLoadTime",
-                            "ampPageViewId",
-                            "ampReferrer",
-                            "ampTitle",
-                            "ampTotalEngagedTime",
-                            "appId",
-                            "appName",
-                            "appVersionCode",
-                            "appVersionName",
-                            "builtInVariableTypeUnspecified",
-                            "clickClasses",
-                            "clickElement",
-                            "clickId",
-                            "clickTarget",
-                            "clickText",
-                            "clickUrl",
-                            "containerId",
-                            "containerVersion",
-                            "debugMode",
-                            "deviceName",
-                            "elementVisibilityFirstTime",
-                            "elementVisibilityRatio",
-                            "elementVisibilityRecentTime",
-                            "elementVisibilityTime",
-                            "environmentName",
-                            "errorLine",
-                            "errorMessage",
-                            "errorUrl",
-                            "event",
-                            "eventName",
-                            "firebaseEventParameterCampaign",
-                            "firebaseEventParameterCampaignAclid",
-                            "firebaseEventParameterCampaignAnid",
-                            "firebaseEventParameterCampaignClickTimestamp",
-                            "firebaseEventParameterCampaignContent",
-                            "firebaseEventParameterCampaignCp1",
-                            "firebaseEventParameterCampaignGclid",
-                            "firebaseEventParameterCampaignSource",
-                            "firebaseEventParameterCampaignTerm",
-                            "firebaseEventParameterCurrency",
-                            "firebaseEventParameterDynamicLinkAcceptTime",
-                            "firebaseEventParameterDynamicLinkLinkid",
-                            "firebaseEventParameterNotificationMessageDeviceTime",
-                            "firebaseEventParameterNotificationMessageId",
-                            "firebaseEventParameterNotificationMessageName",
-                            "firebaseEventParameterNotificationMessageTime",
-                            "firebaseEventParameterNotificationTopic",
-                            "firebaseEventParameterPreviousAppVersion",
-                            "firebaseEventParameterPreviousOsVersion",
-                            "firebaseEventParameterPrice",
-                            "firebaseEventParameterProductId",
-                            "firebaseEventParameterQuantity",
-                            "firebaseEventParameterValue",
-                            "formClasses",
-                            "formElement",
-                            "formId",
-                            "formTarget",
-                            "formText",
-                            "formUrl",
-                            "historySource",
-                            "htmlId",
-                            "language",
-                            "newHistoryFragment",
-                            "newHistoryState",
-                            "newHistoryUrl",
-                            "oldHistoryFragment",
-                            "oldHistoryState",
-                            "oldHistoryUrl",
-                            "osVersion",
-                            "pageHostname",
-                            "pagePath",
-                            "pageUrl",
-                            "platform",
-                            "randomNumber",
-                            "referrer",
-                            "resolution",
-                            "scrollDepthDirection",
-                            "scrollDepthThreshold",
-                            "scrollDepthUnits",
-                            "sdkVersion",
-                            "videoCurrentTime",
-                            "videoDuration",
-                            "videoPercent",
-                            "videoProvider",
-                            "videoStatus",
-                            "videoTitle",
-                            "videoUrl",
-                            "videoVisible"
-                          ],
-                          "enumDescriptions": [
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            ""
+                            "BUILT_IN_VARIABLE_TYPE_UNSPECIFIED",
+                            "PAGE_URL",
+                            "PAGE_HOSTNAME",
+                            "PAGE_PATH",
+                            "REFERRER",
+                            "EVENT",
+                            "CLICK_ELEMENT",
+                            "CLICK_CLASSES",
+                            "CLICK_ID",
+                            "CLICK_TARGET",
+                            "CLICK_URL",
+                            "CLICK_TEXT",
+                            "FORM_ELEMENT",
+                            "FORM_CLASSES",
+                            "FORM_ID",
+                            "FORM_TARGET",
+                            "FORM_URL",
+                            "FORM_TEXT",
+                            "ERROR_MESSAGE",
+                            "ERROR_URL",
+                            "ERROR_LINE",
+                            "NEW_HISTORY_URL",
+                            "OLD_HISTORY_URL",
+                            "NEW_HISTORY_FRAGMENT",
+                            "OLD_HISTORY_FRAGMENT",
+                            "NEW_HISTORY_STATE",
+                            "OLD_HISTORY_STATE",
+                            "HISTORY_SOURCE",
+                            "CONTAINER_VERSION",
+                            "DEBUG_MODE",
+                            "RANDOM_NUMBER",
+                            "CONTAINER_ID",
+                            "APP_ID",
+                            "APP_NAME",
+                            "APP_VERSION_CODE",
+                            "APP_VERSION_NAME",
+                            "LANGUAGE",
+                            "OS_VERSION",
+                            "PLATFORM",
+                            "SDK_VERSION",
+                            "DEVICE_NAME",
+                            "RESOLUTION",
+                            "ADVERTISER_ID",
+                            "ADVERTISING_TRACKING_ENABLED",
+                            "HTML_ID",
+                            "ENVIRONMENT_NAME",
+                            "AMP_BROWSER_LANGUAGE",
+                            "AMP_CANONICAL_PATH",
+                            "AMP_CANONICAL_URL",
+                            "AMP_CANONICAL_HOST",
+                            "AMP_REFERRER",
+                            "AMP_TITLE",
+                            "AMP_CLIENT_ID",
+                            "AMP_CLIENT_TIMEZONE",
+                            "AMP_CLIENT_TIMESTAMP",
+                            "AMP_CLIENT_SCREEN_WIDTH",
+                            "AMP_CLIENT_SCREEN_HEIGHT",
+                            "AMP_CLIENT_SCROLL_X",
+                            "AMP_CLIENT_SCROLL_Y",
+                            "AMP_CLIENT_MAX_SCROLL_X",
+                            "AMP_CLIENT_MAX_SCROLL_Y",
+                            "AMP_TOTAL_ENGAGED_TIME",
+                            "AMP_PAGE_VIEW_ID",
+                            "AMP_PAGE_LOAD_TIME",
+                            "AMP_PAGE_DOWNLOAD_TIME",
+                            "AMP_GTM_EVENT",
+                            "EVENT_NAME",
+                            "FIREBASE_EVENT_PARAMETER_CAMPAIGN",
+                            "FIREBASE_EVENT_PARAMETER_CAMPAIGN_ACLID",
+                            "FIREBASE_EVENT_PARAMETER_CAMPAIGN_ANID",
+                            "FIREBASE_EVENT_PARAMETER_CAMPAIGN_CLICK_TIMESTAMP",
+                            "FIREBASE_EVENT_PARAMETER_CAMPAIGN_CONTENT",
+                            "FIREBASE_EVENT_PARAMETER_CAMPAIGN_CP1",
+                            "FIREBASE_EVENT_PARAMETER_CAMPAIGN_GCLID",
+                            "FIREBASE_EVENT_PARAMETER_CAMPAIGN_SOURCE",
+                            "FIREBASE_EVENT_PARAMETER_CAMPAIGN_TERM",
+                            "FIREBASE_EVENT_PARAMETER_CURRENCY",
+                            "FIREBASE_EVENT_PARAMETER_DYNAMIC_LINK_ACCEPT_TIME",
+                            "FIREBASE_EVENT_PARAMETER_DYNAMIC_LINK_LINKID",
+                            "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_DEVICE_TIME",
+                            "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_ID",
+                            "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_NAME",
+                            "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_TIME",
+                            "FIREBASE_EVENT_PARAMETER_NOTIFICATION_TOPIC",
+                            "FIREBASE_EVENT_PARAMETER_PREVIOUS_APP_VERSION",
+                            "FIREBASE_EVENT_PARAMETER_PREVIOUS_OS_VERSION",
+                            "FIREBASE_EVENT_PARAMETER_PRICE",
+                            "FIREBASE_EVENT_PARAMETER_PRODUCT_ID",
+                            "FIREBASE_EVENT_PARAMETER_QUANTITY",
+                            "FIREBASE_EVENT_PARAMETER_VALUE",
+                            "VIDEO_PROVIDER",
+                            "VIDEO_URL",
+                            "VIDEO_TITLE",
+                            "VIDEO_DURATION",
+                            "VIDEO_PERCENT",
+                            "VIDEO_VISIBLE",
+                            "VIDEO_STATUS",
+                            "VIDEO_CURRENT_TIME",
+                            "SCROLL_DEPTH_THRESHOLD",
+                            "SCROLL_DEPTH_UNITS",
+                            "SCROLL_DEPTH_DIRECTION",
+                            "ELEMENT_VISIBILITY_RATIO",
+                            "ELEMENT_VISIBILITY_TIME",
+                            "ELEMENT_VISIBILITY_FIRST_TIME",
+                            "ELEMENT_VISIBILITY_RECENT_TIME"
                           ],
                           "location": "query",
                           "repeated": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+path}",
+                      "path": "tagmanager/v2/{+path}",
                       "scopes": [
                         "https://www.googleapis.com/auth/tagmanager.edit.containers"
                       ]
                     },
                     "list": {
                       "description": "Lists all the enabled Built-In Variables of a GTM Container.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/built_in_variables",
                       "httpMethod": "GET",
                       "id": "tagmanager.accounts.containers.workspaces.built_in_variables.list",
                       "parameterOrder": [
@@ -1468,13 +1356,14 @@
                           "type": "string"
                         },
                         "parent": {
-                          "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+                          "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+parent}/built_in_variables",
+                      "path": "tagmanager/v2/{+parent}/built_in_variables",
                       "response": {
                         "$ref": "ListEnabledBuiltInVariablesResponse"
                       },
@@ -1485,6 +1374,7 @@
                     },
                     "revert": {
                       "description": "Reverts changes to a GTM Built-In Variables in a GTM Workspace.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/built_in_variables:revert",
                       "httpMethod": "POST",
                       "id": "tagmanager.accounts.containers.workspaces.built_in_variables.revert",
                       "parameterOrder": [
@@ -1492,232 +1382,126 @@
                       ],
                       "parameters": {
                         "path": {
-                          "description": "GTM BuiltInVariable's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/built_in_variables",
+                          "description": "GTM BuiltInVariable's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/built_in_variables",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
                           "required": true,
                           "type": "string"
                         },
                         "type": {
                           "description": "The type of built-in variable to revert.",
                           "enum": [
-                            "advertiserId",
-                            "advertisingTrackingEnabled",
-                            "ampBrowserLanguage",
-                            "ampCanonicalHost",
-                            "ampCanonicalPath",
-                            "ampCanonicalUrl",
-                            "ampClientId",
-                            "ampClientMaxScrollX",
-                            "ampClientMaxScrollY",
-                            "ampClientScreenHeight",
-                            "ampClientScreenWidth",
-                            "ampClientScrollX",
-                            "ampClientScrollY",
-                            "ampClientTimestamp",
-                            "ampClientTimezone",
-                            "ampGtmEvent",
-                            "ampPageDownloadTime",
-                            "ampPageLoadTime",
-                            "ampPageViewId",
-                            "ampReferrer",
-                            "ampTitle",
-                            "ampTotalEngagedTime",
-                            "appId",
-                            "appName",
-                            "appVersionCode",
-                            "appVersionName",
-                            "builtInVariableTypeUnspecified",
-                            "clickClasses",
-                            "clickElement",
-                            "clickId",
-                            "clickTarget",
-                            "clickText",
-                            "clickUrl",
-                            "containerId",
-                            "containerVersion",
-                            "debugMode",
-                            "deviceName",
-                            "elementVisibilityFirstTime",
-                            "elementVisibilityRatio",
-                            "elementVisibilityRecentTime",
-                            "elementVisibilityTime",
-                            "environmentName",
-                            "errorLine",
-                            "errorMessage",
-                            "errorUrl",
-                            "event",
-                            "eventName",
-                            "firebaseEventParameterCampaign",
-                            "firebaseEventParameterCampaignAclid",
-                            "firebaseEventParameterCampaignAnid",
-                            "firebaseEventParameterCampaignClickTimestamp",
-                            "firebaseEventParameterCampaignContent",
-                            "firebaseEventParameterCampaignCp1",
-                            "firebaseEventParameterCampaignGclid",
-                            "firebaseEventParameterCampaignSource",
-                            "firebaseEventParameterCampaignTerm",
-                            "firebaseEventParameterCurrency",
-                            "firebaseEventParameterDynamicLinkAcceptTime",
-                            "firebaseEventParameterDynamicLinkLinkid",
-                            "firebaseEventParameterNotificationMessageDeviceTime",
-                            "firebaseEventParameterNotificationMessageId",
-                            "firebaseEventParameterNotificationMessageName",
-                            "firebaseEventParameterNotificationMessageTime",
-                            "firebaseEventParameterNotificationTopic",
-                            "firebaseEventParameterPreviousAppVersion",
-                            "firebaseEventParameterPreviousOsVersion",
-                            "firebaseEventParameterPrice",
-                            "firebaseEventParameterProductId",
-                            "firebaseEventParameterQuantity",
-                            "firebaseEventParameterValue",
-                            "formClasses",
-                            "formElement",
-                            "formId",
-                            "formTarget",
-                            "formText",
-                            "formUrl",
-                            "historySource",
-                            "htmlId",
-                            "language",
-                            "newHistoryFragment",
-                            "newHistoryState",
-                            "newHistoryUrl",
-                            "oldHistoryFragment",
-                            "oldHistoryState",
-                            "oldHistoryUrl",
-                            "osVersion",
-                            "pageHostname",
-                            "pagePath",
-                            "pageUrl",
-                            "platform",
-                            "randomNumber",
-                            "referrer",
-                            "resolution",
-                            "scrollDepthDirection",
-                            "scrollDepthThreshold",
-                            "scrollDepthUnits",
-                            "sdkVersion",
-                            "videoCurrentTime",
-                            "videoDuration",
-                            "videoPercent",
-                            "videoProvider",
-                            "videoStatus",
-                            "videoTitle",
-                            "videoUrl",
-                            "videoVisible"
-                          ],
-                          "enumDescriptions": [
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            "",
-                            ""
+                            "BUILT_IN_VARIABLE_TYPE_UNSPECIFIED",
+                            "PAGE_URL",
+                            "PAGE_HOSTNAME",
+                            "PAGE_PATH",
+                            "REFERRER",
+                            "EVENT",
+                            "CLICK_ELEMENT",
+                            "CLICK_CLASSES",
+                            "CLICK_ID",
+                            "CLICK_TARGET",
+                            "CLICK_URL",
+                            "CLICK_TEXT",
+                            "FORM_ELEMENT",
+                            "FORM_CLASSES",
+                            "FORM_ID",
+                            "FORM_TARGET",
+                            "FORM_URL",
+                            "FORM_TEXT",
+                            "ERROR_MESSAGE",
+                            "ERROR_URL",
+                            "ERROR_LINE",
+                            "NEW_HISTORY_URL",
+                            "OLD_HISTORY_URL",
+                            "NEW_HISTORY_FRAGMENT",
+                            "OLD_HISTORY_FRAGMENT",
+                            "NEW_HISTORY_STATE",
+                            "OLD_HISTORY_STATE",
+                            "HISTORY_SOURCE",
+                            "CONTAINER_VERSION",
+                            "DEBUG_MODE",
+                            "RANDOM_NUMBER",
+                            "CONTAINER_ID",
+                            "APP_ID",
+                            "APP_NAME",
+                            "APP_VERSION_CODE",
+                            "APP_VERSION_NAME",
+                            "LANGUAGE",
+                            "OS_VERSION",
+                            "PLATFORM",
+                            "SDK_VERSION",
+                            "DEVICE_NAME",
+                            "RESOLUTION",
+                            "ADVERTISER_ID",
+                            "ADVERTISING_TRACKING_ENABLED",
+                            "HTML_ID",
+                            "ENVIRONMENT_NAME",
+                            "AMP_BROWSER_LANGUAGE",
+                            "AMP_CANONICAL_PATH",
+                            "AMP_CANONICAL_URL",
+                            "AMP_CANONICAL_HOST",
+                            "AMP_REFERRER",
+                            "AMP_TITLE",
+                            "AMP_CLIENT_ID",
+                            "AMP_CLIENT_TIMEZONE",
+                            "AMP_CLIENT_TIMESTAMP",
+                            "AMP_CLIENT_SCREEN_WIDTH",
+                            "AMP_CLIENT_SCREEN_HEIGHT",
+                            "AMP_CLIENT_SCROLL_X",
+                            "AMP_CLIENT_SCROLL_Y",
+                            "AMP_CLIENT_MAX_SCROLL_X",
+                            "AMP_CLIENT_MAX_SCROLL_Y",
+                            "AMP_TOTAL_ENGAGED_TIME",
+                            "AMP_PAGE_VIEW_ID",
+                            "AMP_PAGE_LOAD_TIME",
+                            "AMP_PAGE_DOWNLOAD_TIME",
+                            "AMP_GTM_EVENT",
+                            "EVENT_NAME",
+                            "FIREBASE_EVENT_PARAMETER_CAMPAIGN",
+                            "FIREBASE_EVENT_PARAMETER_CAMPAIGN_ACLID",
+                            "FIREBASE_EVENT_PARAMETER_CAMPAIGN_ANID",
+                            "FIREBASE_EVENT_PARAMETER_CAMPAIGN_CLICK_TIMESTAMP",
+                            "FIREBASE_EVENT_PARAMETER_CAMPAIGN_CONTENT",
+                            "FIREBASE_EVENT_PARAMETER_CAMPAIGN_CP1",
+                            "FIREBASE_EVENT_PARAMETER_CAMPAIGN_GCLID",
+                            "FIREBASE_EVENT_PARAMETER_CAMPAIGN_SOURCE",
+                            "FIREBASE_EVENT_PARAMETER_CAMPAIGN_TERM",
+                            "FIREBASE_EVENT_PARAMETER_CURRENCY",
+                            "FIREBASE_EVENT_PARAMETER_DYNAMIC_LINK_ACCEPT_TIME",
+                            "FIREBASE_EVENT_PARAMETER_DYNAMIC_LINK_LINKID",
+                            "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_DEVICE_TIME",
+                            "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_ID",
+                            "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_NAME",
+                            "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_TIME",
+                            "FIREBASE_EVENT_PARAMETER_NOTIFICATION_TOPIC",
+                            "FIREBASE_EVENT_PARAMETER_PREVIOUS_APP_VERSION",
+                            "FIREBASE_EVENT_PARAMETER_PREVIOUS_OS_VERSION",
+                            "FIREBASE_EVENT_PARAMETER_PRICE",
+                            "FIREBASE_EVENT_PARAMETER_PRODUCT_ID",
+                            "FIREBASE_EVENT_PARAMETER_QUANTITY",
+                            "FIREBASE_EVENT_PARAMETER_VALUE",
+                            "VIDEO_PROVIDER",
+                            "VIDEO_URL",
+                            "VIDEO_TITLE",
+                            "VIDEO_DURATION",
+                            "VIDEO_PERCENT",
+                            "VIDEO_VISIBLE",
+                            "VIDEO_STATUS",
+                            "VIDEO_CURRENT_TIME",
+                            "SCROLL_DEPTH_THRESHOLD",
+                            "SCROLL_DEPTH_UNITS",
+                            "SCROLL_DEPTH_DIRECTION",
+                            "ELEMENT_VISIBILITY_RATIO",
+                            "ELEMENT_VISIBILITY_TIME",
+                            "ELEMENT_VISIBILITY_FIRST_TIME",
+                            "ELEMENT_VISIBILITY_RECENT_TIME"
                           ],
                           "location": "query",
                           "type": "string"
                         }
                       },
-                      "path": "{+path}/built_in_variables:revert",
+                      "path": "tagmanager/v2/{+path}/built_in_variables:revert",
                       "response": {
                         "$ref": "RevertBuiltInVariableResponse"
                       },
@@ -1731,6 +1515,7 @@
                   "methods": {
                     "create": {
                       "description": "Creates a GTM Folder.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/folders",
                       "httpMethod": "POST",
                       "id": "tagmanager.accounts.containers.workspaces.folders.create",
                       "parameterOrder": [
@@ -1738,13 +1523,14 @@
                       ],
                       "parameters": {
                         "parent": {
-                          "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+                          "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+parent}/folders",
+                      "path": "tagmanager/v2/{+parent}/folders",
                       "request": {
                         "$ref": "Folder"
                       },
@@ -1757,6 +1543,7 @@
                     },
                     "delete": {
                       "description": "Deletes a GTM Folder.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/folders/{foldersId}",
                       "httpMethod": "DELETE",
                       "id": "tagmanager.accounts.containers.workspaces.folders.delete",
                       "parameterOrder": [
@@ -1764,19 +1551,21 @@
                       ],
                       "parameters": {
                         "path": {
-                          "description": "GTM Folder's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/folders/{folder_id}",
+                          "description": "GTM Folder's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/folders/{folder_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/folders/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+path}",
+                      "path": "tagmanager/v2/{+path}",
                       "scopes": [
                         "https://www.googleapis.com/auth/tagmanager.edit.containers"
                       ]
                     },
                     "entities": {
                       "description": "List all entities in a GTM Folder.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/folders/{foldersId}:entities",
                       "httpMethod": "POST",
                       "id": "tagmanager.accounts.containers.workspaces.folders.entities",
                       "parameterOrder": [
@@ -1789,13 +1578,14 @@
                           "type": "string"
                         },
                         "path": {
-                          "description": "GTM Folder's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/folders/{folder_id}",
+                          "description": "GTM Folder's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/folders/{folder_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/folders/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+path}:entities",
+                      "path": "tagmanager/v2/{+path}:entities",
                       "response": {
                         "$ref": "FolderEntities"
                       },
@@ -1806,6 +1596,7 @@
                     },
                     "get": {
                       "description": "Gets a GTM Folder.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/folders/{foldersId}",
                       "httpMethod": "GET",
                       "id": "tagmanager.accounts.containers.workspaces.folders.get",
                       "parameterOrder": [
@@ -1813,13 +1604,14 @@
                       ],
                       "parameters": {
                         "path": {
-                          "description": "GTM Folder's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/folders/{folder_id}",
+                          "description": "GTM Folder's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/folders/{folder_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/folders/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+path}",
+                      "path": "tagmanager/v2/{+path}",
                       "response": {
                         "$ref": "Folder"
                       },
@@ -1830,6 +1622,7 @@
                     },
                     "list": {
                       "description": "Lists all GTM Folders of a Container.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/folders",
                       "httpMethod": "GET",
                       "id": "tagmanager.accounts.containers.workspaces.folders.list",
                       "parameterOrder": [
@@ -1842,13 +1635,14 @@
                           "type": "string"
                         },
                         "parent": {
-                          "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+                          "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+parent}/folders",
+                      "path": "tagmanager/v2/{+parent}/folders",
                       "response": {
                         "$ref": "ListFoldersResponse"
                       },
@@ -1859,6 +1653,7 @@
                     },
                     "move_entities_to_folder": {
                       "description": "Moves entities to a GTM Folder.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/folders/{foldersId}:move_entities_to_folder",
                       "httpMethod": "POST",
                       "id": "tagmanager.accounts.containers.workspaces.folders.move_entities_to_folder",
                       "parameterOrder": [
@@ -1866,8 +1661,9 @@
                       ],
                       "parameters": {
                         "path": {
-                          "description": "GTM Folder's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/folders/{folder_id}",
+                          "description": "GTM Folder's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/folders/{folder_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/folders/[^/]+$",
                           "required": true,
                           "type": "string"
                         },
@@ -1890,7 +1686,7 @@
                           "type": "string"
                         }
                       },
-                      "path": "{+path}:move_entities_to_folder",
+                      "path": "tagmanager/v2/{+path}:move_entities_to_folder",
                       "request": {
                         "$ref": "Folder"
                       },
@@ -1900,6 +1696,7 @@
                     },
                     "revert": {
                       "description": "Reverts changes to a GTM Folder in a GTM Workspace.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/folders/{foldersId}:revert",
                       "httpMethod": "POST",
                       "id": "tagmanager.accounts.containers.workspaces.folders.revert",
                       "parameterOrder": [
@@ -1907,18 +1704,19 @@
                       ],
                       "parameters": {
                         "fingerprint": {
-                          "description": "When provided, this fingerprint must match the fingerprint of the tag in storage.",
+                          "description": "When provided, this fingerprint must match the fingerprint of the tag\nin storage.",
                           "location": "query",
                           "type": "string"
                         },
                         "path": {
-                          "description": "GTM Folder's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/folders/{folder_id}",
+                          "description": "GTM Folder's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/folders/{folder_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/folders/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+path}:revert",
+                      "path": "tagmanager/v2/{+path}:revert",
                       "response": {
                         "$ref": "RevertFolderResponse"
                       },
@@ -1928,6 +1726,7 @@
                     },
                     "update": {
                       "description": "Updates a GTM Folder.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/folders/{foldersId}",
                       "httpMethod": "PUT",
                       "id": "tagmanager.accounts.containers.workspaces.folders.update",
                       "parameterOrder": [
@@ -1935,18 +1734,19 @@
                       ],
                       "parameters": {
                         "fingerprint": {
-                          "description": "When provided, this fingerprint must match the fingerprint of the folder in storage.",
+                          "description": "When provided, this fingerprint must match the fingerprint of the folder in\nstorage.",
                           "location": "query",
                           "type": "string"
                         },
                         "path": {
-                          "description": "GTM Folder's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/folders/{folder_id}",
+                          "description": "GTM Folder's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/folders/{folder_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/folders/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+path}",
+                      "path": "tagmanager/v2/{+path}",
                       "request": {
                         "$ref": "Folder"
                       },
@@ -1963,6 +1763,7 @@
                   "methods": {
                     "create": {
                       "description": "Creates a GTM Tag.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/tags",
                       "httpMethod": "POST",
                       "id": "tagmanager.accounts.containers.workspaces.tags.create",
                       "parameterOrder": [
@@ -1970,13 +1771,14 @@
                       ],
                       "parameters": {
                         "parent": {
-                          "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+                          "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+parent}/tags",
+                      "path": "tagmanager/v2/{+parent}/tags",
                       "request": {
                         "$ref": "Tag"
                       },
@@ -1989,6 +1791,7 @@
                     },
                     "delete": {
                       "description": "Deletes a GTM Tag.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/tags/{tagsId}",
                       "httpMethod": "DELETE",
                       "id": "tagmanager.accounts.containers.workspaces.tags.delete",
                       "parameterOrder": [
@@ -1996,19 +1799,21 @@
                       ],
                       "parameters": {
                         "path": {
-                          "description": "GTM Tag's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/tags/{tag_id}",
+                          "description": "GTM Tag's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/tags/{tag_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/tags/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+path}",
+                      "path": "tagmanager/v2/{+path}",
                       "scopes": [
                         "https://www.googleapis.com/auth/tagmanager.edit.containers"
                       ]
                     },
                     "get": {
                       "description": "Gets a GTM Tag.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/tags/{tagsId}",
                       "httpMethod": "GET",
                       "id": "tagmanager.accounts.containers.workspaces.tags.get",
                       "parameterOrder": [
@@ -2016,13 +1821,14 @@
                       ],
                       "parameters": {
                         "path": {
-                          "description": "GTM Tag's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/tags/{tag_id}",
+                          "description": "GTM Tag's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/tags/{tag_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/tags/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+path}",
+                      "path": "tagmanager/v2/{+path}",
                       "response": {
                         "$ref": "Tag"
                       },
@@ -2033,6 +1839,7 @@
                     },
                     "list": {
                       "description": "Lists all GTM Tags of a Container.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/tags",
                       "httpMethod": "GET",
                       "id": "tagmanager.accounts.containers.workspaces.tags.list",
                       "parameterOrder": [
@@ -2045,13 +1852,14 @@
                           "type": "string"
                         },
                         "parent": {
-                          "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+                          "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+parent}/tags",
+                      "path": "tagmanager/v2/{+parent}/tags",
                       "response": {
                         "$ref": "ListTagsResponse"
                       },
@@ -2062,6 +1870,7 @@
                     },
                     "revert": {
                       "description": "Reverts changes to a GTM Tag in a GTM Workspace.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/tags/{tagsId}:revert",
                       "httpMethod": "POST",
                       "id": "tagmanager.accounts.containers.workspaces.tags.revert",
                       "parameterOrder": [
@@ -2069,18 +1878,19 @@
                       ],
                       "parameters": {
                         "fingerprint": {
-                          "description": "When provided, this fingerprint must match the fingerprint of thetag in storage.",
+                          "description": "When provided, this fingerprint must match the fingerprint of thetag\nin storage.",
                           "location": "query",
                           "type": "string"
                         },
                         "path": {
-                          "description": "GTM Tag's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/tags/{tag_id}",
+                          "description": "GTM Tag's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/tags/{tag_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/tags/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+path}:revert",
+                      "path": "tagmanager/v2/{+path}:revert",
                       "response": {
                         "$ref": "RevertTagResponse"
                       },
@@ -2090,6 +1900,7 @@
                     },
                     "update": {
                       "description": "Updates a GTM Tag.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/tags/{tagsId}",
                       "httpMethod": "PUT",
                       "id": "tagmanager.accounts.containers.workspaces.tags.update",
                       "parameterOrder": [
@@ -2097,18 +1908,19 @@
                       ],
                       "parameters": {
                         "fingerprint": {
-                          "description": "When provided, this fingerprint must match the fingerprint of the tag in storage.",
+                          "description": "When provided, this fingerprint must match the fingerprint of the tag in\nstorage.",
                           "location": "query",
                           "type": "string"
                         },
                         "path": {
-                          "description": "GTM Tag's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/tags/{tag_id}",
+                          "description": "GTM Tag's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/tags/{tag_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/tags/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+path}",
+                      "path": "tagmanager/v2/{+path}",
                       "request": {
                         "$ref": "Tag"
                       },
@@ -2125,6 +1937,7 @@
                   "methods": {
                     "create": {
                       "description": "Creates a GTM Custom Template.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/templates",
                       "httpMethod": "POST",
                       "id": "tagmanager.accounts.containers.workspaces.templates.create",
                       "parameterOrder": [
@@ -2132,13 +1945,14 @@
                       ],
                       "parameters": {
                         "parent": {
-                          "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+                          "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+parent}/templates",
+                      "path": "tagmanager/v2/{+parent}/templates",
                       "request": {
                         "$ref": "CustomTemplate"
                       },
@@ -2151,6 +1965,7 @@
                     },
                     "delete": {
                       "description": "Deletes a GTM Template.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/templates/{templatesId}",
                       "httpMethod": "DELETE",
                       "id": "tagmanager.accounts.containers.workspaces.templates.delete",
                       "parameterOrder": [
@@ -2158,19 +1973,21 @@
                       ],
                       "parameters": {
                         "path": {
-                          "description": "GTM Custom Template's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/templates/{template_id}",
+                          "description": "GTM Custom Template's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/templates/{template_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/templates/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+path}",
+                      "path": "tagmanager/v2/{+path}",
                       "scopes": [
                         "https://www.googleapis.com/auth/tagmanager.edit.containers"
                       ]
                     },
                     "get": {
                       "description": "Gets a GTM Template.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/templates/{templatesId}",
                       "httpMethod": "GET",
                       "id": "tagmanager.accounts.containers.workspaces.templates.get",
                       "parameterOrder": [
@@ -2178,13 +1995,14 @@
                       ],
                       "parameters": {
                         "path": {
-                          "description": "GTM Custom Template's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/templates/{template_id}",
+                          "description": "GTM Custom Template's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/templates/{template_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/templates/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+path}",
+                      "path": "tagmanager/v2/{+path}",
                       "response": {
                         "$ref": "CustomTemplate"
                       },
@@ -2195,6 +2013,7 @@
                     },
                     "list": {
                       "description": "Lists all GTM Templates of a GTM container workspace.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/templates",
                       "httpMethod": "GET",
                       "id": "tagmanager.accounts.containers.workspaces.templates.list",
                       "parameterOrder": [
@@ -2207,13 +2026,14 @@
                           "type": "string"
                         },
                         "parent": {
-                          "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+                          "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+parent}/templates",
+                      "path": "tagmanager/v2/{+parent}/templates",
                       "response": {
                         "$ref": "ListTemplatesResponse"
                       },
@@ -2224,6 +2044,7 @@
                     },
                     "revert": {
                       "description": "Reverts changes to a GTM Template in a GTM Workspace.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/templates/{templatesId}:revert",
                       "httpMethod": "POST",
                       "id": "tagmanager.accounts.containers.workspaces.templates.revert",
                       "parameterOrder": [
@@ -2231,18 +2052,19 @@
                       ],
                       "parameters": {
                         "fingerprint": {
-                          "description": "When provided, this fingerprint must match the fingerprint of the template in storage.",
+                          "description": "When provided, this fingerprint must match the fingerprint of the template\nin storage.",
                           "location": "query",
                           "type": "string"
                         },
                         "path": {
-                          "description": "GTM Custom Template's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/templates/{template_id}",
+                          "description": "GTM Custom Template's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/templates/{template_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/templates/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+path}:revert",
+                      "path": "tagmanager/v2/{+path}:revert",
                       "response": {
                         "$ref": "RevertTemplateResponse"
                       },
@@ -2252,6 +2074,7 @@
                     },
                     "update": {
                       "description": "Updates a GTM Template.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/templates/{templatesId}",
                       "httpMethod": "PUT",
                       "id": "tagmanager.accounts.containers.workspaces.templates.update",
                       "parameterOrder": [
@@ -2259,18 +2082,19 @@
                       ],
                       "parameters": {
                         "fingerprint": {
-                          "description": "When provided, this fingerprint must match the fingerprint of the templates in storage.",
+                          "description": "When provided, this fingerprint must match the fingerprint of the templates\nin storage.",
                           "location": "query",
                           "type": "string"
                         },
                         "path": {
-                          "description": "GTM Custom Template's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/templates/{template_id}",
+                          "description": "GTM Custom Template's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/templates/{template_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/templates/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+path}",
+                      "path": "tagmanager/v2/{+path}",
                       "request": {
                         "$ref": "CustomTemplate"
                       },
@@ -2287,6 +2111,7 @@
                   "methods": {
                     "create": {
                       "description": "Creates a GTM Trigger.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/triggers",
                       "httpMethod": "POST",
                       "id": "tagmanager.accounts.containers.workspaces.triggers.create",
                       "parameterOrder": [
@@ -2294,13 +2119,14 @@
                       ],
                       "parameters": {
                         "parent": {
-                          "description": "GTM Workspaces's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+                          "description": "GTM Workspaces's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+parent}/triggers",
+                      "path": "tagmanager/v2/{+parent}/triggers",
                       "request": {
                         "$ref": "Trigger"
                       },
@@ -2313,6 +2139,7 @@
                     },
                     "delete": {
                       "description": "Deletes a GTM Trigger.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/triggers/{triggersId}",
                       "httpMethod": "DELETE",
                       "id": "tagmanager.accounts.containers.workspaces.triggers.delete",
                       "parameterOrder": [
@@ -2320,19 +2147,21 @@
                       ],
                       "parameters": {
                         "path": {
-                          "description": "GTM Trigger's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/triggers/{trigger_id}",
+                          "description": "GTM Trigger's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/triggers/{trigger_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/triggers/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+path}",
+                      "path": "tagmanager/v2/{+path}",
                       "scopes": [
                         "https://www.googleapis.com/auth/tagmanager.edit.containers"
                       ]
                     },
                     "get": {
                       "description": "Gets a GTM Trigger.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/triggers/{triggersId}",
                       "httpMethod": "GET",
                       "id": "tagmanager.accounts.containers.workspaces.triggers.get",
                       "parameterOrder": [
@@ -2340,13 +2169,14 @@
                       ],
                       "parameters": {
                         "path": {
-                          "description": "GTM Trigger's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/triggers/{trigger_id}",
+                          "description": "GTM Trigger's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/triggers/{trigger_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/triggers/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+path}",
+                      "path": "tagmanager/v2/{+path}",
                       "response": {
                         "$ref": "Trigger"
                       },
@@ -2357,6 +2187,7 @@
                     },
                     "list": {
                       "description": "Lists all GTM Triggers of a Container.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/triggers",
                       "httpMethod": "GET",
                       "id": "tagmanager.accounts.containers.workspaces.triggers.list",
                       "parameterOrder": [
@@ -2369,13 +2200,14 @@
                           "type": "string"
                         },
                         "parent": {
-                          "description": "GTM Workspaces's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+                          "description": "GTM Workspaces's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+parent}/triggers",
+                      "path": "tagmanager/v2/{+parent}/triggers",
                       "response": {
                         "$ref": "ListTriggersResponse"
                       },
@@ -2386,6 +2218,7 @@
                     },
                     "revert": {
                       "description": "Reverts changes to a GTM Trigger in a GTM Workspace.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/triggers/{triggersId}:revert",
                       "httpMethod": "POST",
                       "id": "tagmanager.accounts.containers.workspaces.triggers.revert",
                       "parameterOrder": [
@@ -2393,18 +2226,19 @@
                       ],
                       "parameters": {
                         "fingerprint": {
-                          "description": "When provided, this fingerprint must match the fingerprint of the trigger in storage.",
+                          "description": "When provided, this fingerprint must match the fingerprint of the trigger\nin storage.",
                           "location": "query",
                           "type": "string"
                         },
                         "path": {
-                          "description": "GTM Trigger's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/triggers/{trigger_id}",
+                          "description": "GTM Trigger's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/triggers/{trigger_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/triggers/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+path}:revert",
+                      "path": "tagmanager/v2/{+path}:revert",
                       "response": {
                         "$ref": "RevertTriggerResponse"
                       },
@@ -2414,6 +2248,7 @@
                     },
                     "update": {
                       "description": "Updates a GTM Trigger.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/triggers/{triggersId}",
                       "httpMethod": "PUT",
                       "id": "tagmanager.accounts.containers.workspaces.triggers.update",
                       "parameterOrder": [
@@ -2421,18 +2256,19 @@
                       ],
                       "parameters": {
                         "fingerprint": {
-                          "description": "When provided, this fingerprint must match the fingerprint of the trigger in storage.",
+                          "description": "When provided, this fingerprint must match the fingerprint of the trigger\nin storage.",
                           "location": "query",
                           "type": "string"
                         },
                         "path": {
-                          "description": "GTM Trigger's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/triggers/{trigger_id}",
+                          "description": "GTM Trigger's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/triggers/{trigger_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/triggers/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+path}",
+                      "path": "tagmanager/v2/{+path}",
                       "request": {
                         "$ref": "Trigger"
                       },
@@ -2449,6 +2285,7 @@
                   "methods": {
                     "create": {
                       "description": "Creates a GTM Variable.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/variables",
                       "httpMethod": "POST",
                       "id": "tagmanager.accounts.containers.workspaces.variables.create",
                       "parameterOrder": [
@@ -2456,13 +2293,14 @@
                       ],
                       "parameters": {
                         "parent": {
-                          "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+                          "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+parent}/variables",
+                      "path": "tagmanager/v2/{+parent}/variables",
                       "request": {
                         "$ref": "Variable"
                       },
@@ -2475,6 +2313,7 @@
                     },
                     "delete": {
                       "description": "Deletes a GTM Variable.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/variables/{variablesId}",
                       "httpMethod": "DELETE",
                       "id": "tagmanager.accounts.containers.workspaces.variables.delete",
                       "parameterOrder": [
@@ -2482,19 +2321,21 @@
                       ],
                       "parameters": {
                         "path": {
-                          "description": "GTM Variable's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/variables/{variable_id}",
+                          "description": "GTM Variable's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/variables/{variable_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/variables/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+path}",
+                      "path": "tagmanager/v2/{+path}",
                       "scopes": [
                         "https://www.googleapis.com/auth/tagmanager.edit.containers"
                       ]
                     },
                     "get": {
                       "description": "Gets a GTM Variable.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/variables/{variablesId}",
                       "httpMethod": "GET",
                       "id": "tagmanager.accounts.containers.workspaces.variables.get",
                       "parameterOrder": [
@@ -2502,13 +2343,14 @@
                       ],
                       "parameters": {
                         "path": {
-                          "description": "GTM Variable's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/variables/{variable_id}",
+                          "description": "GTM Variable's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/variables/{variable_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/variables/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+path}",
+                      "path": "tagmanager/v2/{+path}",
                       "response": {
                         "$ref": "Variable"
                       },
@@ -2519,6 +2361,7 @@
                     },
                     "list": {
                       "description": "Lists all GTM Variables of a Container.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/variables",
                       "httpMethod": "GET",
                       "id": "tagmanager.accounts.containers.workspaces.variables.list",
                       "parameterOrder": [
@@ -2531,13 +2374,14 @@
                           "type": "string"
                         },
                         "parent": {
-                          "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+                          "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+parent}/variables",
+                      "path": "tagmanager/v2/{+parent}/variables",
                       "response": {
                         "$ref": "ListVariablesResponse"
                       },
@@ -2548,6 +2392,7 @@
                     },
                     "revert": {
                       "description": "Reverts changes to a GTM Variable in a GTM Workspace.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/variables/{variablesId}:revert",
                       "httpMethod": "POST",
                       "id": "tagmanager.accounts.containers.workspaces.variables.revert",
                       "parameterOrder": [
@@ -2555,18 +2400,19 @@
                       ],
                       "parameters": {
                         "fingerprint": {
-                          "description": "When provided, this fingerprint must match the fingerprint of the variable in storage.",
+                          "description": "When provided, this fingerprint must match the fingerprint of the variable\nin storage.",
                           "location": "query",
                           "type": "string"
                         },
                         "path": {
-                          "description": "GTM Variable's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/variables/{variable_id}",
+                          "description": "GTM Variable's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/variables/{variable_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/variables/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+path}:revert",
+                      "path": "tagmanager/v2/{+path}:revert",
                       "response": {
                         "$ref": "RevertVariableResponse"
                       },
@@ -2576,6 +2422,7 @@
                     },
                     "update": {
                       "description": "Updates a GTM Variable.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/variables/{variablesId}",
                       "httpMethod": "PUT",
                       "id": "tagmanager.accounts.containers.workspaces.variables.update",
                       "parameterOrder": [
@@ -2583,18 +2430,19 @@
                       ],
                       "parameters": {
                         "fingerprint": {
-                          "description": "When provided, this fingerprint must match the fingerprint of the variable in storage.",
+                          "description": "When provided, this fingerprint must match the fingerprint of the variable\nin storage.",
                           "location": "query",
                           "type": "string"
                         },
                         "path": {
-                          "description": "GTM Variable's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/variables/{variable_id}",
+                          "description": "GTM Variable's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/variables/{variable_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/variables/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+path}",
+                      "path": "tagmanager/v2/{+path}",
                       "request": {
                         "$ref": "Variable"
                       },
@@ -2611,6 +2459,7 @@
                   "methods": {
                     "create": {
                       "description": "Creates a GTM Zone.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/zones",
                       "httpMethod": "POST",
                       "id": "tagmanager.accounts.containers.workspaces.zones.create",
                       "parameterOrder": [
@@ -2618,13 +2467,14 @@
                       ],
                       "parameters": {
                         "parent": {
-                          "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+                          "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+parent}/zones",
+                      "path": "tagmanager/v2/{+parent}/zones",
                       "request": {
                         "$ref": "Zone"
                       },
@@ -2637,6 +2487,7 @@
                     },
                     "delete": {
                       "description": "Deletes a GTM Zone.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/zones/{zonesId}",
                       "httpMethod": "DELETE",
                       "id": "tagmanager.accounts.containers.workspaces.zones.delete",
                       "parameterOrder": [
@@ -2644,19 +2495,21 @@
                       ],
                       "parameters": {
                         "path": {
-                          "description": "GTM Zone's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/zones/{zone_id}",
+                          "description": "GTM Zone's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/zones/{zone_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/zones/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+path}",
+                      "path": "tagmanager/v2/{+path}",
                       "scopes": [
                         "https://www.googleapis.com/auth/tagmanager.edit.containers"
                       ]
                     },
                     "get": {
                       "description": "Gets a GTM Zone.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/zones/{zonesId}",
                       "httpMethod": "GET",
                       "id": "tagmanager.accounts.containers.workspaces.zones.get",
                       "parameterOrder": [
@@ -2664,13 +2517,14 @@
                       ],
                       "parameters": {
                         "path": {
-                          "description": "GTM Zone's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/zones/{zone_id}",
+                          "description": "GTM Zone's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/zones/{zone_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/zones/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+path}",
+                      "path": "tagmanager/v2/{+path}",
                       "response": {
                         "$ref": "Zone"
                       },
@@ -2681,6 +2535,7 @@
                     },
                     "list": {
                       "description": "Lists all GTM Zones of a GTM container workspace.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/zones",
                       "httpMethod": "GET",
                       "id": "tagmanager.accounts.containers.workspaces.zones.list",
                       "parameterOrder": [
@@ -2693,13 +2548,14 @@
                           "type": "string"
                         },
                         "parent": {
-                          "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+                          "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+parent}/zones",
+                      "path": "tagmanager/v2/{+parent}/zones",
                       "response": {
                         "$ref": "ListZonesResponse"
                       },
@@ -2710,6 +2566,7 @@
                     },
                     "revert": {
                       "description": "Reverts changes to a GTM Zone in a GTM Workspace.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/zones/{zonesId}:revert",
                       "httpMethod": "POST",
                       "id": "tagmanager.accounts.containers.workspaces.zones.revert",
                       "parameterOrder": [
@@ -2717,18 +2574,19 @@
                       ],
                       "parameters": {
                         "fingerprint": {
-                          "description": "When provided, this fingerprint must match the fingerprint of the zone in storage.",
+                          "description": "When provided, this fingerprint must match the fingerprint of the zone in\nstorage.",
                           "location": "query",
                           "type": "string"
                         },
                         "path": {
-                          "description": "GTM Zone's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/zones/{zone_id}",
+                          "description": "GTM Zone's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/zones/{zone_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/zones/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+path}:revert",
+                      "path": "tagmanager/v2/{+path}:revert",
                       "response": {
                         "$ref": "RevertZoneResponse"
                       },
@@ -2738,6 +2596,7 @@
                     },
                     "update": {
                       "description": "Updates a GTM Zone.",
+                      "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/zones/{zonesId}",
                       "httpMethod": "PUT",
                       "id": "tagmanager.accounts.containers.workspaces.zones.update",
                       "parameterOrder": [
@@ -2745,18 +2604,19 @@
                       ],
                       "parameters": {
                         "fingerprint": {
-                          "description": "When provided, this fingerprint must match the fingerprint of the zone in storage.",
+                          "description": "When provided, this fingerprint must match the fingerprint of the zone in\nstorage.",
                           "location": "query",
                           "type": "string"
                         },
                         "path": {
-                          "description": "GTM Zone's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/zones/{zone_id}",
+                          "description": "GTM Zone's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/zones/{zone_id}",
                           "location": "path",
+                          "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/zones/[^/]+$",
                           "required": true,
                           "type": "string"
                         }
                       },
-                      "path": "{+path}",
+                      "path": "tagmanager/v2/{+path}",
                       "request": {
                         "$ref": "Zone"
                       },
@@ -2777,6 +2637,7 @@
           "methods": {
             "create": {
               "description": "Creates a user's Account \u0026 Container access.",
+              "flatPath": "tagmanager/v2/accounts/{accountsId}/user_permissions",
               "httpMethod": "POST",
               "id": "tagmanager.accounts.user_permissions.create",
               "parameterOrder": [
@@ -2784,13 +2645,14 @@
               ],
               "parameters": {
                 "parent": {
-                  "description": "GTM Account's API relative path. Example: accounts/{account_id}",
+                  "description": "GTM Account's API relative path.\nExample: accounts/{account_id}",
                   "location": "path",
+                  "pattern": "^accounts/[^/]+$",
                   "required": true,
                   "type": "string"
                 }
               },
-              "path": "{+parent}/user_permissions",
+              "path": "tagmanager/v2/{+parent}/user_permissions",
               "request": {
                 "$ref": "UserPermission"
               },
@@ -2802,7 +2664,8 @@
               ]
             },
             "delete": {
-              "description": "Removes a user from the account, revoking access to it and all of its containers.",
+              "description": "Removes a user from the account, revoking access to it and all of its\ncontainers.",
+              "flatPath": "tagmanager/v2/accounts/{accountsId}/user_permissions/{user_permissionsId}",
               "httpMethod": "DELETE",
               "id": "tagmanager.accounts.user_permissions.delete",
               "parameterOrder": [
@@ -2810,19 +2673,21 @@
               ],
               "parameters": {
                 "path": {
-                  "description": "GTM UserPermission's API relative path. Example: accounts/{account_id}/user_permissions/{user_permission_id}",
+                  "description": "GTM UserPermission's API relative path.\nExample: accounts/{account_id}/user_permissions/{user_permission_id}",
                   "location": "path",
+                  "pattern": "^accounts/[^/]+/user_permissions/[^/]+$",
                   "required": true,
                   "type": "string"
                 }
               },
-              "path": "{+path}",
+              "path": "tagmanager/v2/{+path}",
               "scopes": [
                 "https://www.googleapis.com/auth/tagmanager.manage.users"
               ]
             },
             "get": {
               "description": "Gets a user's Account \u0026 Container access.",
+              "flatPath": "tagmanager/v2/accounts/{accountsId}/user_permissions/{user_permissionsId}",
               "httpMethod": "GET",
               "id": "tagmanager.accounts.user_permissions.get",
               "parameterOrder": [
@@ -2830,13 +2695,14 @@
               ],
               "parameters": {
                 "path": {
-                  "description": "GTM UserPermission's API relative path. Example: accounts/{account_id}/user_permissions/{user_permission_id}",
+                  "description": "GTM UserPermission's API relative path.\nExample: accounts/{account_id}/user_permissions/{user_permission_id}",
                   "location": "path",
+                  "pattern": "^accounts/[^/]+/user_permissions/[^/]+$",
                   "required": true,
                   "type": "string"
                 }
               },
-              "path": "{+path}",
+              "path": "tagmanager/v2/{+path}",
               "response": {
                 "$ref": "UserPermission"
               },
@@ -2845,7 +2711,8 @@
               ]
             },
             "list": {
-              "description": "List all users that have access to the account along with Account and Container user access granted to each of them.",
+              "description": "List all users that have access to the account along with Account and\nContainer user access granted to each of them.",
+              "flatPath": "tagmanager/v2/accounts/{accountsId}/user_permissions",
               "httpMethod": "GET",
               "id": "tagmanager.accounts.user_permissions.list",
               "parameterOrder": [
@@ -2858,13 +2725,14 @@
                   "type": "string"
                 },
                 "parent": {
-                  "description": "GTM Accounts's API relative path. Example: accounts/{account_id}",
+                  "description": "GTM Accounts's API relative path.\nExample: accounts/{account_id}",
                   "location": "path",
+                  "pattern": "^accounts/[^/]+$",
                   "required": true,
                   "type": "string"
                 }
               },
-              "path": "{+parent}/user_permissions",
+              "path": "tagmanager/v2/{+parent}/user_permissions",
               "response": {
                 "$ref": "ListUserPermissionsResponse"
               },
@@ -2874,6 +2742,7 @@
             },
             "update": {
               "description": "Updates a user's Account \u0026 Container access.",
+              "flatPath": "tagmanager/v2/accounts/{accountsId}/user_permissions/{user_permissionsId}",
               "httpMethod": "PUT",
               "id": "tagmanager.accounts.user_permissions.update",
               "parameterOrder": [
@@ -2881,13 +2750,14 @@
               ],
               "parameters": {
                 "path": {
-                  "description": "GTM UserPermission's API relative path. Example: accounts/{account_id}/user_permissions/{user_permission_id}",
+                  "description": "GTM UserPermission's API relative path.\nExample: accounts/{account_id}/user_permissions/{user_permission_id}",
                   "location": "path",
+                  "pattern": "^accounts/[^/]+/user_permissions/[^/]+$",
                   "required": true,
                   "type": "string"
                 }
               },
-              "path": "{+path}",
+              "path": "tagmanager/v2/{+path}",
               "request": {
                 "$ref": "UserPermission"
               },
@@ -2903,7 +2773,7 @@
       }
     }
   },
-  "revision": "20190516",
+  "revision": "20190619",
   "rootUrl": "https://www.googleapis.com/",
   "schemas": {
     "Account": {
@@ -2915,11 +2785,11 @@
           "type": "string"
         },
         "fingerprint": {
-          "description": "The fingerprint of the GTM Account as computed at storage time. This value is recomputed whenever the account is modified.",
+          "description": "The fingerprint of the GTM Account as computed at storage time.\nThis value is recomputed whenever the account is modified.",
           "type": "string"
         },
         "name": {
-          "description": "Account display name.",
+          "description": "Account display name.\n@mutable tagmanager.accounts.create\n@mutable tagmanager.accounts.update",
           "type": "string"
         },
         "path": {
@@ -2927,7 +2797,7 @@
           "type": "string"
         },
         "shareData": {
-          "description": "Whether the account shares data anonymously with Google and others. This flag enables benchmarking by sharing your data in an anonymous form. Google will remove all identifiable information about your website, combine the data with hundreds of other anonymous sites and report aggregate trends in the benchmarking service.",
+          "description": "Whether the account shares data anonymously with Google and others.\nThis flag enables benchmarking by sharing your data in an anonymous form.\nGoogle will remove all identifiable information about your website, combine\nthe data with hundreds of other anonymous sites and report aggregate trends\nin the benchmarking service.\n@mutable tagmanager.accounts.create\n@mutable tagmanager.accounts.update",
           "type": "boolean"
         },
         "tagManagerUrl": {
@@ -2942,12 +2812,12 @@
       "id": "AccountAccess",
       "properties": {
         "permission": {
-          "description": "Whether the user has no access, user access, or admin access to an account.",
+          "description": "Whether the user has no access, user access, or admin access to an account.\n@mutable tagmanager.accounts.permissions.create\n@mutable tagmanager.accounts.permissions.update",
           "enum": [
-            "accountPermissionUnspecified",
-            "admin",
-            "noAccess",
-            "user"
+            "ACCOUNT_PERMISSION_UNSPECIFIED",
+            "NO_ACCESS",
+            "USER",
+            "ADMIN"
           ],
           "enumDescriptions": [
             "",
@@ -2961,7 +2831,7 @@
       "type": "object"
     },
     "BuiltInVariable": {
-      "description": "Built-in variables are a special category of variables that are pre-created and non-customizable. They provide common functionality like accessing propeties of the gtm data layer, monitoring clicks, or accessing elements of a page URL.",
+      "description": "Built-in variables are a special category of variables that are pre-created\nand non-customizable. They provide common functionality like accessing\npropeties of the gtm data layer, monitoring clicks, or accessing elements\nof a page URL.",
       "id": "BuiltInVariable",
       "properties": {
         "accountId": {
@@ -2981,113 +2851,113 @@
           "type": "string"
         },
         "type": {
-          "description": "Type of built-in variable.",
+          "description": "Type of built-in variable.\n@required.tagmanager.accounts.containers.workspaces.built_in_variable.update\n@mutable tagmanager.accounts.containers.workspaces.built_in_variable.update",
           "enum": [
-            "advertiserId",
-            "advertisingTrackingEnabled",
-            "ampBrowserLanguage",
-            "ampCanonicalHost",
-            "ampCanonicalPath",
-            "ampCanonicalUrl",
-            "ampClientId",
-            "ampClientMaxScrollX",
-            "ampClientMaxScrollY",
-            "ampClientScreenHeight",
-            "ampClientScreenWidth",
-            "ampClientScrollX",
-            "ampClientScrollY",
-            "ampClientTimestamp",
-            "ampClientTimezone",
-            "ampGtmEvent",
-            "ampPageDownloadTime",
-            "ampPageLoadTime",
-            "ampPageViewId",
-            "ampReferrer",
-            "ampTitle",
-            "ampTotalEngagedTime",
-            "appId",
-            "appName",
-            "appVersionCode",
-            "appVersionName",
-            "builtInVariableTypeUnspecified",
-            "clickClasses",
-            "clickElement",
-            "clickId",
-            "clickTarget",
-            "clickText",
-            "clickUrl",
-            "containerId",
-            "containerVersion",
-            "debugMode",
-            "deviceName",
-            "elementVisibilityFirstTime",
-            "elementVisibilityRatio",
-            "elementVisibilityRecentTime",
-            "elementVisibilityTime",
-            "environmentName",
-            "errorLine",
-            "errorMessage",
-            "errorUrl",
-            "event",
-            "eventName",
-            "firebaseEventParameterCampaign",
-            "firebaseEventParameterCampaignAclid",
-            "firebaseEventParameterCampaignAnid",
-            "firebaseEventParameterCampaignClickTimestamp",
-            "firebaseEventParameterCampaignContent",
-            "firebaseEventParameterCampaignCp1",
-            "firebaseEventParameterCampaignGclid",
-            "firebaseEventParameterCampaignSource",
-            "firebaseEventParameterCampaignTerm",
-            "firebaseEventParameterCurrency",
-            "firebaseEventParameterDynamicLinkAcceptTime",
-            "firebaseEventParameterDynamicLinkLinkid",
-            "firebaseEventParameterNotificationMessageDeviceTime",
-            "firebaseEventParameterNotificationMessageId",
-            "firebaseEventParameterNotificationMessageName",
-            "firebaseEventParameterNotificationMessageTime",
-            "firebaseEventParameterNotificationTopic",
-            "firebaseEventParameterPreviousAppVersion",
-            "firebaseEventParameterPreviousOsVersion",
-            "firebaseEventParameterPrice",
-            "firebaseEventParameterProductId",
-            "firebaseEventParameterQuantity",
-            "firebaseEventParameterValue",
-            "formClasses",
-            "formElement",
-            "formId",
-            "formTarget",
-            "formText",
-            "formUrl",
-            "historySource",
-            "htmlId",
-            "language",
-            "newHistoryFragment",
-            "newHistoryState",
-            "newHistoryUrl",
-            "oldHistoryFragment",
-            "oldHistoryState",
-            "oldHistoryUrl",
-            "osVersion",
-            "pageHostname",
-            "pagePath",
-            "pageUrl",
-            "platform",
-            "randomNumber",
-            "referrer",
-            "resolution",
-            "scrollDepthDirection",
-            "scrollDepthThreshold",
-            "scrollDepthUnits",
-            "sdkVersion",
-            "videoCurrentTime",
-            "videoDuration",
-            "videoPercent",
-            "videoProvider",
-            "videoStatus",
-            "videoTitle",
-            "videoUrl",
-            "videoVisible"
+            "BUILT_IN_VARIABLE_TYPE_UNSPECIFIED",
+            "PAGE_URL",
+            "PAGE_HOSTNAME",
+            "PAGE_PATH",
+            "REFERRER",
+            "EVENT",
+            "CLICK_ELEMENT",
+            "CLICK_CLASSES",
+            "CLICK_ID",
+            "CLICK_TARGET",
+            "CLICK_URL",
+            "CLICK_TEXT",
+            "FORM_ELEMENT",
+            "FORM_CLASSES",
+            "FORM_ID",
+            "FORM_TARGET",
+            "FORM_URL",
+            "FORM_TEXT",
+            "ERROR_MESSAGE",
+            "ERROR_URL",
+            "ERROR_LINE",
+            "NEW_HISTORY_URL",
+            "OLD_HISTORY_URL",
+            "NEW_HISTORY_FRAGMENT",
+            "OLD_HISTORY_FRAGMENT",
+            "NEW_HISTORY_STATE",
+            "OLD_HISTORY_STATE",
+            "HISTORY_SOURCE",
+            "CONTAINER_VERSION",
+            "DEBUG_MODE",
+            "RANDOM_NUMBER",
+            "CONTAINER_ID",
+            "APP_ID",
+            "APP_NAME",
+            "APP_VERSION_CODE",
+            "APP_VERSION_NAME",
+            "LANGUAGE",
+            "OS_VERSION",
+            "PLATFORM",
+            "SDK_VERSION",
+            "DEVICE_NAME",
+            "RESOLUTION",
+            "ADVERTISER_ID",
+            "ADVERTISING_TRACKING_ENABLED",
+            "HTML_ID",
+            "ENVIRONMENT_NAME",
+            "AMP_BROWSER_LANGUAGE",
+            "AMP_CANONICAL_PATH",
+            "AMP_CANONICAL_URL",
+            "AMP_CANONICAL_HOST",
+            "AMP_REFERRER",
+            "AMP_TITLE",
+            "AMP_CLIENT_ID",
+            "AMP_CLIENT_TIMEZONE",
+            "AMP_CLIENT_TIMESTAMP",
+            "AMP_CLIENT_SCREEN_WIDTH",
+            "AMP_CLIENT_SCREEN_HEIGHT",
+            "AMP_CLIENT_SCROLL_X",
+            "AMP_CLIENT_SCROLL_Y",
+            "AMP_CLIENT_MAX_SCROLL_X",
+            "AMP_CLIENT_MAX_SCROLL_Y",
+            "AMP_TOTAL_ENGAGED_TIME",
+            "AMP_PAGE_VIEW_ID",
+            "AMP_PAGE_LOAD_TIME",
+            "AMP_PAGE_DOWNLOAD_TIME",
+            "AMP_GTM_EVENT",
+            "EVENT_NAME",
+            "FIREBASE_EVENT_PARAMETER_CAMPAIGN",
+            "FIREBASE_EVENT_PARAMETER_CAMPAIGN_ACLID",
+            "FIREBASE_EVENT_PARAMETER_CAMPAIGN_ANID",
+            "FIREBASE_EVENT_PARAMETER_CAMPAIGN_CLICK_TIMESTAMP",
+            "FIREBASE_EVENT_PARAMETER_CAMPAIGN_CONTENT",
+            "FIREBASE_EVENT_PARAMETER_CAMPAIGN_CP1",
+            "FIREBASE_EVENT_PARAMETER_CAMPAIGN_GCLID",
+            "FIREBASE_EVENT_PARAMETER_CAMPAIGN_SOURCE",
+            "FIREBASE_EVENT_PARAMETER_CAMPAIGN_TERM",
+            "FIREBASE_EVENT_PARAMETER_CURRENCY",
+            "FIREBASE_EVENT_PARAMETER_DYNAMIC_LINK_ACCEPT_TIME",
+            "FIREBASE_EVENT_PARAMETER_DYNAMIC_LINK_LINKID",
+            "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_DEVICE_TIME",
+            "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_ID",
+            "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_NAME",
+            "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_TIME",
+            "FIREBASE_EVENT_PARAMETER_NOTIFICATION_TOPIC",
+            "FIREBASE_EVENT_PARAMETER_PREVIOUS_APP_VERSION",
+            "FIREBASE_EVENT_PARAMETER_PREVIOUS_OS_VERSION",
+            "FIREBASE_EVENT_PARAMETER_PRICE",
+            "FIREBASE_EVENT_PARAMETER_PRODUCT_ID",
+            "FIREBASE_EVENT_PARAMETER_QUANTITY",
+            "FIREBASE_EVENT_PARAMETER_VALUE",
+            "VIDEO_PROVIDER",
+            "VIDEO_URL",
+            "VIDEO_TITLE",
+            "VIDEO_DURATION",
+            "VIDEO_PERCENT",
+            "VIDEO_VISIBLE",
+            "VIDEO_STATUS",
+            "VIDEO_CURRENT_TIME",
+            "SCROLL_DEPTH_THRESHOLD",
+            "SCROLL_DEPTH_UNITS",
+            "SCROLL_DEPTH_DIRECTION",
+            "ELEMENT_VISIBILITY_RATIO",
+            "ELEMENT_VISIBILITY_TIME",
+            "ELEMENT_VISIBILITY_FIRST_TIME",
+            "ELEMENT_VISIBILITY_RECENT_TIME"
           ],
           "enumDescriptions": [
             "",
@@ -3095,6 +2965,7 @@
             "",
             "",
             "",
+            "For web or mobile.",
             "",
             "",
             "",
@@ -3117,11 +2988,10 @@
             "",
             "",
             "",
+            "For web or mobile.",
             "",
-            "",
-            "",
-            "",
-            "",
+            "For web or mobile.",
+            "For web or mobile.",
             "",
             "",
             "",
@@ -3216,7 +3086,7 @@
               "tagmanager.accounts.containers.workspaces.triggers.update"
             ]
           },
-          "description": "A list of named parameters (key/value), depending on the condition's type. Notes: \n- For binary operators, include parameters named arg0 and arg1 for specifying the left and right operands, respectively. \n- At this time, the left operand (arg0) must be a reference to a variable. \n- For case-insensitive Regex matching, include a boolean parameter named ignore_case that is set to true. If not specified or set to any other value, the matching will be case sensitive. \n- To negate an operator, include a boolean parameter named negate boolean parameter that is set to true.",
+          "description": "A list of named parameters (key/value), depending on the condition's type.\nNotes:\u003cul\u003e\n\u003cli\u003eFor binary operators, include parameters named \u003ccode\u003earg0\u003c/code\u003e and\n   \u003ccode\u003earg1\u003c/code\u003e for specifying the left and right operands,\n   respectively.\u003c/li\u003e\n\u003cli\u003eAt this time, the left operand (\u003ccode\u003earg0\u003c/code\u003e) must be a reference\n    to a variable.\u003c/li\u003e\n\u003cli\u003eFor case-insensitive Regex matching, include a boolean parameter named\n    \u003ccode\u003eignore_case\u003c/code\u003e that is set to \u003ccode\u003etrue\u003c/code\u003e.\n    If not specified or set to any other value, the matching will be case\n    sensitive.\u003c/li\u003e\n\u003cli\u003eTo negate an operator, include a boolean parameter named\n    \u003ccode\u003enegate\u003c/code\u003e boolean parameter that is set to \u003ccode\u003etrue\u003c/code\u003e.\n    \u003c/li\u003e\n\u003c/ul\u003e\n@mutable tagmanager.accounts.containers.workspaces.triggers.create\n@mutable tagmanager.accounts.containers.workspaces.triggers.update",
           "items": {
             "$ref": "Parameter"
           },
@@ -3229,20 +3099,20 @@
               "tagmanager.accounts.containers.workspaces.triggers.update"
             ]
           },
-          "description": "The type of operator for this condition.",
+          "description": "The type of operator for this condition.\n@mutable tagmanager.accounts.containers.workspaces.triggers.create\n@mutable tagmanager.accounts.containers.workspaces.triggers.update",
           "enum": [
-            "conditionTypeUnspecified",
-            "contains",
-            "cssSelector",
-            "endsWith",
-            "equals",
-            "greater",
-            "greaterOrEquals",
-            "less",
-            "lessOrEquals",
-            "matchRegex",
-            "startsWith",
-            "urlMatches"
+            "CONDITION_TYPE_UNSPECIFIED",
+            "EQUALS",
+            "CONTAINS",
+            "STARTS_WITH",
+            "ENDS_WITH",
+            "MATCH_REGEX",
+            "GREATER",
+            "GREATER_OR_EQUALS",
+            "LESS",
+            "LESS_OR_EQUALS",
+            "CSS_SELECTOR",
+            "URL_MATCHES"
           ],
           "enumDescriptions": [
             "",
@@ -3256,7 +3126,7 @@
             "",
             "",
             "",
-            ""
+            "NOTE(lanzone): When defining a ConditionType here, don't forget to also\ndefine a matching PredicateType (in condition.proto)."
           ],
           "type": "string"
         }
@@ -3264,7 +3134,7 @@
       "type": "object"
     },
     "Container": {
-      "description": "Represents a Google Tag Manager Container, which specifies the platform tags will run on, manages workspaces, and retains container versions.",
+      "description": "Represents a Google Tag Manager Container, which specifies the platform tags\nwill run on, manages workspaces, and retains container versions.",
       "id": "Container",
       "properties": {
         "accountId": {
@@ -3276,14 +3146,14 @@
           "type": "string"
         },
         "domainName": {
-          "description": "List of domain names associated with the Container.",
+          "description": "List of domain names associated with the Container.\n@mutable tagmanager.accounts.containers.create\n@mutable tagmanager.accounts.containers.update",
           "items": {
             "type": "string"
           },
           "type": "array"
         },
         "fingerprint": {
-          "description": "The fingerprint of the GTM Container as computed at storage time. This value is recomputed whenever the account is modified.",
+          "description": "The fingerprint of the GTM Container as computed at storage time.  This\nvalue is recomputed whenever the account is modified.",
           "type": "string"
         },
         "name": {
@@ -3292,11 +3162,11 @@
               "tagmanager.accounts.containers.create"
             ]
           },
-          "description": "Container display name.",
+          "description": "Container display name.\n@mutable tagmanager.accounts.containers.create\n@mutable tagmanager.accounts.containers.update",
           "type": "string"
         },
         "notes": {
-          "description": "Container Notes.",
+          "description": "Container Notes.\n@mutable tagmanager.accounts.containers.create\n@mutable tagmanager.accounts.containers.update",
           "type": "string"
         },
         "path": {
@@ -3314,28 +3184,29 @@
         "usageContext": {
           "annotations": {
             "required": [
-              "tagmanager.accounts.containers.create"
+              "tagmanager.accounts.containers.create",
+              "tagmanager.accounts.containers.update"
             ]
           },
-          "description": "List of Usage Contexts for the Container. Valid values include: web, android, or ios.",
+          "description": "List of Usage Contexts for the Container. Valid values include: \u003ccode\u003eweb,\nandroid, or ios\u003c/code\u003e.\n@mutable tagmanager.accounts.containers.create\n@mutable tagmanager.accounts.containers.update",
+          "enumDescriptions": [
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+          ],
           "items": {
             "enum": [
-              "amp",
-              "android",
-              "androidSdk5",
-              "ios",
-              "iosSdk5",
-              "usageContextUnspecified",
-              "web"
-            ],
-            "enumDescriptions": [
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              ""
+              "USAGE_CONTEXT_UNSPECIFIED",
+              "WEB",
+              "ANDROID",
+              "IOS",
+              "ANDROID_SDK_5",
+              "IOS_SDK_5",
+              "AMP"
             ],
             "type": "string"
           },
@@ -3349,18 +3220,18 @@
       "id": "ContainerAccess",
       "properties": {
         "containerId": {
-          "description": "GTM Container ID.",
+          "description": "GTM Container ID.\n@mutable tagmanager.accounts.permissions.create\n@mutable tagmanager.accounts.permissions.update",
           "type": "string"
         },
         "permission": {
-          "description": "List of Container permissions.",
+          "description": "List of Container permissions.\n@mutable tagmanager.accounts.permissions.create\n@mutable tagmanager.accounts.permissions.update",
           "enum": [
-            "approve",
-            "containerPermissionUnspecified",
-            "edit",
-            "noAccess",
-            "publish",
-            "read"
+            "CONTAINER_PERMISSION_UNSPECIFIED",
+            "NO_ACCESS",
+            "READ",
+            "EDIT",
+            "APPROVE",
+            "PUBLISH"
           ],
           "enumDescriptions": [
             "",
@@ -3414,11 +3285,11 @@
           "type": "boolean"
         },
         "description": {
-          "description": "Container version description.",
+          "description": "Container version description.\n@mutable tagmanager.accounts.containers.versions.update",
           "type": "string"
         },
         "fingerprint": {
-          "description": "The fingerprint of the GTM Container Version as computed at storage time. This value is recomputed whenever the container version is modified.",
+          "description": "The fingerprint of the GTM Container Version as computed at\nstorage time. This value is recomputed whenever the container version is\nmodified.",
           "type": "string"
         },
         "folder": {
@@ -3429,7 +3300,7 @@
           "type": "array"
         },
         "name": {
-          "description": "Container version display name.",
+          "description": "Container version display name.\n@mutable tagmanager.accounts.containers.versions.update",
           "type": "string"
         },
         "path": {
@@ -3571,12 +3442,12 @@
           "description": "The container version created."
         },
         "newWorkspacePath": {
-          "description": "Auto generated workspace path created as a result of version creation. This field should only be populated if the created version was not a quick preview.",
+          "description": "Auto generated workspace path created as a result of version creation. This\nfield should only be populated if the created version was not a quick\npreview.",
           "type": "string"
         },
         "syncStatus": {
           "$ref": "SyncStatus",
-          "description": "Whether version creation failed when syncing the workspace to the latest container version."
+          "description": "Whether version creation failed when syncing the workspace to the latest\ncontainer version."
         }
       },
       "type": "object"
@@ -3594,7 +3465,7 @@
           "type": "string"
         },
         "fingerprint": {
-          "description": "The fingerprint of the GTM Custom Template as computed at storage time. This value is recomputed whenever the template is modified.",
+          "description": "The fingerprint of the GTM Custom Template as computed at storage time.\nThis value is recomputed whenever the template is modified.",
           "type": "string"
         },
         "name": {
@@ -3625,24 +3496,24 @@
       "type": "object"
     },
     "Entity": {
-      "description": "A workspace entity that may represent a tag, trigger, variable, or folder in addition to its status in the workspace.",
+      "description": "A workspace entity that may represent a tag, trigger, variable, or folder in\naddition to its status in the workspace.",
       "id": "Entity",
       "properties": {
         "changeStatus": {
           "description": "Represents how the entity has been changed in the workspace.",
           "enum": [
-            "added",
-            "changeStatusUnspecified",
-            "deleted",
-            "none",
-            "updated"
+            "CHANGE_STATUS_UNSPECIFIED",
+            "NONE",
+            "ADDED",
+            "DELETED",
+            "UPDATED"
           ],
           "enumDescriptions": [
             "",
-            "",
-            "",
-            "",
-            ""
+            "The entity has never been changed.",
+            "The entity is added to the workspace.",
+            "The entity is deleted from the workspace.",
+            "The entity has been updated in the workspace."
           ],
           "type": "string"
         },
@@ -3666,7 +3537,7 @@
       "type": "object"
     },
     "Environment": {
-      "description": "Represents a Google Tag Manager Environment. Note that a user can create, delete and update environments of type USER, but can only update the enable_debug and url fields of environments of other types.",
+      "description": "Represents a Google Tag Manager Environment. Note that a user can create,\ndelete and update environments of type USER, but can only update the\nenable_debug and url fields of environments of other types.",
       "id": "Environment",
       "properties": {
         "accountId": {
@@ -3678,8 +3549,9 @@
           "type": "string"
         },
         "authorizationTimestamp": {
-          "$ref": "Timestamp",
-          "description": "The last update time-stamp for the authorization code."
+          "description": "The last update time-stamp for the authorization code.",
+          "format": "google-datetime",
+          "type": "string"
         },
         "containerId": {
           "description": "GTM Container ID.",
@@ -3690,11 +3562,11 @@
           "type": "string"
         },
         "description": {
-          "description": "The environment description. Can be set or changed only on USER type environments.",
+          "description": "The environment description. Can be set or changed only on USER type\nenvironments.\n@mutable tagmanager.accounts.containers.environments.create\n@mutable tagmanager.accounts.containers.environments.update",
           "type": "string"
         },
         "enableDebug": {
-          "description": "Whether or not to enable debug by default for the environment.",
+          "description": "Whether or not to enable debug by default for the environment.\n@mutable tagmanager.accounts.containers.environments.create\n@mutable tagmanager.accounts.containers.environments.update",
           "type": "boolean"
         },
         "environmentId": {
@@ -3702,7 +3574,7 @@
           "type": "string"
         },
         "fingerprint": {
-          "description": "The fingerprint of the GTM environment as computed at storage time. This value is recomputed whenever the environment is modified.",
+          "description": "The fingerprint of the GTM environment as computed at storage time.\nThis value is recomputed whenever the environment is modified.",
           "type": "string"
         },
         "name": {
@@ -3712,7 +3584,7 @@
               "tagmanager.accounts.containers.environments.update"
             ]
           },
-          "description": "The environment display name. Can be set or changed only on USER type environments.",
+          "description": "The environment display name. Can be set or changed only on USER type\nenvironments.\n@mutable tagmanager.accounts.containers.environments.create\n@mutable tagmanager.accounts.containers.environments.update",
           "type": "string"
         },
         "path": {
@@ -3726,21 +3598,21 @@
         "type": {
           "description": "The type of this environment.",
           "enum": [
-            "latest",
-            "live",
-            "user",
-            "workspace"
+            "USER",
+            "LIVE",
+            "LATEST",
+            "WORKSPACE"
           ],
           "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
+            "Points to a user defined environment.",
+            "Points to the current live container version.",
+            "Points to the latest container version.",
+            "Automatically managed environment that points to a workspace preview or\nversion created by a workspace."
           ],
           "type": "string"
         },
         "url": {
-          "description": "Default preview page url for the environment.",
+          "description": "Default preview page url for the environment.\n@mutable tagmanager.accounts.containers.environments.create\n@mutable tagmanager.accounts.containers.environments.update",
           "type": "string"
         },
         "workspaceId": {
@@ -3763,7 +3635,7 @@
           "type": "string"
         },
         "fingerprint": {
-          "description": "The fingerprint of the GTM Folder as computed at storage time. This value is recomputed whenever the folder is modified.",
+          "description": "The fingerprint of the GTM Folder as computed at storage time.\nThis value is recomputed whenever the folder is modified.",
           "type": "string"
         },
         "folderId": {
@@ -3777,11 +3649,11 @@
               "tagmanager.accounts.containers.workspaces.folders.update"
             ]
           },
-          "description": "Folder display name.",
+          "description": "Folder display name.\n@mutable tagmanager.accounts.containers.workspaces.folders.create\n@mutable tagmanager.accounts.containers.workspaces.folders.update",
           "type": "string"
         },
         "notes": {
-          "description": "User notes on how to apply this folder in the container.",
+          "description": "User notes on how to apply this folder in the container.\n@mutable tagmanager.accounts.containers.workspaces.folders.create\n@mutable tagmanager.accounts.containers.workspaces.folders.update",
           "type": "string"
         },
         "path": {
@@ -3832,7 +3704,7 @@
       "type": "object"
     },
     "GetWorkspaceStatusResponse": {
-      "description": "The changes that have occurred in the workspace since the base container version.",
+      "description": "The changes that have occurred in the workspace since the base container\nversion.",
       "id": "GetWorkspaceStatusResponse",
       "properties": {
         "mergeConflict": {
@@ -4090,11 +3962,11 @@
       "properties": {
         "entityInBaseVersion": {
           "$ref": "Entity",
-          "description": "The base version entity (since the latest sync operation) that has conflicting changes compared to the workspace. If this field is missing, it means the workspace entity is deleted from the base version."
+          "description": "The base version entity (since the latest sync operation) that has\nconflicting changes compared to the workspace. If this field is missing,\nit means the workspace entity is deleted from the base version."
         },
         "entityInWorkspace": {
           "$ref": "Entity",
-          "description": "The workspace entity that has conflicting changes compared to the base version. If an entity is deleted in a workspace, it will still appear with a deleted change status."
+          "description": "The workspace entity that has conflicting changes compared to the\nbase version. If an entity is deleted in a workspace, it will still\nappear with a deleted change status."
         }
       },
       "type": "object"
@@ -4104,18 +3976,18 @@
       "id": "Parameter",
       "properties": {
         "key": {
-          "description": "The named key that uniquely identifies a parameter. Required for top-level parameters, as well as map values. Ignored for list values.",
+          "description": "The named key that uniquely identifies a parameter.  Required for top-level\nparameters, as well as map values.  Ignored for list values.\n@mutable tagmanager.accounts.containers.workspaces.variables.create\n@mutable tagmanager.accounts.containers.workspaces.variables.update\n@mutable tagmanager.accounts.containers.workspaces.triggers.create\n@mutable tagmanager.accounts.containers.workspaces.triggers.update\n@mutable tagmanager.accounts.containers.workspaces.tags.create\n@mutable tagmanager.accounts.containers.workspaces.tags.update",
           "type": "string"
         },
         "list": {
-          "description": "This list parameter's parameters (keys will be ignored).",
+          "description": "This list parameter's parameters (keys will be ignored).\n@mutable tagmanager.accounts.containers.workspaces.variables.create\n@mutable tagmanager.accounts.containers.workspaces.variables.update\n@mutable tagmanager.accounts.containers.workspaces.triggers.create\n@mutable tagmanager.accounts.containers.workspaces.triggers.update\n@mutable tagmanager.accounts.containers.workspaces.tags.create\n@mutable tagmanager.accounts.containers.workspaces.tags.update",
           "items": {
             "$ref": "Parameter"
           },
           "type": "array"
         },
         "map": {
-          "description": "This map parameter's parameters (must have keys; keys must be unique).",
+          "description": "This map parameter's parameters (must have keys; keys must be unique).\n@mutable tagmanager.accounts.containers.workspaces.variables.create\n@mutable tagmanager.accounts.containers.workspaces.variables.update\n@mutable tagmanager.accounts.containers.workspaces.triggers.create\n@mutable tagmanager.accounts.containers.workspaces.triggers.update\n@mutable tagmanager.accounts.containers.workspaces.tags.create\n@mutable tagmanager.accounts.containers.workspaces.tags.update",
           "items": {
             "$ref": "Parameter"
           },
@@ -4132,19 +4004,19 @@
               "tagmanager.accounts.containers.workspaces.variables.update"
             ]
           },
-          "description": "The parameter type. Valid values are: \n- boolean: The value represents a boolean, represented as 'true' or 'false' \n- integer: The value represents a 64-bit signed integer value, in base 10 \n- list: A list of parameters should be specified \n- map: A map of parameters should be specified \n- template: The value represents any text; this can include variable references (even variable references that might return non-string types) \n- trigger_reference: The value represents a trigger, represented as the trigger id",
+          "description": "The parameter type.  Valid values are:\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eboolean\u003c/code\u003e: The value represents a boolean, represented as\n    'true' or 'false'\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einteger\u003c/code\u003e: The value represents a 64-bit signed integer\n    value, in base 10\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elist\u003c/code\u003e: A list of parameters should be specified\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emap\u003c/code\u003e: A map of parameters should be specified\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003etemplate\u003c/code\u003e: The value represents any text; this can include\n    variable references (even variable references that might return\n    non-string types)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003etrigger_reference\u003c/code\u003e: The value represents a trigger,\n    represented as the trigger id\u003c/li\u003e\n\u003c/ul\u003e\n@mutable tagmanager.accounts.containers.workspaces.variables.create\n@mutable tagmanager.accounts.containers.workspaces.variables.update\n@mutable tagmanager.accounts.containers.workspaces.triggers.create\n@mutable tagmanager.accounts.containers.workspaces.triggers.update\n@mutable tagmanager.accounts.containers.workspaces.tags.create\n@mutable tagmanager.accounts.containers.workspaces.tags.update",
           "enum": [
-            "boolean",
-            "integer",
-            "list",
-            "map",
-            "template",
-            "triggerReference",
-            "typeUnspecified"
+            "TYPE_UNSPECIFIED",
+            "TEMPLATE",
+            "INTEGER",
+            "BOOLEAN",
+            "LIST",
+            "MAP",
+            "TRIGGER_REFERENCE"
           ],
           "enumDescriptions": [
             "",
-            "",
+            "May include variable references (such as \"{{myVariable}}\").",
             "",
             "",
             "",
@@ -4154,7 +4026,7 @@
           "type": "string"
         },
         "value": {
-          "description": "A parameter's value (may contain variable references such as \"{{myVariable}}\") as appropriate to the specified type.",
+          "description": "A parameter's value (may contain variable references such as\n\"{{myVariable}}\")\nas appropriate to the specified type.\n@mutable tagmanager.accounts.containers.workspaces.variables.create\n@mutable tagmanager.accounts.containers.workspaces.variables.update\n@mutable tagmanager.accounts.containers.workspaces.triggers.create\n@mutable tagmanager.accounts.containers.workspaces.triggers.update\n@mutable tagmanager.accounts.containers.workspaces.tags.create\n@mutable tagmanager.accounts.containers.workspaces.tags.update",
           "type": "string"
         }
       },
@@ -4189,7 +4061,7 @@
         },
         "syncStatus": {
           "$ref": "SyncStatus",
-          "description": "Whether quick previewing failed when syncing the workspace to the latest container version."
+          "description": "Whether quick previewing failed when syncing the workspace to the latest\ncontainer version."
         }
       },
       "type": "object"
@@ -4211,7 +4083,7 @@
       "properties": {
         "folder": {
           "$ref": "Folder",
-          "description": "Folder as it appears in the latest container version since the last workspace synchronization operation. If no folder is present, that means the folder was deleted in the latest container version."
+          "description": "Folder as it appears in the latest container version since the last\nworkspace synchronization operation. If no folder is present, that means\nthe folder was deleted in the latest container version."
         }
       },
       "type": "object"
@@ -4222,7 +4094,7 @@
       "properties": {
         "tag": {
           "$ref": "Tag",
-          "description": "Tag as it appears in the latest container version since the last workspace synchronization operation. If no tag is present, that means the tag was deleted in the latest container version."
+          "description": "Tag as it appears in the latest container version since the last\nworkspace synchronization operation. If no tag is present, that means\nthe tag was deleted in the latest container version."
         }
       },
       "type": "object"
@@ -4233,7 +4105,7 @@
       "properties": {
         "template": {
           "$ref": "CustomTemplate",
-          "description": "Template as it appears in the latest container version since the last workspace synchronization operation. If no template is present, that means the template was deleted in the latest container version."
+          "description": "Template as it appears in the latest container version since the last\nworkspace synchronization operation. If no template is present, that means\nthe template was deleted in the latest container version."
         }
       },
       "type": "object"
@@ -4244,7 +4116,7 @@
       "properties": {
         "trigger": {
           "$ref": "Trigger",
-          "description": "Trigger as it appears in the latest container version since the last workspace synchronization operation. If no trigger is present, that means the trigger was deleted in the latest container version."
+          "description": "Trigger as it appears in the latest container version since the last\nworkspace synchronization operation. If no trigger is present, that means\nthe trigger was deleted in the latest container version."
         }
       },
       "type": "object"
@@ -4255,7 +4127,7 @@
       "properties": {
         "variable": {
           "$ref": "Variable",
-          "description": "Variable as it appears in the latest container version since the last workspace synchronization operation. If no variable is present, that means the variable was deleted in the latest container version."
+          "description": "Variable as it appears in the latest container version since the last\nworkspace synchronization operation. If no variable is present, that means\nthe variable was deleted in the latest container version."
         }
       },
       "type": "object"
@@ -4266,17 +4138,17 @@
       "properties": {
         "zone": {
           "$ref": "Zone",
-          "description": "Zone as it appears in the latest container version since the last workspace synchronization operation. If no zone is present, that means the zone was deleted in the latest container version."
+          "description": "Zone as it appears in the latest container version since the last\nworkspace synchronization operation. If no zone is present, that means\nthe zone was deleted in the latest container version."
         }
       },
       "type": "object"
     },
     "SetupTag": {
-      "description": "Represents a reference to atag that fires before another tag in order to set up dependencies.",
+      "description": "Represents a reference to atag that fires before another tag in order to\nset up dependencies.",
       "id": "SetupTag",
       "properties": {
         "stopOnSetupFailure": {
-          "description": "If true, fire the main tag if and only if the setup tag fires successfully. If false, fire the main tag regardless of setup tag firing status.",
+          "description": "If true, fire the main tag if and only if the setup tag fires\nsuccessfully.\nIf false, fire the main tag regardless of setup tag firing status.",
           "type": "boolean"
         },
         "tagName": {
@@ -4306,7 +4178,7 @@
       "id": "SyncWorkspaceResponse",
       "properties": {
         "mergeConflict": {
-          "description": "The merge conflict after sync. If this field is not empty, the sync is still treated as successful. But a version cannot be created until all conflicts are resolved.",
+          "description": "The merge conflict after sync.\nIf this field is not empty, the sync is still treated as successful.\nBut a version cannot be created until all conflicts are resolved.",
           "items": {
             "$ref": "MergeConflict"
           },
@@ -4328,14 +4200,14 @@
           "type": "string"
         },
         "blockingRuleId": {
-          "description": "Blocking rule IDs. If any of the listed rules evaluate to true, the tag will not fire.",
+          "description": "Blocking rule IDs. If any of the listed rules evaluate to true, the tag\n    will not fire.\n@mutable tagmanager.accounts.containers.workspaces.tags.create\n@mutable tagmanager.accounts.containers.workspaces.tags.update",
           "items": {
             "type": "string"
           },
           "type": "array"
         },
         "blockingTriggerId": {
-          "description": "Blocking trigger IDs. If any of the listed triggers evaluate to true, the tag will not fire.",
+          "description": "Blocking trigger IDs. If any of the listed triggers evaluate to true, the\ntag will not fire.\n@mutable tagmanager.accounts.containers.workspaces.tags.create\n@mutable tagmanager.accounts.containers.workspaces.tags.update",
           "items": {
             "type": "string"
           },
@@ -4346,25 +4218,25 @@
           "type": "string"
         },
         "fingerprint": {
-          "description": "The fingerprint of the GTM Tag as computed at storage time. This value is recomputed whenever the tag is modified.",
+          "description": "The fingerprint of the GTM Tag as computed at storage time.\nThis value is recomputed whenever the tag is modified.",
           "type": "string"
         },
         "firingRuleId": {
-          "description": "Firing rule IDs. A tag will fire when any of the listed rules are true and all of its blockingRuleIds (if any specified) are false.",
+          "description": "Firing rule IDs. A tag will fire when any of the listed rules are true and\n    all of its \u003ccode\u003eblockingRuleIds\u003c/code\u003e (if any specified) are false.\n@mutable tagmanager.accounts.containers.workspaces.tags.create\n@mutable tagmanager.accounts.containers.workspaces.tags.update",
           "items": {
             "type": "string"
           },
           "type": "array"
         },
         "firingTriggerId": {
-          "description": "Firing trigger IDs. A tag will fire when any of the listed triggers are true and all of its blockingTriggerIds (if any specified) are false.",
+          "description": "Firing trigger IDs. A tag will fire when any of the listed triggers are\ntrue and all of its \u003ccode\u003eblockingTriggerIds\u003c/code\u003e (if any specified) are\nfalse.\n@mutable tagmanager.accounts.containers.workspaces.tags.create\n@mutable tagmanager.accounts.containers.workspaces.tags.update",
           "items": {
             "type": "string"
           },
           "type": "array"
         },
         "liveOnly": {
-          "description": "If set to true, this tag will only fire in the live environment (e.g. not in preview or debug mode).",
+          "description": "If set to true, this tag will only fire in the live environment (e.g. not\nin preview or debug mode).\n@mutable tagmanager.accounts.containers.workspaces.tags.create\n@mutable tagmanager.accounts.containers.workspaces.tags.update",
           "type": "boolean"
         },
         "name": {
@@ -4374,15 +4246,15 @@
               "tagmanager.accounts.containers.workspaces.tags.update"
             ]
           },
-          "description": "Tag display name.",
+          "description": "Tag display name.\n@mutable tagmanager.accounts.containers.workspaces.tags.create\n@mutable tagmanager.accounts.containers.workspaces.tags.update",
           "type": "string"
         },
         "notes": {
-          "description": "User notes on how to apply this tag in the container.",
+          "description": "User notes on how to apply this tag in the container.\n@mutable tagmanager.accounts.containers.workspaces.tags.create\n@mutable tagmanager.accounts.containers.workspaces.tags.update",
           "type": "string"
         },
         "parameter": {
-          "description": "The tag's parameters.",
+          "description": "The tag's parameters.\n@mutable tagmanager.accounts.containers.workspaces.tags.create\n@mutable tagmanager.accounts.containers.workspaces.tags.update",
           "items": {
             "$ref": "Parameter"
           },
@@ -4397,20 +4269,20 @@
           "type": "string"
         },
         "paused": {
-          "description": "Indicates whether the tag is paused, which prevents the tag from firing.",
+          "description": "Indicates whether the tag is paused, which prevents the tag from firing.\n@mutable tagmanager.accounts.containers.workspaces.tags.create\n@mutable tagmanager.accounts.containers.workspaces.tags.update",
           "type": "boolean"
         },
         "priority": {
           "$ref": "Parameter",
-          "description": "User defined numeric priority of the tag. Tags are fired asynchronously in order of priority. Tags with higher numeric value fire first. A tag's priority can be a positive or negative value. The default value is 0."
+          "description": "User defined numeric priority of the tag. Tags are fired asynchronously in\norder of priority. Tags with higher numeric value fire first. A tag's\npriority can be a positive or negative value. The default value is 0.\n@mutable tagmanager.accounts.containers.workspaces.tags.create\n@mutable tagmanager.accounts.containers.workspaces.tags.update"
         },
         "scheduleEndMs": {
-          "description": "The end timestamp in milliseconds to schedule a tag.",
+          "description": "The end timestamp in milliseconds to schedule a tag.\n@mutable tagmanager.accounts.containers.workspaces.tags.create\n@mutable tagmanager.accounts.containers.workspaces.tags.update",
           "format": "int64",
           "type": "string"
         },
         "scheduleStartMs": {
-          "description": "The start timestamp in milliseconds to schedule a tag.",
+          "description": "The start timestamp in milliseconds to schedule a tag.\n@mutable tagmanager.accounts.containers.workspaces.tags.create\n@mutable tagmanager.accounts.containers.workspaces.tags.update",
           "format": "int64",
           "type": "string"
         },
@@ -4424,16 +4296,16 @@
         "tagFiringOption": {
           "description": "Option to fire this tag.",
           "enum": [
-            "oncePerEvent",
-            "oncePerLoad",
-            "tagFiringOptionUnspecified",
-            "unlimited"
+            "TAG_FIRING_OPTION_UNSPECIFIED",
+            "UNLIMITED",
+            "ONCE_PER_EVENT",
+            "ONCE_PER_LOAD"
           ],
           "enumDescriptions": [
             "",
-            "",
-            "",
-            ""
+            "Tag can be fired multiple times per event.",
+            "Tag can only be fired per event but can be fired multiple times per load\n(e.g., app load or page load).",
+            "Tag can only be fired per load (e.g., app load or page load)."
           ],
           "type": "string"
         },
@@ -4459,7 +4331,7 @@
               "tagmanager.accounts.containers.workspaces.tags.update"
             ]
           },
-          "description": "GTM Tag Type.",
+          "description": "GTM Tag Type.\n@mutable tagmanager.accounts.containers.workspaces.tags.create\n@mutable tagmanager.accounts.containers.workspaces.tags.update",
           "type": "string"
         },
         "workspaceId": {
@@ -4470,11 +4342,11 @@
       "type": "object"
     },
     "TeardownTag": {
-      "description": "Represents a tag that fires after another tag in order to tear down dependencies.",
+      "description": "Represents a tag that fires after another tag in order to tear down\ndependencies.",
       "id": "TeardownTag",
       "properties": {
         "stopTeardownOnFailure": {
-          "description": "If true, fire the teardown tag if and only if the main tag fires successfully. If false, fire the teardown tag regardless of main tag firing status.",
+          "description": "If true, fire the teardown tag if and only if the main tag fires\nsuccessfully.\nIf false, fire the teardown tag regardless of main tag firing status.",
           "type": "boolean"
         },
         "tagName": {
@@ -4484,23 +4356,6 @@
       },
       "type": "object"
     },
-    "Timestamp": {
-      "description": "A Timestamp represents a point in time independent of any time zone or local calendar, encoded as a count of seconds and fractions of seconds at nanosecond resolution. The count is relative to an epoch at UTC midnight on January 1, 1970, in the proleptic Gregorian calendar which extends the Gregorian calendar backwards to year one.\n\nAll minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap second table is needed for interpretation, using a [24-hour linear smear](https://developers.google.com/time/smear).\n\nThe range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n\n# Examples\n\nExample 1: Compute Timestamp from POSIX `time()`.\n\nTimestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);\n\nExample 2: Compute Timestamp from POSIX `gettimeofday()`.\n\nstruct timeval tv; gettimeofday(\u0026tv, NULL);\n\nTimestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);\n\nExample 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n\nFILETIME ft; GetSystemTimeAsFileTime(\u0026ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) \u003c\u003c 32) | ft.dwLowDateTime;\n\n// A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n\nExample 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n\nlong millis = System.currentTimeMillis();\n\nTimestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();\n\n\n\nExample 5: Compute Timestamp from current time in Python.\n\ntimestamp = Timestamp() timestamp.GetCurrentTime()\n\n# JSON Mapping\n\nIn JSON format, the Timestamp type is encoded as a string in the [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\" where {year} is always expressed using four digits while {month}, {day}, {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone is required. A proto3 JSON serializer should always use UTC (as indicated by \"Z\") when printing the Timestamp type and a proto3 JSON parser should be able to accept both UTC and other timezones (as indicated by an offset).\n\nFor example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past 01:30 UTC on January 15, 2017.\n\nIn JavaScript, one can convert a Date object to this format using the standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) method. In Python, a standard `datetime.datetime` object can be converted to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use the Joda Time's [`ISODateTimeFormat.dateTime()`]( http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime%2D%2D ) to obtain a formatter capable of generating timestamps in this format.",
-      "id": "Timestamp",
-      "properties": {
-        "nanos": {
-          "description": "Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "seconds": {
-          "description": "Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.",
-          "format": "int64",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
     "Trigger": {
       "description": "Represents a Google Tag Manager Trigger",
       "id": "Trigger",
@@ -4510,7 +4365,7 @@
           "type": "string"
         },
         "autoEventFilter": {
-          "description": "Used in the case of auto event tracking.",
+          "description": "Used in the case of auto event tracking.\n@mutable tagmanager.accounts.containers.workspaces.triggers.create\n@mutable tagmanager.accounts.containers.workspaces.triggers.update",
           "items": {
             "$ref": "Condition"
           },
@@ -4518,7 +4373,7 @@
         },
         "checkValidation": {
           "$ref": "Parameter",
-          "description": "Whether or not we should only fire tags if the form submit or link click event is not cancelled by some other event handler (e.g. because of validation). Only valid for Form Submission and Link Click triggers."
+          "description": "Whether or not we should only fire tags if the form submit or link click\nevent is not cancelled by some other event handler (e.g. because of\nvalidation). Only valid for Form Submission and Link Click triggers.\n@mutable tagmanager.accounts.containers.workspaces.triggers.create\n@mutable tagmanager.accounts.containers.workspaces.triggers.update"
         },
         "containerId": {
           "description": "GTM Container ID.",
@@ -4526,10 +4381,10 @@
         },
         "continuousTimeMinMilliseconds": {
           "$ref": "Parameter",
-          "description": "A visibility trigger minimum continuous visible time (in milliseconds). Only valid for AMP Visibility trigger."
+          "description": "A visibility trigger minimum continuous visible time (in milliseconds).\nOnly valid for AMP Visibility trigger.\n@mutable tagmanager.accounts.containers.workspaces.triggers.create\n@mutable tagmanager.accounts.containers.workspaces.triggers.update"
         },
         "customEventFilter": {
-          "description": "Used in the case of custom event, which is fired iff all Conditions are true.",
+          "description": "Used in the case of custom event, which is fired iff all Conditions are\ntrue.\n@mutable tagmanager.accounts.containers.workspaces.triggers.create\n@mutable tagmanager.accounts.containers.workspaces.triggers.update",
           "items": {
             "$ref": "Condition"
           },
@@ -4537,38 +4392,38 @@
         },
         "eventName": {
           "$ref": "Parameter",
-          "description": "Name of the GTM event that is fired. Only valid for Timer triggers."
+          "description": "Name of the GTM event that is fired. Only valid for Timer triggers.\n@mutable tagmanager.accounts.containers.workspaces.triggers.create\n@mutable tagmanager.accounts.containers.workspaces.triggers.update"
         },
         "filter": {
-          "description": "The trigger will only fire iff all Conditions are true.",
+          "description": "The trigger will only fire iff all Conditions are true.\n@mutable tagmanager.accounts.containers.workspaces.triggers.create\n@mutable tagmanager.accounts.containers.workspaces.triggers.update",
           "items": {
             "$ref": "Condition"
           },
           "type": "array"
         },
         "fingerprint": {
-          "description": "The fingerprint of the GTM Trigger as computed at storage time. This value is recomputed whenever the trigger is modified.",
+          "description": "The fingerprint of the GTM Trigger as computed at storage time.\nThis value is recomputed whenever the trigger is modified.",
           "type": "string"
         },
         "horizontalScrollPercentageList": {
           "$ref": "Parameter",
-          "description": "List of integer percentage values for scroll triggers. The trigger will fire when each percentage is reached when the view is scrolled horizontally. Only valid for AMP scroll triggers."
+          "description": "List of integer percentage values for scroll triggers. The trigger will\nfire when each percentage is reached when the view is scrolled\nhorizontally. Only valid for AMP scroll triggers.\n@mutable tagmanager.accounts.containers.workspaces.triggers.create\n@mutable tagmanager.accounts.containers.workspaces.triggers.update"
         },
         "interval": {
           "$ref": "Parameter",
-          "description": "Time between triggering recurring Timer Events (in milliseconds). Only valid for Timer triggers."
+          "description": "Time between triggering recurring Timer Events (in milliseconds). Only\nvalid for Timer triggers.\n@mutable tagmanager.accounts.containers.workspaces.triggers.create\n@mutable tagmanager.accounts.containers.workspaces.triggers.update"
         },
         "intervalSeconds": {
           "$ref": "Parameter",
-          "description": "Time between Timer Events to fire (in seconds). Only valid for AMP Timer trigger."
+          "description": "Time between Timer Events to fire (in seconds). Only valid for AMP Timer\ntrigger.\n@mutable tagmanager.accounts.containers.workspaces.triggers.create\n@mutable tagmanager.accounts.containers.workspaces.triggers.update"
         },
         "limit": {
           "$ref": "Parameter",
-          "description": "Limit of the number of GTM events this Timer Trigger will fire. If no limit is set, we will continue to fire GTM events until the user leaves the page. Only valid for Timer triggers."
+          "description": "Limit of the number of GTM events this Timer Trigger will fire. If no limit\nis set, we will continue to fire GTM events until the user leaves the page.\nOnly valid for Timer triggers.\n@mutable tagmanager.accounts.containers.workspaces.triggers.create\n@mutable tagmanager.accounts.containers.workspaces.triggers.update"
         },
         "maxTimerLengthSeconds": {
           "$ref": "Parameter",
-          "description": "Max time to fire Timer Events (in seconds). Only valid for AMP Timer trigger."
+          "description": "Max time to fire Timer Events (in seconds). Only valid for AMP Timer\ntrigger.\n@mutable tagmanager.accounts.containers.workspaces.triggers.create\n@mutable tagmanager.accounts.containers.workspaces.triggers.update"
         },
         "name": {
           "annotations": {
@@ -4577,15 +4432,15 @@
               "tagmanager.accounts.containers.workspaces.triggers.update"
             ]
           },
-          "description": "Trigger display name.",
+          "description": "Trigger display name.\n@mutable tagmanager.accounts.containers.workspaces.triggers.create\n@mutable tagmanager.accounts.containers.workspaces.triggers.update",
           "type": "string"
         },
         "notes": {
-          "description": "User notes on how to apply this trigger in the container.",
+          "description": "User notes on how to apply this trigger in the container.\n@mutable tagmanager.accounts.containers.workspaces.triggers.create\n@mutable tagmanager.accounts.containers.workspaces.triggers.update",
           "type": "string"
         },
         "parameter": {
-          "description": "Additional parameters.",
+          "description": "Additional parameters.\n@mutable tagmanager.accounts.containers.workspaces.triggers.create\n@mutable tagmanager.accounts.containers.workspaces.triggers.update",
           "items": {
             "$ref": "Parameter"
           },
@@ -4601,7 +4456,7 @@
         },
         "selector": {
           "$ref": "Parameter",
-          "description": "A click trigger CSS selector (i.e. \"a\", \"button\" etc.). Only valid for AMP Click trigger."
+          "description": "A click trigger CSS selector (i.e. \"a\", \"button\" etc.). Only valid for AMP\nClick trigger.\n@mutable tagmanager.accounts.containers.workspaces.triggers.create\n@mutable tagmanager.accounts.containers.workspaces.triggers.update"
         },
         "tagManagerUrl": {
           "description": "Auto generated link to the tag manager UI",
@@ -4609,7 +4464,7 @@
         },
         "totalTimeMinMilliseconds": {
           "$ref": "Parameter",
-          "description": "A visibility trigger minimum total visible time (in milliseconds). Only valid for AMP Visibility trigger."
+          "description": "A visibility trigger minimum total visible time (in milliseconds).\nOnly valid for AMP Visibility trigger.\n@mutable tagmanager.accounts.containers.workspaces.triggers.create\n@mutable tagmanager.accounts.containers.workspaces.triggers.update"
         },
         "triggerId": {
           "description": "The Trigger ID uniquely identifies the GTM Trigger.",
@@ -4621,40 +4476,40 @@
               "tagmanager.accounts.containers.workspaces.triggers.create"
             ]
           },
-          "description": "Defines the data layer event that causes this trigger.",
+          "description": "Defines the data layer event that causes this trigger.\n@mutable tagmanager.accounts.containers.workspaces.triggers.create\n@mutable tagmanager.accounts.containers.workspaces.triggers.update",
           "enum": [
-            "always",
-            "ampClick",
-            "ampScroll",
-            "ampTimer",
-            "ampVisibility",
-            "click",
-            "customEvent",
-            "domReady",
-            "elementVisibility",
-            "eventTypeUnspecified",
-            "firebaseAppException",
-            "firebaseAppUpdate",
-            "firebaseCampaign",
-            "firebaseFirstOpen",
-            "firebaseInAppPurchase",
-            "firebaseNotificationDismiss",
-            "firebaseNotificationForeground",
-            "firebaseNotificationOpen",
-            "firebaseNotificationReceive",
-            "firebaseOsUpdate",
-            "firebaseSessionStart",
-            "firebaseUserEngagement",
-            "formSubmission",
-            "historyChange",
-            "jsError",
-            "linkClick",
-            "pageview",
-            "scrollDepth",
-            "timer",
-            "triggerGroup",
-            "windowLoaded",
-            "youTubeVideo"
+            "EVENT_TYPE_UNSPECIFIED",
+            "PAGEVIEW",
+            "DOM_READY",
+            "WINDOW_LOADED",
+            "CUSTOM_EVENT",
+            "TRIGGER_GROUP",
+            "ALWAYS",
+            "FIREBASE_APP_EXCEPTION",
+            "FIREBASE_APP_UPDATE",
+            "FIREBASE_CAMPAIGN",
+            "FIREBASE_FIRST_OPEN",
+            "FIREBASE_IN_APP_PURCHASE",
+            "FIREBASE_NOTIFICATION_DISMISS",
+            "FIREBASE_NOTIFICATION_FOREGROUND",
+            "FIREBASE_NOTIFICATION_OPEN",
+            "FIREBASE_NOTIFICATION_RECEIVE",
+            "FIREBASE_OS_UPDATE",
+            "FIREBASE_SESSION_START",
+            "FIREBASE_USER_ENGAGEMENT",
+            "FORM_SUBMISSION",
+            "CLICK",
+            "LINK_CLICK",
+            "JS_ERROR",
+            "HISTORY_CHANGE",
+            "TIMER",
+            "AMP_CLICK",
+            "AMP_TIMER",
+            "AMP_SCROLL",
+            "AMP_VISIBILITY",
+            "YOU_TUBE_VIDEO",
+            "SCROLL_DEPTH",
+            "ELEMENT_VISIBILITY"
           ],
           "enumDescriptions": [
             "",
@@ -4694,31 +4549,31 @@
         },
         "uniqueTriggerId": {
           "$ref": "Parameter",
-          "description": "Globally unique id of the trigger that auto-generates this (a Form Submit, Link Click or Timer listener) if any. Used to make incompatible auto-events work together with trigger filtering based on trigger ids. This value is populated during output generation since the tags implied by triggers don't exist until then. Only valid for Form Submit, Link Click and Timer triggers."
+          "description": "Globally unique id of the trigger that auto-generates this (a Form Submit,\nLink Click or Timer listener) if any. Used to make incompatible auto-events\nwork together with trigger filtering based on trigger ids. This value is\npopulated during output generation since the tags implied by triggers don't\nexist until then. Only valid for Form Submit, Link Click and Timer\ntriggers.\n@mutable tagmanager.accounts.containers.workspaces.triggers.create\n@mutable tagmanager.accounts.containers.workspaces.triggers.update"
         },
         "verticalScrollPercentageList": {
           "$ref": "Parameter",
-          "description": "List of integer percentage values for scroll triggers. The trigger will fire when each percentage is reached when the view is scrolled vertically. Only valid for AMP scroll triggers."
+          "description": "List of integer percentage values for scroll triggers. The trigger will\nfire when each percentage is reached when the view is scrolled vertically.\nOnly valid for AMP scroll triggers.\n@mutable tagmanager.accounts.containers.workspaces.triggers.create\n@mutable tagmanager.accounts.containers.workspaces.triggers.update"
         },
         "visibilitySelector": {
           "$ref": "Parameter",
-          "description": "A visibility trigger CSS selector (i.e. \"#id\"). Only valid for AMP Visibility trigger."
+          "description": "A visibility trigger CSS selector (i.e. \"#id\"). Only valid for AMP\nVisibility trigger.\n@mutable tagmanager.accounts.containers.workspaces.triggers.create\n@mutable tagmanager.accounts.containers.workspaces.triggers.update"
         },
         "visiblePercentageMax": {
           "$ref": "Parameter",
-          "description": "A visibility trigger maximum percent visibility. Only valid for AMP Visibility trigger."
+          "description": "A visibility trigger maximum percent visibility. Only valid for AMP\nVisibility trigger.\n@mutable tagmanager.accounts.containers.workspaces.triggers.create\n@mutable tagmanager.accounts.containers.workspaces.triggers.update"
         },
         "visiblePercentageMin": {
           "$ref": "Parameter",
-          "description": "A visibility trigger minimum percent visibility. Only valid for AMP Visibility trigger."
+          "description": "A visibility trigger minimum percent visibility. Only valid for AMP\nVisibility trigger.\n@mutable tagmanager.accounts.containers.workspaces.triggers.create\n@mutable tagmanager.accounts.containers.workspaces.triggers.update"
         },
         "waitForTags": {
           "$ref": "Parameter",
-          "description": "Whether or not we should delay the form submissions or link opening until all of the tags have fired (by preventing the default action and later simulating the default action). Only valid for Form Submission and Link Click triggers."
+          "description": "Whether or not we should delay the form submissions or link opening\nuntil all of the tags have fired (by preventing the default\naction and later simulating the default action). Only valid for\nForm Submission and Link Click triggers.\n@mutable tagmanager.accounts.containers.workspaces.triggers.create\n@mutable tagmanager.accounts.containers.workspaces.triggers.update"
         },
         "waitForTagsTimeout": {
           "$ref": "Parameter",
-          "description": "How long to wait (in milliseconds) for tags to fire when 'waits_for_tags' above evaluates to true. Only valid for Form Submission and Link Click triggers."
+          "description": "How long to wait (in milliseconds) for tags to fire when 'waits_for_tags'\nabove evaluates to \u003ccode\u003etrue\u003c/code\u003e.  Only valid for Form Submission and\nLink Click triggers.\n@mutable tagmanager.accounts.containers.workspaces.triggers.create\n@mutable tagmanager.accounts.containers.workspaces.triggers.update"
         },
         "workspaceId": {
           "description": "GTM Workspace ID.",
@@ -4733,21 +4588,21 @@
       "properties": {
         "accountAccess": {
           "$ref": "AccountAccess",
-          "description": "GTM Account access permissions."
+          "description": "GTM Account access permissions.\n@mutable tagmanager.accounts.permissions.create\n@mutable tagmanager.accounts.permissions.update"
         },
         "accountId": {
           "description": "The Account ID uniquely identifies the GTM Account.",
           "type": "string"
         },
         "containerAccess": {
-          "description": "GTM Container access permissions.",
+          "description": "GTM Container access permissions.\n@mutable tagmanager.accounts.permissions.create\n@mutable tagmanager.accounts.permissions.update",
           "items": {
             "$ref": "ContainerAccess"
           },
           "type": "array"
         },
         "emailAddress": {
-          "description": "User's email address.",
+          "description": "User's email address.\n@mutable tagmanager.accounts.permissions.create",
           "type": "string"
         },
         "path": {
@@ -4770,21 +4625,21 @@
           "type": "string"
         },
         "disablingTriggerId": {
-          "description": "For mobile containers only: A list of trigger IDs for disabling conditional variables; the variable is enabled if one of the enabling trigger is true while all the disabling trigger are false. Treated as an unordered set.",
+          "description": "For mobile containers only: A list of trigger IDs for disabling conditional\nvariables; the variable is enabled if one of the enabling trigger is true\nwhile all the disabling trigger are false. Treated as an unordered set.\n@mutable tagmanager.accounts.containers.workspaces.variables.create\n@mutable tagmanager.accounts.containers.workspaces.variables.update",
           "items": {
             "type": "string"
           },
           "type": "array"
         },
         "enablingTriggerId": {
-          "description": "For mobile containers only: A list of trigger IDs for enabling conditional variables; the variable is enabled if one of the enabling triggers is true while all the disabling triggers are false. Treated as an unordered set.",
+          "description": "For mobile containers only: A list of trigger IDs for enabling conditional\nvariables; the variable is enabled if one of the enabling triggers is true\nwhile all the disabling triggers are false. Treated as an unordered set.\n@mutable tagmanager.accounts.containers.workspaces.variables.create\n@mutable tagmanager.accounts.containers.workspaces.variables.update",
           "items": {
             "type": "string"
           },
           "type": "array"
         },
         "fingerprint": {
-          "description": "The fingerprint of the GTM Variable as computed at storage time. This value is recomputed whenever the variable is modified.",
+          "description": "The fingerprint of the GTM Variable as computed at storage time.\nThis value is recomputed whenever the variable is modified.",
           "type": "string"
         },
         "formatValue": {
@@ -4798,15 +4653,15 @@
               "tagmanager.accounts.containers.workspaces.variables.update"
             ]
           },
-          "description": "Variable display name.",
+          "description": "Variable display name.\n@mutable tagmanager.accounts.containers.workspaces.variables.create\n@mutable tagmanager.accounts.containers.workspaces.variables.update",
           "type": "string"
         },
         "notes": {
-          "description": "User notes on how to apply this variable in the container.",
+          "description": "User notes on how to apply this variable in the container.\n@mutable tagmanager.accounts.containers.workspaces.variables.create\n@mutable tagmanager.accounts.containers.workspaces.variables.update",
           "type": "string"
         },
         "parameter": {
-          "description": "The variable's parameters.",
+          "description": "The variable's parameters.\n@mutable tagmanager.accounts.containers.workspaces.variables.create\n@mutable tagmanager.accounts.containers.workspaces.variables.update",
           "items": {
             "$ref": "Parameter"
           },
@@ -4821,12 +4676,12 @@
           "type": "string"
         },
         "scheduleEndMs": {
-          "description": "The end timestamp in milliseconds to schedule a variable.",
+          "description": "The end timestamp in milliseconds to schedule a variable.\n@mutable tagmanager.accounts.containers.workspaces.variables.create\n@mutable tagmanager.accounts.containers.workspaces.variables.update",
           "format": "int64",
           "type": "string"
         },
         "scheduleStartMs": {
-          "description": "The start timestamp in milliseconds to schedule a variable.",
+          "description": "The start timestamp in milliseconds to schedule a variable.\n@mutable tagmanager.accounts.containers.workspaces.variables.create\n@mutable tagmanager.accounts.containers.workspaces.variables.update",
           "format": "int64",
           "type": "string"
         },
@@ -4841,7 +4696,7 @@
               "tagmanager.accounts.containers.workspaces.variables.update"
             ]
           },
-          "description": "GTM Variable Type.",
+          "description": "GTM Variable Type.\n@mutable tagmanager.accounts.containers.workspaces.variables.create\n@mutable tagmanager.accounts.containers.workspaces.variables.update",
           "type": "string"
         },
         "variableId": {
@@ -4859,16 +4714,16 @@
       "id": "VariableFormatValue",
       "properties": {
         "caseConversionType": {
-          "description": "The option to convert a string-type variable value to either lowercase or uppercase.",
+          "description": "The option to convert a string-type variable value to either lowercase or\nuppercase.",
           "enum": [
-            "lowercase",
-            "none",
-            "uppercase"
+            "NONE",
+            "LOWERCASE",
+            "UPPERCASE"
           ],
           "enumDescriptions": [
             "",
-            "",
-            ""
+            "The option to convert a variable value to lowercase.",
+            "The option to convert a variable value to uppercase."
           ],
           "type": "string"
         },
@@ -4904,11 +4759,11 @@
           "type": "string"
         },
         "description": {
-          "description": "Workspace description.",
+          "description": "Workspace description.\n@mutable tagmanager.accounts.containers.workspaces.create\n@mutable tagmanager.accounts.containers.workspaces.update",
           "type": "string"
         },
         "fingerprint": {
-          "description": "The fingerprint of the GTM Workspace as computed at storage time. This value is recomputed whenever the workspace is modified.",
+          "description": "The fingerprint of the GTM Workspace as computed at storage time. This\nvalue is recomputed whenever the workspace is modified.",
           "type": "string"
         },
         "name": {
@@ -4918,7 +4773,7 @@
               "tagmanager.accounts.containers.workspaces.update"
             ]
           },
-          "description": "Workspace display name.",
+          "description": "Workspace display name.\n@mutable tagmanager.accounts.containers.workspaces.create\n@mutable tagmanager.accounts.containers.workspaces.update",
           "type": "string"
         },
         "path": {
@@ -4960,7 +4815,7 @@
           "type": "string"
         },
         "fingerprint": {
-          "description": "The fingerprint of the GTM Zone as computed at storage time. This value is recomputed whenever the zone is modified.",
+          "description": "The fingerprint of the GTM Zone as computed at storage time.\nThis value is recomputed whenever the zone is modified.",
           "type": "string"
         },
         "name": {
@@ -5006,7 +4861,7 @@
           "type": "array"
         },
         "customEvaluationTriggerId": {
-          "description": "Custom evaluation trigger IDs. A zone will evaluate its boundary conditions when any of the listed triggers are true.",
+          "description": "Custom evaluation trigger IDs. A zone will evaluate its boundary\nconditions when any of the listed triggers are true.",
           "items": {
             "type": "string"
           },
@@ -5049,7 +4904,7 @@
       "type": "object"
     }
   },
-  "servicePath": "tagmanager/v2/",
+  "servicePath": "",
   "title": "Tag Manager API",
   "version": "v2"
 }
\ No newline at end of file
diff --git a/tagmanager/v2/tagmanager-gen.go b/tagmanager/v2/tagmanager-gen.go
index 0dd91b6..fb0df17 100644
--- a/tagmanager/v2/tagmanager-gen.go
+++ b/tagmanager/v2/tagmanager-gen.go
@@ -6,7 +6,7 @@
 
 // Package tagmanager provides access to the Tag Manager API.
 //
-// For product documentation, see: https://developers.google.com/tag-manager/api/v2/
+// For product documentation, see: https://developers.google.com/tag-manager
 //
 // Creating a client
 //
@@ -76,7 +76,7 @@
 const apiId = "tagmanager:v2"
 const apiName = "tagmanager"
 const apiVersion = "v2"
-const basePath = "https://www.googleapis.com/tagmanager/v2/"
+const basePath = "https://www.googleapis.com/"
 
 // OAuth2 scopes used by this API.
 const (
@@ -331,21 +331,29 @@
 	AccountId string `json:"accountId,omitempty"`
 
 	// Fingerprint: The fingerprint of the GTM Account as computed at
-	// storage time. This value is recomputed whenever the account is
-	// modified.
+	// storage time.
+	// This value is recomputed whenever the account is modified.
 	Fingerprint string `json:"fingerprint,omitempty"`
 
 	// Name: Account display name.
+	// @mutable tagmanager.accounts.create
+	// @mutable tagmanager.accounts.update
 	Name string `json:"name,omitempty"`
 
 	// Path: GTM Account's API relative path.
 	Path string `json:"path,omitempty"`
 
 	// ShareData: Whether the account shares data anonymously with Google
-	// and others. This flag enables benchmarking by sharing your data in an
-	// anonymous form. Google will remove all identifiable information about
-	// your website, combine the data with hundreds of other anonymous sites
-	// and report aggregate trends in the benchmarking service.
+	// and others.
+	// This flag enables benchmarking by sharing your data in an anonymous
+	// form.
+	// Google will remove all identifiable information about your website,
+	// combine
+	// the data with hundreds of other anonymous sites and report aggregate
+	// trends
+	// in the benchmarking service.
+	// @mutable tagmanager.accounts.create
+	// @mutable tagmanager.accounts.update
 	ShareData bool `json:"shareData,omitempty"`
 
 	// TagManagerUrl: Auto generated link to the tag manager UI
@@ -383,12 +391,14 @@
 type AccountAccess struct {
 	// Permission: Whether the user has no access, user access, or admin
 	// access to an account.
+	// @mutable tagmanager.accounts.permissions.create
+	// @mutable tagmanager.accounts.permissions.update
 	//
 	// Possible values:
-	//   "accountPermissionUnspecified"
-	//   "admin"
-	//   "noAccess"
-	//   "user"
+	//   "ACCOUNT_PERMISSION_UNSPECIFIED"
+	//   "NO_ACCESS"
+	//   "USER"
+	//   "ADMIN"
 	Permission string `json:"permission,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Permission") to
@@ -415,9 +425,12 @@
 }
 
 // BuiltInVariable: Built-in variables are a special category of
-// variables that are pre-created and non-customizable. They provide
-// common functionality like accessing propeties of the gtm data layer,
-// monitoring clicks, or accessing elements of a page URL.
+// variables that are pre-created
+// and non-customizable. They provide common functionality like
+// accessing
+// propeties of the gtm data layer, monitoring clicks, or accessing
+// elements
+// of a page URL.
 type BuiltInVariable struct {
 	// AccountId: GTM Account ID.
 	AccountId string `json:"accountId,omitempty"`
@@ -432,114 +445,119 @@
 	// Path: GTM BuiltInVariable's API relative path.
 	Path string `json:"path,omitempty"`
 
-	// Type: Type of built-in variable.
+	// Type: Type of built-in
+	// variable.
+	// @required.tagmanager.accounts.containers.workspaces.built_in
+	// _variable.update
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.built_in_variable.update
 	//
 	// Possible values:
-	//   "advertiserId"
-	//   "advertisingTrackingEnabled"
-	//   "ampBrowserLanguage"
-	//   "ampCanonicalHost"
-	//   "ampCanonicalPath"
-	//   "ampCanonicalUrl"
-	//   "ampClientId"
-	//   "ampClientMaxScrollX"
-	//   "ampClientMaxScrollY"
-	//   "ampClientScreenHeight"
-	//   "ampClientScreenWidth"
-	//   "ampClientScrollX"
-	//   "ampClientScrollY"
-	//   "ampClientTimestamp"
-	//   "ampClientTimezone"
-	//   "ampGtmEvent"
-	//   "ampPageDownloadTime"
-	//   "ampPageLoadTime"
-	//   "ampPageViewId"
-	//   "ampReferrer"
-	//   "ampTitle"
-	//   "ampTotalEngagedTime"
-	//   "appId"
-	//   "appName"
-	//   "appVersionCode"
-	//   "appVersionName"
-	//   "builtInVariableTypeUnspecified"
-	//   "clickClasses"
-	//   "clickElement"
-	//   "clickId"
-	//   "clickTarget"
-	//   "clickText"
-	//   "clickUrl"
-	//   "containerId"
-	//   "containerVersion"
-	//   "debugMode"
-	//   "deviceName"
-	//   "elementVisibilityFirstTime"
-	//   "elementVisibilityRatio"
-	//   "elementVisibilityRecentTime"
-	//   "elementVisibilityTime"
-	//   "environmentName"
-	//   "errorLine"
-	//   "errorMessage"
-	//   "errorUrl"
-	//   "event"
-	//   "eventName"
-	//   "firebaseEventParameterCampaign"
-	//   "firebaseEventParameterCampaignAclid"
-	//   "firebaseEventParameterCampaignAnid"
-	//   "firebaseEventParameterCampaignClickTimestamp"
-	//   "firebaseEventParameterCampaignContent"
-	//   "firebaseEventParameterCampaignCp1"
-	//   "firebaseEventParameterCampaignGclid"
-	//   "firebaseEventParameterCampaignSource"
-	//   "firebaseEventParameterCampaignTerm"
-	//   "firebaseEventParameterCurrency"
-	//   "firebaseEventParameterDynamicLinkAcceptTime"
-	//   "firebaseEventParameterDynamicLinkLinkid"
-	//   "firebaseEventParameterNotificationMessageDeviceTime"
-	//   "firebaseEventParameterNotificationMessageId"
-	//   "firebaseEventParameterNotificationMessageName"
-	//   "firebaseEventParameterNotificationMessageTime"
-	//   "firebaseEventParameterNotificationTopic"
-	//   "firebaseEventParameterPreviousAppVersion"
-	//   "firebaseEventParameterPreviousOsVersion"
-	//   "firebaseEventParameterPrice"
-	//   "firebaseEventParameterProductId"
-	//   "firebaseEventParameterQuantity"
-	//   "firebaseEventParameterValue"
-	//   "formClasses"
-	//   "formElement"
-	//   "formId"
-	//   "formTarget"
-	//   "formText"
-	//   "formUrl"
-	//   "historySource"
-	//   "htmlId"
-	//   "language"
-	//   "newHistoryFragment"
-	//   "newHistoryState"
-	//   "newHistoryUrl"
-	//   "oldHistoryFragment"
-	//   "oldHistoryState"
-	//   "oldHistoryUrl"
-	//   "osVersion"
-	//   "pageHostname"
-	//   "pagePath"
-	//   "pageUrl"
-	//   "platform"
-	//   "randomNumber"
-	//   "referrer"
-	//   "resolution"
-	//   "scrollDepthDirection"
-	//   "scrollDepthThreshold"
-	//   "scrollDepthUnits"
-	//   "sdkVersion"
-	//   "videoCurrentTime"
-	//   "videoDuration"
-	//   "videoPercent"
-	//   "videoProvider"
-	//   "videoStatus"
-	//   "videoTitle"
-	//   "videoUrl"
-	//   "videoVisible"
+	//   "BUILT_IN_VARIABLE_TYPE_UNSPECIFIED"
+	//   "PAGE_URL"
+	//   "PAGE_HOSTNAME"
+	//   "PAGE_PATH"
+	//   "REFERRER"
+	//   "EVENT" - For web or mobile.
+	//   "CLICK_ELEMENT"
+	//   "CLICK_CLASSES"
+	//   "CLICK_ID"
+	//   "CLICK_TARGET"
+	//   "CLICK_URL"
+	//   "CLICK_TEXT"
+	//   "FORM_ELEMENT"
+	//   "FORM_CLASSES"
+	//   "FORM_ID"
+	//   "FORM_TARGET"
+	//   "FORM_URL"
+	//   "FORM_TEXT"
+	//   "ERROR_MESSAGE"
+	//   "ERROR_URL"
+	//   "ERROR_LINE"
+	//   "NEW_HISTORY_URL"
+	//   "OLD_HISTORY_URL"
+	//   "NEW_HISTORY_FRAGMENT"
+	//   "OLD_HISTORY_FRAGMENT"
+	//   "NEW_HISTORY_STATE"
+	//   "OLD_HISTORY_STATE"
+	//   "HISTORY_SOURCE"
+	//   "CONTAINER_VERSION" - For web or mobile.
+	//   "DEBUG_MODE"
+	//   "RANDOM_NUMBER" - For web or mobile.
+	//   "CONTAINER_ID" - For web or mobile.
+	//   "APP_ID"
+	//   "APP_NAME"
+	//   "APP_VERSION_CODE"
+	//   "APP_VERSION_NAME"
+	//   "LANGUAGE"
+	//   "OS_VERSION"
+	//   "PLATFORM"
+	//   "SDK_VERSION"
+	//   "DEVICE_NAME"
+	//   "RESOLUTION"
+	//   "ADVERTISER_ID"
+	//   "ADVERTISING_TRACKING_ENABLED"
+	//   "HTML_ID"
+	//   "ENVIRONMENT_NAME"
+	//   "AMP_BROWSER_LANGUAGE"
+	//   "AMP_CANONICAL_PATH"
+	//   "AMP_CANONICAL_URL"
+	//   "AMP_CANONICAL_HOST"
+	//   "AMP_REFERRER"
+	//   "AMP_TITLE"
+	//   "AMP_CLIENT_ID"
+	//   "AMP_CLIENT_TIMEZONE"
+	//   "AMP_CLIENT_TIMESTAMP"
+	//   "AMP_CLIENT_SCREEN_WIDTH"
+	//   "AMP_CLIENT_SCREEN_HEIGHT"
+	//   "AMP_CLIENT_SCROLL_X"
+	//   "AMP_CLIENT_SCROLL_Y"
+	//   "AMP_CLIENT_MAX_SCROLL_X"
+	//   "AMP_CLIENT_MAX_SCROLL_Y"
+	//   "AMP_TOTAL_ENGAGED_TIME"
+	//   "AMP_PAGE_VIEW_ID"
+	//   "AMP_PAGE_LOAD_TIME"
+	//   "AMP_PAGE_DOWNLOAD_TIME"
+	//   "AMP_GTM_EVENT"
+	//   "EVENT_NAME"
+	//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN"
+	//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN_ACLID"
+	//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN_ANID"
+	//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN_CLICK_TIMESTAMP"
+	//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN_CONTENT"
+	//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN_CP1"
+	//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN_GCLID"
+	//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN_SOURCE"
+	//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN_TERM"
+	//   "FIREBASE_EVENT_PARAMETER_CURRENCY"
+	//   "FIREBASE_EVENT_PARAMETER_DYNAMIC_LINK_ACCEPT_TIME"
+	//   "FIREBASE_EVENT_PARAMETER_DYNAMIC_LINK_LINKID"
+	//   "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_DEVICE_TIME"
+	//   "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_ID"
+	//   "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_NAME"
+	//   "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_TIME"
+	//   "FIREBASE_EVENT_PARAMETER_NOTIFICATION_TOPIC"
+	//   "FIREBASE_EVENT_PARAMETER_PREVIOUS_APP_VERSION"
+	//   "FIREBASE_EVENT_PARAMETER_PREVIOUS_OS_VERSION"
+	//   "FIREBASE_EVENT_PARAMETER_PRICE"
+	//   "FIREBASE_EVENT_PARAMETER_PRODUCT_ID"
+	//   "FIREBASE_EVENT_PARAMETER_QUANTITY"
+	//   "FIREBASE_EVENT_PARAMETER_VALUE"
+	//   "VIDEO_PROVIDER"
+	//   "VIDEO_URL"
+	//   "VIDEO_TITLE"
+	//   "VIDEO_DURATION"
+	//   "VIDEO_PERCENT"
+	//   "VIDEO_VISIBLE"
+	//   "VIDEO_STATUS"
+	//   "VIDEO_CURRENT_TIME"
+	//   "SCROLL_DEPTH_THRESHOLD"
+	//   "SCROLL_DEPTH_UNITS"
+	//   "SCROLL_DEPTH_DIRECTION"
+	//   "ELEMENT_VISIBILITY_RATIO"
+	//   "ELEMENT_VISIBILITY_TIME"
+	//   "ELEMENT_VISIBILITY_FIRST_TIME"
+	//   "ELEMENT_VISIBILITY_RECENT_TIME"
 	Type string `json:"type,omitempty"`
 
 	// WorkspaceId: GTM Workspace ID.
@@ -571,33 +589,51 @@
 // Condition: Represents a predicate.
 type Condition struct {
 	// Parameter: A list of named parameters (key/value), depending on the
-	// condition's type. Notes:
-	// - For binary operators, include parameters named arg0 and arg1 for
-	// specifying the left and right operands, respectively.
-	// - At this time, the left operand (arg0) must be a reference to a
-	// variable.
-	// - For case-insensitive Regex matching, include a boolean parameter
-	// named ignore_case that is set to true. If not specified or set to any
-	// other value, the matching will be case sensitive.
-	// - To negate an operator, include a boolean parameter named negate
-	// boolean parameter that is set to true.
+	// condition's type.
+	// Notes:<ul>
+	// <li>For binary operators, include parameters named <code>arg0</code>
+	// and
+	//    <code>arg1</code> for specifying the left and right operands,
+	//    respectively.</li>
+	// <li>At this time, the left operand (<code>arg0</code>) must be a
+	// reference
+	//     to a variable.</li>
+	// <li>For case-insensitive Regex matching, include a boolean parameter
+	// named
+	//     <code>ignore_case</code> that is set to <code>true</code>.
+	//     If not specified or set to any other value, the matching will be
+	// case
+	//     sensitive.</li>
+	// <li>To negate an operator, include a boolean parameter named
+	//     <code>negate</code> boolean parameter that is set to
+	// <code>true</code>.
+	//     </li>
+	// </ul>
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.create
+	// @mutable tagmanager.accounts.containers.workspaces.triggers.update
 	Parameter []*Parameter `json:"parameter,omitempty"`
 
 	// Type: The type of operator for this condition.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.create
+	// @mutable tagmanager.accounts.containers.workspaces.triggers.update
 	//
 	// Possible values:
-	//   "conditionTypeUnspecified"
-	//   "contains"
-	//   "cssSelector"
-	//   "endsWith"
-	//   "equals"
-	//   "greater"
-	//   "greaterOrEquals"
-	//   "less"
-	//   "lessOrEquals"
-	//   "matchRegex"
-	//   "startsWith"
-	//   "urlMatches"
+	//   "CONDITION_TYPE_UNSPECIFIED"
+	//   "EQUALS"
+	//   "CONTAINS"
+	//   "STARTS_WITH"
+	//   "ENDS_WITH"
+	//   "MATCH_REGEX"
+	//   "GREATER"
+	//   "GREATER_OR_EQUALS"
+	//   "LESS"
+	//   "LESS_OR_EQUALS"
+	//   "CSS_SELECTOR"
+	//   "URL_MATCHES" - NOTE(lanzone): When defining a ConditionType here,
+	// don't forget to also
+	// define a matching PredicateType (in condition.proto).
 	Type string `json:"type,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Parameter") to
@@ -624,8 +660,8 @@
 }
 
 // Container: Represents a Google Tag Manager Container, which specifies
-// the platform tags will run on, manages workspaces, and retains
-// container versions.
+// the platform tags
+// will run on, manages workspaces, and retains container versions.
 type Container struct {
 	// AccountId: GTM Account ID.
 	AccountId string `json:"accountId,omitempty"`
@@ -633,18 +669,25 @@
 	// ContainerId: The Container ID uniquely identifies the GTM Container.
 	ContainerId string `json:"containerId,omitempty"`
 
-	// DomainName: List of domain names associated with the Container.
+	// DomainName: List of domain names associated with the
+	// Container.
+	// @mutable tagmanager.accounts.containers.create
+	// @mutable tagmanager.accounts.containers.update
 	DomainName []string `json:"domainName,omitempty"`
 
 	// Fingerprint: The fingerprint of the GTM Container as computed at
-	// storage time. This value is recomputed whenever the account is
-	// modified.
+	// storage time.  This
+	// value is recomputed whenever the account is modified.
 	Fingerprint string `json:"fingerprint,omitempty"`
 
 	// Name: Container display name.
+	// @mutable tagmanager.accounts.containers.create
+	// @mutable tagmanager.accounts.containers.update
 	Name string `json:"name,omitempty"`
 
 	// Notes: Container Notes.
+	// @mutable tagmanager.accounts.containers.create
+	// @mutable tagmanager.accounts.containers.update
 	Notes string `json:"notes,omitempty"`
 
 	// Path: GTM Container's API relative path.
@@ -657,16 +700,19 @@
 	TagManagerUrl string `json:"tagManagerUrl,omitempty"`
 
 	// UsageContext: List of Usage Contexts for the Container. Valid values
-	// include: web, android, or ios.
+	// include: <code>web,
+	// android, or ios</code>.
+	// @mutable tagmanager.accounts.containers.create
+	// @mutable tagmanager.accounts.containers.update
 	//
 	// Possible values:
-	//   "amp"
-	//   "android"
-	//   "androidSdk5"
-	//   "ios"
-	//   "iosSdk5"
-	//   "usageContextUnspecified"
-	//   "web"
+	//   "USAGE_CONTEXT_UNSPECIFIED"
+	//   "WEB"
+	//   "ANDROID"
+	//   "IOS"
+	//   "ANDROID_SDK_5"
+	//   "IOS_SDK_5"
+	//   "AMP"
 	UsageContext []string `json:"usageContext,omitempty"`
 
 	// ServerResponse contains the HTTP response code and headers from the
@@ -700,17 +746,21 @@
 // permissions.
 type ContainerAccess struct {
 	// ContainerId: GTM Container ID.
+	// @mutable tagmanager.accounts.permissions.create
+	// @mutable tagmanager.accounts.permissions.update
 	ContainerId string `json:"containerId,omitempty"`
 
 	// Permission: List of Container permissions.
+	// @mutable tagmanager.accounts.permissions.create
+	// @mutable tagmanager.accounts.permissions.update
 	//
 	// Possible values:
-	//   "approve"
-	//   "containerPermissionUnspecified"
-	//   "edit"
-	//   "noAccess"
-	//   "publish"
-	//   "read"
+	//   "CONTAINER_PERMISSION_UNSPECIFIED"
+	//   "NO_ACCESS"
+	//   "READ"
+	//   "EDIT"
+	//   "APPROVE"
+	//   "PUBLISH"
 	Permission string `json:"permission,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "ContainerId") to
@@ -764,11 +814,14 @@
 	Deleted bool `json:"deleted,omitempty"`
 
 	// Description: Container version description.
+	// @mutable tagmanager.accounts.containers.versions.update
 	Description string `json:"description,omitempty"`
 
 	// Fingerprint: The fingerprint of the GTM Container Version as computed
-	// at storage time. This value is recomputed whenever the container
-	// version is modified.
+	// at
+	// storage time. This value is recomputed whenever the container version
+	// is
+	// modified.
 	Fingerprint string `json:"fingerprint,omitempty"`
 
 	// Folder: The folders in the container that this version was taken
@@ -776,6 +829,7 @@
 	Folder []*Folder `json:"folder,omitempty"`
 
 	// Name: Container version display name.
+	// @mutable tagmanager.accounts.containers.versions.update
 	Name string `json:"name,omitempty"`
 
 	// Path: GTM ContainerVersions's API relative path.
@@ -970,12 +1024,15 @@
 	ContainerVersion *ContainerVersion `json:"containerVersion,omitempty"`
 
 	// NewWorkspacePath: Auto generated workspace path created as a result
-	// of version creation. This field should only be populated if the
-	// created version was not a quick preview.
+	// of version creation. This
+	// field should only be populated if the created version was not a
+	// quick
+	// preview.
 	NewWorkspacePath string `json:"newWorkspacePath,omitempty"`
 
 	// SyncStatus: Whether version creation failed when syncing the
-	// workspace to the latest container version.
+	// workspace to the latest
+	// container version.
 	SyncStatus *SyncStatus `json:"syncStatus,omitempty"`
 
 	// ServerResponse contains the HTTP response code and headers from the
@@ -1015,8 +1072,8 @@
 	ContainerId string `json:"containerId,omitempty"`
 
 	// Fingerprint: The fingerprint of the GTM Custom Template as computed
-	// at storage time. This value is recomputed whenever the template is
-	// modified.
+	// at storage time.
+	// This value is recomputed whenever the template is modified.
 	Fingerprint string `json:"fingerprint,omitempty"`
 
 	// Name: Custom Template display name.
@@ -1066,17 +1123,18 @@
 }
 
 // Entity: A workspace entity that may represent a tag, trigger,
-// variable, or folder in addition to its status in the workspace.
+// variable, or folder in
+// addition to its status in the workspace.
 type Entity struct {
 	// ChangeStatus: Represents how the entity has been changed in the
 	// workspace.
 	//
 	// Possible values:
-	//   "added"
-	//   "changeStatusUnspecified"
-	//   "deleted"
-	//   "none"
-	//   "updated"
+	//   "CHANGE_STATUS_UNSPECIFIED"
+	//   "NONE" - The entity has never been changed.
+	//   "ADDED" - The entity is added to the workspace.
+	//   "DELETED" - The entity is deleted from the workspace.
+	//   "UPDATED" - The entity has been updated in the workspace.
 	ChangeStatus string `json:"changeStatus,omitempty"`
 
 	// Folder: The Folder being represented by the entity.
@@ -1115,9 +1173,10 @@
 }
 
 // Environment: Represents a Google Tag Manager Environment. Note that a
-// user can create, delete and update environments of type USER, but can
-// only update the enable_debug and url fields of environments of other
-// types.
+// user can create,
+// delete and update environments of type USER, but can only update
+// the
+// enable_debug and url fields of environments of other types.
 type Environment struct {
 	// AccountId: GTM Account ID.
 	AccountId string `json:"accountId,omitempty"`
@@ -1127,7 +1186,7 @@
 
 	// AuthorizationTimestamp: The last update time-stamp for the
 	// authorization code.
-	AuthorizationTimestamp *Timestamp `json:"authorizationTimestamp,omitempty"`
+	AuthorizationTimestamp string `json:"authorizationTimestamp,omitempty"`
 
 	// ContainerId: GTM Container ID.
 	ContainerId string `json:"containerId,omitempty"`
@@ -1136,11 +1195,16 @@
 	ContainerVersionId string `json:"containerVersionId,omitempty"`
 
 	// Description: The environment description. Can be set or changed only
-	// on USER type environments.
+	// on USER type
+	// environments.
+	// @mutable tagmanager.accounts.containers.environments.create
+	// @mutable tagmanager.accounts.containers.environments.update
 	Description string `json:"description,omitempty"`
 
 	// EnableDebug: Whether or not to enable debug by default for the
 	// environment.
+	// @mutable tagmanager.accounts.containers.environments.create
+	// @mutable tagmanager.accounts.containers.environments.update
 	EnableDebug bool `json:"enableDebug,omitempty"`
 
 	// EnvironmentId: GTM Environment ID uniquely identifies the GTM
@@ -1148,12 +1212,15 @@
 	EnvironmentId string `json:"environmentId,omitempty"`
 
 	// Fingerprint: The fingerprint of the GTM environment as computed at
-	// storage time. This value is recomputed whenever the environment is
-	// modified.
+	// storage time.
+	// This value is recomputed whenever the environment is modified.
 	Fingerprint string `json:"fingerprint,omitempty"`
 
 	// Name: The environment display name. Can be set or changed only on
-	// USER type environments.
+	// USER type
+	// environments.
+	// @mutable tagmanager.accounts.containers.environments.create
+	// @mutable tagmanager.accounts.containers.environments.update
 	Name string `json:"name,omitempty"`
 
 	// Path: GTM Environment's API relative path.
@@ -1165,13 +1232,17 @@
 	// Type: The type of this environment.
 	//
 	// Possible values:
-	//   "latest"
-	//   "live"
-	//   "user"
-	//   "workspace"
+	//   "USER" - Points to a user defined environment.
+	//   "LIVE" - Points to the current live container version.
+	//   "LATEST" - Points to the latest container version.
+	//   "WORKSPACE" - Automatically managed environment that points to a
+	// workspace preview or
+	// version created by a workspace.
 	Type string `json:"type,omitempty"`
 
 	// Url: Default preview page url for the environment.
+	// @mutable tagmanager.accounts.containers.environments.create
+	// @mutable tagmanager.accounts.containers.environments.update
 	Url string `json:"url,omitempty"`
 
 	// WorkspaceId: Represents a link to a quick preview of a workspace.
@@ -1213,16 +1284,24 @@
 	ContainerId string `json:"containerId,omitempty"`
 
 	// Fingerprint: The fingerprint of the GTM Folder as computed at storage
-	// time. This value is recomputed whenever the folder is modified.
+	// time.
+	// This value is recomputed whenever the folder is modified.
 	Fingerprint string `json:"fingerprint,omitempty"`
 
 	// FolderId: The Folder ID uniquely identifies the GTM Folder.
 	FolderId string `json:"folderId,omitempty"`
 
 	// Name: Folder display name.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.folders.create
+	// @mutable tagmanager.accounts.containers.workspaces.folders.update
 	Name string `json:"name,omitempty"`
 
-	// Notes: User notes on how to apply this folder in the container.
+	// Notes: User notes on how to apply this folder in the
+	// container.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.folders.create
+	// @mutable tagmanager.accounts.containers.workspaces.folders.update
 	Notes string `json:"notes,omitempty"`
 
 	// Path: GTM Folder's API relative path.
@@ -1304,7 +1383,8 @@
 }
 
 // GetWorkspaceStatusResponse: The changes that have occurred in the
-// workspace since the base container version.
+// workspace since the base container
+// version.
 type GetWorkspaceStatusResponse struct {
 	// MergeConflict: The merge conflict after sync.
 	MergeConflict []*MergeConflict `json:"mergeConflict,omitempty"`
@@ -1813,14 +1893,17 @@
 // MergeConflict: Represents a merge conflict.
 type MergeConflict struct {
 	// EntityInBaseVersion: The base version entity (since the latest sync
-	// operation) that has conflicting changes compared to the workspace. If
-	// this field is missing, it means the workspace entity is deleted from
-	// the base version.
+	// operation) that has
+	// conflicting changes compared to the workspace. If this field is
+	// missing,
+	// it means the workspace entity is deleted from the base version.
 	EntityInBaseVersion *Entity `json:"entityInBaseVersion,omitempty"`
 
 	// EntityInWorkspace: The workspace entity that has conflicting changes
-	// compared to the base version. If an entity is deleted in a workspace,
-	// it will still appear with a deleted change status.
+	// compared to the
+	// base version. If an entity is deleted in a workspace, it will
+	// still
+	// appear with a deleted change status.
 	EntityInWorkspace *Entity `json:"entityInWorkspace,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "EntityInBaseVersion")
@@ -1849,42 +1932,109 @@
 
 // Parameter: Represents a Google Tag Manager Parameter.
 type Parameter struct {
-	// Key: The named key that uniquely identifies a parameter. Required for
-	// top-level parameters, as well as map values. Ignored for list values.
+	// Key: The named key that uniquely identifies a parameter.  Required
+	// for top-level
+	// parameters, as well as map values.  Ignored for list values.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.variables.create
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.variables.update
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.create
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.update
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.tags.create
+	// @mutable tagmanager.accounts.containers.workspaces.tags.update
 	Key string `json:"key,omitempty"`
 
-	// List: This list parameter's parameters (keys will be ignored).
+	// List: This list parameter's parameters (keys will be
+	// ignored).
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.variables.create
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.variables.update
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.create
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.update
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.tags.create
+	// @mutable tagmanager.accounts.containers.workspaces.tags.update
 	List []*Parameter `json:"list,omitempty"`
 
 	// Map: This map parameter's parameters (must have keys; keys must be
 	// unique).
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.variables.create
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.variables.update
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.create
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.update
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.tags.create
+	// @mutable tagmanager.accounts.containers.workspaces.tags.update
 	Map []*Parameter `json:"map,omitempty"`
 
-	// Type: The parameter type. Valid values are:
-	// - boolean: The value represents a boolean, represented as 'true' or
-	// 'false'
-	// - integer: The value represents a 64-bit signed integer value, in
-	// base 10
-	// - list: A list of parameters should be specified
-	// - map: A map of parameters should be specified
-	// - template: The value represents any text; this can include variable
-	// references (even variable references that might return non-string
-	// types)
-	// - trigger_reference: The value represents a trigger, represented as
-	// the trigger id
+	// Type: The parameter type.  Valid values
+	// are:<ul>
+	// <li><code>boolean</code>: The value represents a boolean, represented
+	// as
+	//     'true' or 'false'</li>
+	// <li><code>integer</code>: The value represents a 64-bit signed
+	// integer
+	//     value, in base 10</li>
+	// <li><code>list</code>: A list of parameters should be
+	// specified</li>
+	// <li><code>map</code>: A map of parameters should be
+	// specified</li>
+	// <li><code>template</code>: The value represents any text; this can
+	// include
+	//     variable references (even variable references that might return
+	//     non-string types)</li>
+	// <li><code>trigger_reference</code>: The value represents a trigger,
+	//     represented as the trigger id</li>
+	// </ul>
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.variables.create
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.variables.update
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.create
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.update
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.tags.create
+	// @mutable tagmanager.accounts.containers.workspaces.tags.update
 	//
 	// Possible values:
-	//   "boolean"
-	//   "integer"
-	//   "list"
-	//   "map"
-	//   "template"
-	//   "triggerReference"
-	//   "typeUnspecified"
+	//   "TYPE_UNSPECIFIED"
+	//   "TEMPLATE" - May include variable references (such as
+	// "{{myVariable}}").
+	//   "INTEGER"
+	//   "BOOLEAN"
+	//   "LIST"
+	//   "MAP"
+	//   "TRIGGER_REFERENCE"
 	Type string `json:"type,omitempty"`
 
-	// Value: A parameter's value (may contain variable references such as
-	// "{{myVariable}}") as appropriate to the specified type.
+	// Value: A parameter's value (may contain variable references such
+	// as
+	// "{{myVariable}}")
+	// as appropriate to the specified type.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.variables.create
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.variables.update
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.create
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.update
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.tags.create
+	// @mutable tagmanager.accounts.containers.workspaces.tags.update
 	Value string `json:"value,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Key") to
@@ -1954,7 +2104,8 @@
 	ContainerVersion *ContainerVersion `json:"containerVersion,omitempty"`
 
 	// SyncStatus: Whether quick previewing failed when syncing the
-	// workspace to the latest container version.
+	// workspace to the latest
+	// container version.
 	SyncStatus *SyncStatus `json:"syncStatus,omitempty"`
 
 	// ServerResponse contains the HTTP response code and headers from the
@@ -2021,9 +2172,10 @@
 // workspace.
 type RevertFolderResponse struct {
 	// Folder: Folder as it appears in the latest container version since
-	// the last workspace synchronization operation. If no folder is
-	// present, that means the folder was deleted in the latest container
-	// version.
+	// the last
+	// workspace synchronization operation. If no folder is present, that
+	// means
+	// the folder was deleted in the latest container version.
 	Folder *Folder `json:"folder,omitempty"`
 
 	// ServerResponse contains the HTTP response code and headers from the
@@ -2055,8 +2207,10 @@
 
 // RevertTagResponse: The result of reverting a tag in a workspace.
 type RevertTagResponse struct {
-	// Tag: Tag as it appears in the latest container version since the last
-	// workspace synchronization operation. If no tag is present, that means
+	// Tag: Tag as it appears in the latest container version since the
+	// last
+	// workspace synchronization operation. If no tag is present, that
+	// means
 	// the tag was deleted in the latest container version.
 	Tag *Tag `json:"tag,omitempty"`
 
@@ -2091,9 +2245,10 @@
 // workspace.
 type RevertTemplateResponse struct {
 	// Template: Template as it appears in the latest container version
-	// since the last workspace synchronization operation. If no template is
-	// present, that means the template was deleted in the latest container
-	// version.
+	// since the last
+	// workspace synchronization operation. If no template is present, that
+	// means
+	// the template was deleted in the latest container version.
 	Template *CustomTemplate `json:"template,omitempty"`
 
 	// ServerResponse contains the HTTP response code and headers from the
@@ -2127,9 +2282,10 @@
 // workspace.
 type RevertTriggerResponse struct {
 	// Trigger: Trigger as it appears in the latest container version since
-	// the last workspace synchronization operation. If no trigger is
-	// present, that means the trigger was deleted in the latest container
-	// version.
+	// the last
+	// workspace synchronization operation. If no trigger is present, that
+	// means
+	// the trigger was deleted in the latest container version.
 	Trigger *Trigger `json:"trigger,omitempty"`
 
 	// ServerResponse contains the HTTP response code and headers from the
@@ -2163,9 +2319,10 @@
 // workspace.
 type RevertVariableResponse struct {
 	// Variable: Variable as it appears in the latest container version
-	// since the last workspace synchronization operation. If no variable is
-	// present, that means the variable was deleted in the latest container
-	// version.
+	// since the last
+	// workspace synchronization operation. If no variable is present, that
+	// means
+	// the variable was deleted in the latest container version.
 	Variable *Variable `json:"variable,omitempty"`
 
 	// ServerResponse contains the HTTP response code and headers from the
@@ -2198,8 +2355,10 @@
 // RevertZoneResponse: The result of reverting a zone in a workspace.
 type RevertZoneResponse struct {
 	// Zone: Zone as it appears in the latest container version since the
-	// last workspace synchronization operation. If no zone is present, that
-	// means the zone was deleted in the latest container version.
+	// last
+	// workspace synchronization operation. If no zone is present, that
+	// means
+	// the zone was deleted in the latest container version.
 	Zone *Zone `json:"zone,omitempty"`
 
 	// ServerResponse contains the HTTP response code and headers from the
@@ -2230,11 +2389,13 @@
 }
 
 // SetupTag: Represents a reference to atag that fires before another
-// tag in order to set up dependencies.
+// tag in order to
+// set up dependencies.
 type SetupTag struct {
 	// StopOnSetupFailure: If true, fire the main tag if and only if the
-	// setup tag fires successfully. If false, fire the main tag regardless
-	// of setup tag firing status.
+	// setup tag fires
+	// successfully.
+	// If false, fire the main tag regardless of setup tag firing status.
 	StopOnSetupFailure bool `json:"stopOnSetupFailure,omitempty"`
 
 	// TagName: The name of the setup tag.
@@ -2298,9 +2459,10 @@
 // SyncWorkspaceResponse: A response after synchronizing the workspace
 // to the latest container version.
 type SyncWorkspaceResponse struct {
-	// MergeConflict: The merge conflict after sync. If this field is not
-	// empty, the sync is still treated as successful. But a version cannot
-	// be created until all conflicts are resolved.
+	// MergeConflict: The merge conflict after sync.
+	// If this field is not empty, the sync is still treated as
+	// successful.
+	// But a version cannot be created until all conflicts are resolved.
 	MergeConflict []*MergeConflict `json:"mergeConflict,omitempty"`
 
 	// SyncStatus: Indicates whether synchronization caused a merge conflict
@@ -2340,41 +2502,72 @@
 	AccountId string `json:"accountId,omitempty"`
 
 	// BlockingRuleId: Blocking rule IDs. If any of the listed rules
-	// evaluate to true, the tag will not fire.
+	// evaluate to true, the tag
+	//     will not fire.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.tags.create
+	// @mutable tagmanager.accounts.containers.workspaces.tags.update
 	BlockingRuleId []string `json:"blockingRuleId,omitempty"`
 
 	// BlockingTriggerId: Blocking trigger IDs. If any of the listed
-	// triggers evaluate to true, the tag will not fire.
+	// triggers evaluate to true, the
+	// tag will not fire.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.tags.create
+	// @mutable tagmanager.accounts.containers.workspaces.tags.update
 	BlockingTriggerId []string `json:"blockingTriggerId,omitempty"`
 
 	// ContainerId: GTM Container ID.
 	ContainerId string `json:"containerId,omitempty"`
 
 	// Fingerprint: The fingerprint of the GTM Tag as computed at storage
-	// time. This value is recomputed whenever the tag is modified.
+	// time.
+	// This value is recomputed whenever the tag is modified.
 	Fingerprint string `json:"fingerprint,omitempty"`
 
 	// FiringRuleId: Firing rule IDs. A tag will fire when any of the listed
-	// rules are true and all of its blockingRuleIds (if any specified) are
+	// rules are true and
+	//     all of its <code>blockingRuleIds</code> (if any specified) are
 	// false.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.tags.create
+	// @mutable tagmanager.accounts.containers.workspaces.tags.update
 	FiringRuleId []string `json:"firingRuleId,omitempty"`
 
 	// FiringTriggerId: Firing trigger IDs. A tag will fire when any of the
-	// listed triggers are true and all of its blockingTriggerIds (if any
-	// specified) are false.
+	// listed triggers are
+	// true and all of its <code>blockingTriggerIds</code> (if any
+	// specified) are
+	// false.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.tags.create
+	// @mutable tagmanager.accounts.containers.workspaces.tags.update
 	FiringTriggerId []string `json:"firingTriggerId,omitempty"`
 
 	// LiveOnly: If set to true, this tag will only fire in the live
-	// environment (e.g. not in preview or debug mode).
+	// environment (e.g. not
+	// in preview or debug mode).
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.tags.create
+	// @mutable tagmanager.accounts.containers.workspaces.tags.update
 	LiveOnly bool `json:"liveOnly,omitempty"`
 
 	// Name: Tag display name.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.tags.create
+	// @mutable tagmanager.accounts.containers.workspaces.tags.update
 	Name string `json:"name,omitempty"`
 
 	// Notes: User notes on how to apply this tag in the container.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.tags.create
+	// @mutable tagmanager.accounts.containers.workspaces.tags.update
 	Notes string `json:"notes,omitempty"`
 
 	// Parameter: The tag's parameters.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.tags.create
+	// @mutable tagmanager.accounts.containers.workspaces.tags.update
 	Parameter []*Parameter `json:"parameter,omitempty"`
 
 	// ParentFolderId: Parent folder id.
@@ -2385,19 +2578,34 @@
 
 	// Paused: Indicates whether the tag is paused, which prevents the tag
 	// from firing.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.tags.create
+	// @mutable tagmanager.accounts.containers.workspaces.tags.update
 	Paused bool `json:"paused,omitempty"`
 
 	// Priority: User defined numeric priority of the tag. Tags are fired
-	// asynchronously in order of priority. Tags with higher numeric value
-	// fire first. A tag's priority can be a positive or negative value. The
-	// default value is 0.
+	// asynchronously in
+	// order of priority. Tags with higher numeric value fire first. A
+	// tag's
+	// priority can be a positive or negative value. The default value is
+	// 0.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.tags.create
+	// @mutable tagmanager.accounts.containers.workspaces.tags.update
 	Priority *Parameter `json:"priority,omitempty"`
 
-	// ScheduleEndMs: The end timestamp in milliseconds to schedule a tag.
+	// ScheduleEndMs: The end timestamp in milliseconds to schedule a
+	// tag.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.tags.create
+	// @mutable tagmanager.accounts.containers.workspaces.tags.update
 	ScheduleEndMs int64 `json:"scheduleEndMs,omitempty,string"`
 
 	// ScheduleStartMs: The start timestamp in milliseconds to schedule a
 	// tag.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.tags.create
+	// @mutable tagmanager.accounts.containers.workspaces.tags.update
 	ScheduleStartMs int64 `json:"scheduleStartMs,omitempty,string"`
 
 	// SetupTag: The list of setup tags. Currently we only allow one.
@@ -2406,10 +2614,13 @@
 	// TagFiringOption: Option to fire this tag.
 	//
 	// Possible values:
-	//   "oncePerEvent"
-	//   "oncePerLoad"
-	//   "tagFiringOptionUnspecified"
-	//   "unlimited"
+	//   "TAG_FIRING_OPTION_UNSPECIFIED"
+	//   "UNLIMITED" - Tag can be fired multiple times per event.
+	//   "ONCE_PER_EVENT" - Tag can only be fired per event but can be fired
+	// multiple times per load
+	// (e.g., app load or page load).
+	//   "ONCE_PER_LOAD" - Tag can only be fired per load (e.g., app load or
+	// page load).
 	TagFiringOption string `json:"tagFiringOption,omitempty"`
 
 	// TagId: The Tag ID uniquely identifies the GTM Tag.
@@ -2422,6 +2633,9 @@
 	TeardownTag []*TeardownTag `json:"teardownTag,omitempty"`
 
 	// Type: GTM Tag Type.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.tags.create
+	// @mutable tagmanager.accounts.containers.workspaces.tags.update
 	Type string `json:"type,omitempty"`
 
 	// WorkspaceId: GTM Workspace ID.
@@ -2455,11 +2669,13 @@
 }
 
 // TeardownTag: Represents a tag that fires after another tag in order
-// to tear down dependencies.
+// to tear down
+// dependencies.
 type TeardownTag struct {
 	// StopTeardownOnFailure: If true, fire the teardown tag if and only if
-	// the main tag fires successfully. If false, fire the teardown tag
-	// regardless of main tag firing status.
+	// the main tag fires
+	// successfully.
+	// If false, fire the teardown tag regardless of main tag firing status.
 	StopTeardownOnFailure bool `json:"stopTeardownOnFailure,omitempty"`
 
 	// TagName: The name of the teardown tag.
@@ -2490,194 +2706,127 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
-// Timestamp: A Timestamp represents a point in time independent of any
-// time zone or local calendar, encoded as a count of seconds and
-// fractions of seconds at nanosecond resolution. The count is relative
-// to an epoch at UTC midnight on January 1, 1970, in the proleptic
-// Gregorian calendar which extends the Gregorian calendar backwards to
-// year one.
-//
-// All minutes are 60 seconds long. Leap seconds are "smeared" so that
-// no leap second table is needed for interpretation, using a [24-hour
-// linear smear](https://developers.google.com/time/smear).
-//
-// The range is from 0001-01-01T00:00:00Z to
-// 9999-12-31T23:59:59.999999999Z. By restricting to that range, we
-// ensure that we can convert to and from [RFC
-// 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.
-//
-// # Examples
-//
-// Example 1: Compute Timestamp from POSIX `time()`.
-//
-// Timestamp timestamp; timestamp.set_seconds(time(NULL));
-// timestamp.set_nanos(0);
-//
-// Example 2: Compute Timestamp from POSIX `gettimeofday()`.
-//
-// struct timeval tv; gettimeofday(&tv, NULL);
-//
-// Timestamp timestamp; timestamp.set_seconds(tv.tv_sec);
-// timestamp.set_nanos(tv.tv_usec * 1000);
-//
-// Example 3: Compute Timestamp from Win32
-// `GetSystemTimeAsFileTime()`.
-//
-// FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks =
-// (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
-//
-// // A Windows tick is 100 nanoseconds. Windows epoch
-// 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch
-// 1970-01-01T00:00:00Z. Timestamp timestamp;
-// timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));
-// timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
-//
-// Example 4: Compute Timestamp from Java
-// `System.currentTimeMillis()`.
-//
-// long millis = System.currentTimeMillis();
-//
-// Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis /
-// 1000) .setNanos((int) ((millis % 1000) *
-// 1000000)).build();
-//
-//
-//
-// Example 5: Compute Timestamp from current time in Python.
-//
-// timestamp = Timestamp() timestamp.GetCurrentTime()
-//
-// # JSON Mapping
-//
-// In JSON format, the Timestamp type is encoded as a string in the [RFC
-// 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the
-// format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z"
-// where {year} is always expressed using four digits while {month},
-// {day}, {hour}, {min}, and {sec} are zero-padded to two digits each.
-// The fractional seconds, which can go up to 9 digits (i.e. up to 1
-// nanosecond resolution), are optional. The "Z" suffix indicates the
-// timezone ("UTC"); the timezone is required. A proto3 JSON serializer
-// should always use UTC (as indicated by "Z") when printing the
-// Timestamp type and a proto3 JSON parser should be able to accept both
-// UTC and other timezones (as indicated by an offset).
-//
-// For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past
-// 01:30 UTC on January 15, 2017.
-//
-// In JavaScript, one can convert a Date object to this format using the
-// standard
-// [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScrip
-// t/Reference/Global_Objects/Date/toISOString) method. In Python, a
-// standard `datetime.datetime` object can be converted to this format
-// using
-// [`strftime`](https://docs.python.org/2/library/time.html#time.strftime
-// ) with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in
-// Java, one can use the Joda Time's [`ISODateTimeFormat.dateTime()`](
-// http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime%2D%2D ) to obtain a formatter capable of generating timestamps in this
-// format.
-type Timestamp struct {
-	// Nanos: Non-negative fractions of a second at nanosecond resolution.
-	// Negative second values with fractions must still have non-negative
-	// nanos values that count forward in time. Must be from 0 to
-	// 999,999,999 inclusive.
-	Nanos int64 `json:"nanos,omitempty"`
-
-	// Seconds: Represents seconds of UTC time since Unix epoch
-	// 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to
-	// 9999-12-31T23:59:59Z inclusive.
-	Seconds int64 `json:"seconds,omitempty,string"`
-
-	// ForceSendFields is a list of field names (e.g. "Nanos") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "Nanos") to include in API
-	// requests with the JSON null value. By default, fields with empty
-	// values are omitted from API requests. However, any field with an
-	// empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *Timestamp) MarshalJSON() ([]byte, error) {
-	type NoMethod Timestamp
-	raw := NoMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
 // Trigger: Represents a Google Tag Manager Trigger
 type Trigger struct {
 	// AccountId: GTM Account ID.
 	AccountId string `json:"accountId,omitempty"`
 
 	// AutoEventFilter: Used in the case of auto event tracking.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.create
+	// @mutable tagmanager.accounts.containers.workspaces.triggers.update
 	AutoEventFilter []*Condition `json:"autoEventFilter,omitempty"`
 
 	// CheckValidation: Whether or not we should only fire tags if the form
-	// submit or link click event is not cancelled by some other event
-	// handler (e.g. because of validation). Only valid for Form Submission
-	// and Link Click triggers.
+	// submit or link click
+	// event is not cancelled by some other event handler (e.g. because
+	// of
+	// validation). Only valid for Form Submission and Link Click
+	// triggers.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.create
+	// @mutable tagmanager.accounts.containers.workspaces.triggers.update
 	CheckValidation *Parameter `json:"checkValidation,omitempty"`
 
 	// ContainerId: GTM Container ID.
 	ContainerId string `json:"containerId,omitempty"`
 
 	// ContinuousTimeMinMilliseconds: A visibility trigger minimum
-	// continuous visible time (in milliseconds). Only valid for AMP
-	// Visibility trigger.
+	// continuous visible time (in milliseconds).
+	// Only valid for AMP Visibility trigger.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.create
+	// @mutable tagmanager.accounts.containers.workspaces.triggers.update
 	ContinuousTimeMinMilliseconds *Parameter `json:"continuousTimeMinMilliseconds,omitempty"`
 
 	// CustomEventFilter: Used in the case of custom event, which is fired
-	// iff all Conditions are true.
+	// iff all Conditions are
+	// true.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.create
+	// @mutable tagmanager.accounts.containers.workspaces.triggers.update
 	CustomEventFilter []*Condition `json:"customEventFilter,omitempty"`
 
 	// EventName: Name of the GTM event that is fired. Only valid for Timer
 	// triggers.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.create
+	// @mutable tagmanager.accounts.containers.workspaces.triggers.update
 	EventName *Parameter `json:"eventName,omitempty"`
 
-	// Filter: The trigger will only fire iff all Conditions are true.
+	// Filter: The trigger will only fire iff all Conditions are
+	// true.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.create
+	// @mutable tagmanager.accounts.containers.workspaces.triggers.update
 	Filter []*Condition `json:"filter,omitempty"`
 
 	// Fingerprint: The fingerprint of the GTM Trigger as computed at
-	// storage time. This value is recomputed whenever the trigger is
-	// modified.
+	// storage time.
+	// This value is recomputed whenever the trigger is modified.
 	Fingerprint string `json:"fingerprint,omitempty"`
 
 	// HorizontalScrollPercentageList: List of integer percentage values for
-	// scroll triggers. The trigger will fire when each percentage is
-	// reached when the view is scrolled horizontally. Only valid for AMP
-	// scroll triggers.
+	// scroll triggers. The trigger will
+	// fire when each percentage is reached when the view is
+	// scrolled
+	// horizontally. Only valid for AMP scroll triggers.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.create
+	// @mutable tagmanager.accounts.containers.workspaces.triggers.update
 	HorizontalScrollPercentageList *Parameter `json:"horizontalScrollPercentageList,omitempty"`
 
 	// Interval: Time between triggering recurring Timer Events (in
-	// milliseconds). Only valid for Timer triggers.
+	// milliseconds). Only
+	// valid for Timer triggers.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.create
+	// @mutable tagmanager.accounts.containers.workspaces.triggers.update
 	Interval *Parameter `json:"interval,omitempty"`
 
 	// IntervalSeconds: Time between Timer Events to fire (in seconds). Only
-	// valid for AMP Timer trigger.
+	// valid for AMP Timer
+	// trigger.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.create
+	// @mutable tagmanager.accounts.containers.workspaces.triggers.update
 	IntervalSeconds *Parameter `json:"intervalSeconds,omitempty"`
 
 	// Limit: Limit of the number of GTM events this Timer Trigger will
-	// fire. If no limit is set, we will continue to fire GTM events until
-	// the user leaves the page. Only valid for Timer triggers.
+	// fire. If no limit
+	// is set, we will continue to fire GTM events until the user leaves the
+	// page.
+	// Only valid for Timer triggers.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.create
+	// @mutable tagmanager.accounts.containers.workspaces.triggers.update
 	Limit *Parameter `json:"limit,omitempty"`
 
 	// MaxTimerLengthSeconds: Max time to fire Timer Events (in seconds).
-	// Only valid for AMP Timer trigger.
+	// Only valid for AMP Timer
+	// trigger.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.create
+	// @mutable tagmanager.accounts.containers.workspaces.triggers.update
 	MaxTimerLengthSeconds *Parameter `json:"maxTimerLengthSeconds,omitempty"`
 
 	// Name: Trigger display name.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.create
+	// @mutable tagmanager.accounts.containers.workspaces.triggers.update
 	Name string `json:"name,omitempty"`
 
-	// Notes: User notes on how to apply this trigger in the container.
+	// Notes: User notes on how to apply this trigger in the
+	// container.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.create
+	// @mutable tagmanager.accounts.containers.workspaces.triggers.update
 	Notes string `json:"notes,omitempty"`
 
 	// Parameter: Additional parameters.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.create
+	// @mutable tagmanager.accounts.containers.workspaces.triggers.update
 	Parameter []*Parameter `json:"parameter,omitempty"`
 
 	// ParentFolderId: Parent folder id.
@@ -2687,91 +2836,135 @@
 	Path string `json:"path,omitempty"`
 
 	// Selector: A click trigger CSS selector (i.e. "a", "button" etc.).
-	// Only valid for AMP Click trigger.
+	// Only valid for AMP
+	// Click trigger.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.create
+	// @mutable tagmanager.accounts.containers.workspaces.triggers.update
 	Selector *Parameter `json:"selector,omitempty"`
 
 	// TagManagerUrl: Auto generated link to the tag manager UI
 	TagManagerUrl string `json:"tagManagerUrl,omitempty"`
 
 	// TotalTimeMinMilliseconds: A visibility trigger minimum total visible
-	// time (in milliseconds). Only valid for AMP Visibility trigger.
+	// time (in milliseconds).
+	// Only valid for AMP Visibility trigger.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.create
+	// @mutable tagmanager.accounts.containers.workspaces.triggers.update
 	TotalTimeMinMilliseconds *Parameter `json:"totalTimeMinMilliseconds,omitempty"`
 
 	// TriggerId: The Trigger ID uniquely identifies the GTM Trigger.
 	TriggerId string `json:"triggerId,omitempty"`
 
 	// Type: Defines the data layer event that causes this trigger.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.create
+	// @mutable tagmanager.accounts.containers.workspaces.triggers.update
 	//
 	// Possible values:
-	//   "always"
-	//   "ampClick"
-	//   "ampScroll"
-	//   "ampTimer"
-	//   "ampVisibility"
-	//   "click"
-	//   "customEvent"
-	//   "domReady"
-	//   "elementVisibility"
-	//   "eventTypeUnspecified"
-	//   "firebaseAppException"
-	//   "firebaseAppUpdate"
-	//   "firebaseCampaign"
-	//   "firebaseFirstOpen"
-	//   "firebaseInAppPurchase"
-	//   "firebaseNotificationDismiss"
-	//   "firebaseNotificationForeground"
-	//   "firebaseNotificationOpen"
-	//   "firebaseNotificationReceive"
-	//   "firebaseOsUpdate"
-	//   "firebaseSessionStart"
-	//   "firebaseUserEngagement"
-	//   "formSubmission"
-	//   "historyChange"
-	//   "jsError"
-	//   "linkClick"
-	//   "pageview"
-	//   "scrollDepth"
-	//   "timer"
-	//   "triggerGroup"
-	//   "windowLoaded"
-	//   "youTubeVideo"
+	//   "EVENT_TYPE_UNSPECIFIED"
+	//   "PAGEVIEW"
+	//   "DOM_READY"
+	//   "WINDOW_LOADED"
+	//   "CUSTOM_EVENT"
+	//   "TRIGGER_GROUP"
+	//   "ALWAYS"
+	//   "FIREBASE_APP_EXCEPTION"
+	//   "FIREBASE_APP_UPDATE"
+	//   "FIREBASE_CAMPAIGN"
+	//   "FIREBASE_FIRST_OPEN"
+	//   "FIREBASE_IN_APP_PURCHASE"
+	//   "FIREBASE_NOTIFICATION_DISMISS"
+	//   "FIREBASE_NOTIFICATION_FOREGROUND"
+	//   "FIREBASE_NOTIFICATION_OPEN"
+	//   "FIREBASE_NOTIFICATION_RECEIVE"
+	//   "FIREBASE_OS_UPDATE"
+	//   "FIREBASE_SESSION_START"
+	//   "FIREBASE_USER_ENGAGEMENT"
+	//   "FORM_SUBMISSION"
+	//   "CLICK"
+	//   "LINK_CLICK"
+	//   "JS_ERROR"
+	//   "HISTORY_CHANGE"
+	//   "TIMER"
+	//   "AMP_CLICK"
+	//   "AMP_TIMER"
+	//   "AMP_SCROLL"
+	//   "AMP_VISIBILITY"
+	//   "YOU_TUBE_VIDEO"
+	//   "SCROLL_DEPTH"
+	//   "ELEMENT_VISIBILITY"
 	Type string `json:"type,omitempty"`
 
 	// UniqueTriggerId: Globally unique id of the trigger that
-	// auto-generates this (a Form Submit, Link Click or Timer listener) if
-	// any. Used to make incompatible auto-events work together with trigger
-	// filtering based on trigger ids. This value is populated during output
-	// generation since the tags implied by triggers don't exist until then.
-	// Only valid for Form Submit, Link Click and Timer triggers.
+	// auto-generates this (a Form Submit,
+	// Link Click or Timer listener) if any. Used to make incompatible
+	// auto-events
+	// work together with trigger filtering based on trigger ids. This value
+	// is
+	// populated during output generation since the tags implied by triggers
+	// don't
+	// exist until then. Only valid for Form Submit, Link Click and
+	// Timer
+	// triggers.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.create
+	// @mutable tagmanager.accounts.containers.workspaces.triggers.update
 	UniqueTriggerId *Parameter `json:"uniqueTriggerId,omitempty"`
 
 	// VerticalScrollPercentageList: List of integer percentage values for
-	// scroll triggers. The trigger will fire when each percentage is
-	// reached when the view is scrolled vertically. Only valid for AMP
-	// scroll triggers.
+	// scroll triggers. The trigger will
+	// fire when each percentage is reached when the view is scrolled
+	// vertically.
+	// Only valid for AMP scroll triggers.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.create
+	// @mutable tagmanager.accounts.containers.workspaces.triggers.update
 	VerticalScrollPercentageList *Parameter `json:"verticalScrollPercentageList,omitempty"`
 
 	// VisibilitySelector: A visibility trigger CSS selector (i.e. "#id").
-	// Only valid for AMP Visibility trigger.
+	// Only valid for AMP
+	// Visibility trigger.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.create
+	// @mutable tagmanager.accounts.containers.workspaces.triggers.update
 	VisibilitySelector *Parameter `json:"visibilitySelector,omitempty"`
 
 	// VisiblePercentageMax: A visibility trigger maximum percent
-	// visibility. Only valid for AMP Visibility trigger.
+	// visibility. Only valid for AMP
+	// Visibility trigger.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.create
+	// @mutable tagmanager.accounts.containers.workspaces.triggers.update
 	VisiblePercentageMax *Parameter `json:"visiblePercentageMax,omitempty"`
 
 	// VisiblePercentageMin: A visibility trigger minimum percent
-	// visibility. Only valid for AMP Visibility trigger.
+	// visibility. Only valid for AMP
+	// Visibility trigger.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.create
+	// @mutable tagmanager.accounts.containers.workspaces.triggers.update
 	VisiblePercentageMin *Parameter `json:"visiblePercentageMin,omitempty"`
 
 	// WaitForTags: Whether or not we should delay the form submissions or
-	// link opening until all of the tags have fired (by preventing the
-	// default action and later simulating the default action). Only valid
-	// for Form Submission and Link Click triggers.
+	// link opening
+	// until all of the tags have fired (by preventing the default
+	// action and later simulating the default action). Only valid for
+	// Form Submission and Link Click triggers.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.create
+	// @mutable tagmanager.accounts.containers.workspaces.triggers.update
 	WaitForTags *Parameter `json:"waitForTags,omitempty"`
 
 	// WaitForTagsTimeout: How long to wait (in milliseconds) for tags to
-	// fire when 'waits_for_tags' above evaluates to true. Only valid for
-	// Form Submission and Link Click triggers.
+	// fire when 'waits_for_tags'
+	// above evaluates to <code>true</code>.  Only valid for Form Submission
+	// and
+	// Link Click triggers.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.triggers.create
+	// @mutable tagmanager.accounts.containers.workspaces.triggers.update
 	WaitForTagsTimeout *Parameter `json:"waitForTagsTimeout,omitempty"`
 
 	// WorkspaceId: GTM Workspace ID.
@@ -2808,15 +3001,20 @@
 // container.
 type UserPermission struct {
 	// AccountAccess: GTM Account access permissions.
+	// @mutable tagmanager.accounts.permissions.create
+	// @mutable tagmanager.accounts.permissions.update
 	AccountAccess *AccountAccess `json:"accountAccess,omitempty"`
 
 	// AccountId: The Account ID uniquely identifies the GTM Account.
 	AccountId string `json:"accountId,omitempty"`
 
 	// ContainerAccess: GTM Container access permissions.
+	// @mutable tagmanager.accounts.permissions.create
+	// @mutable tagmanager.accounts.permissions.update
 	ContainerAccess []*ContainerAccess `json:"containerAccess,omitempty"`
 
 	// EmailAddress: User's email address.
+	// @mutable tagmanager.accounts.permissions.create
 	EmailAddress string `json:"emailAddress,omitempty"`
 
 	// Path: GTM UserPermission's API relative path.
@@ -2858,32 +3056,52 @@
 	ContainerId string `json:"containerId,omitempty"`
 
 	// DisablingTriggerId: For mobile containers only: A list of trigger IDs
-	// for disabling conditional variables; the variable is enabled if one
-	// of the enabling trigger is true while all the disabling trigger are
-	// false. Treated as an unordered set.
+	// for disabling conditional
+	// variables; the variable is enabled if one of the enabling trigger is
+	// true
+	// while all the disabling trigger are false. Treated as an unordered
+	// set.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.variables.create
+	// @mutable tagmanager.accounts.containers.workspaces.variables.update
 	DisablingTriggerId []string `json:"disablingTriggerId,omitempty"`
 
 	// EnablingTriggerId: For mobile containers only: A list of trigger IDs
-	// for enabling conditional variables; the variable is enabled if one of
-	// the enabling triggers is true while all the disabling triggers are
-	// false. Treated as an unordered set.
+	// for enabling conditional
+	// variables; the variable is enabled if one of the enabling triggers is
+	// true
+	// while all the disabling triggers are false. Treated as an unordered
+	// set.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.variables.create
+	// @mutable tagmanager.accounts.containers.workspaces.variables.update
 	EnablingTriggerId []string `json:"enablingTriggerId,omitempty"`
 
 	// Fingerprint: The fingerprint of the GTM Variable as computed at
-	// storage time. This value is recomputed whenever the variable is
-	// modified.
+	// storage time.
+	// This value is recomputed whenever the variable is modified.
 	Fingerprint string `json:"fingerprint,omitempty"`
 
 	// FormatValue: Option to convert a variable value to other value.
 	FormatValue *VariableFormatValue `json:"formatValue,omitempty"`
 
 	// Name: Variable display name.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.variables.create
+	// @mutable tagmanager.accounts.containers.workspaces.variables.update
 	Name string `json:"name,omitempty"`
 
-	// Notes: User notes on how to apply this variable in the container.
+	// Notes: User notes on how to apply this variable in the
+	// container.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.variables.create
+	// @mutable tagmanager.accounts.containers.workspaces.variables.update
 	Notes string `json:"notes,omitempty"`
 
 	// Parameter: The variable's parameters.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.variables.create
+	// @mutable tagmanager.accounts.containers.workspaces.variables.update
 	Parameter []*Parameter `json:"parameter,omitempty"`
 
 	// ParentFolderId: Parent folder id.
@@ -2894,16 +3112,25 @@
 
 	// ScheduleEndMs: The end timestamp in milliseconds to schedule a
 	// variable.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.variables.create
+	// @mutable tagmanager.accounts.containers.workspaces.variables.update
 	ScheduleEndMs int64 `json:"scheduleEndMs,omitempty,string"`
 
 	// ScheduleStartMs: The start timestamp in milliseconds to schedule a
 	// variable.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.variables.create
+	// @mutable tagmanager.accounts.containers.workspaces.variables.update
 	ScheduleStartMs int64 `json:"scheduleStartMs,omitempty,string"`
 
 	// TagManagerUrl: Auto generated link to the tag manager UI
 	TagManagerUrl string `json:"tagManagerUrl,omitempty"`
 
 	// Type: GTM Variable Type.
+	// @mutable
+	// tagmanager.accounts.containers.workspaces.variables.create
+	// @mutable tagmanager.accounts.containers.workspaces.variables.update
 	Type string `json:"type,omitempty"`
 
 	// VariableId: The Variable ID uniquely identifies the GTM Variable.
@@ -2941,12 +3168,13 @@
 
 type VariableFormatValue struct {
 	// CaseConversionType: The option to convert a string-type variable
-	// value to either lowercase or uppercase.
+	// value to either lowercase or
+	// uppercase.
 	//
 	// Possible values:
-	//   "lowercase"
-	//   "none"
-	//   "uppercase"
+	//   "NONE"
+	//   "LOWERCASE" - The option to convert a variable value to lowercase.
+	//   "UPPERCASE" - The option to convert a variable value to uppercase.
 	CaseConversionType string `json:"caseConversionType,omitempty"`
 
 	// ConvertFalseToValue: The value to convert if a variable value is
@@ -2996,14 +3224,18 @@
 	ContainerId string `json:"containerId,omitempty"`
 
 	// Description: Workspace description.
+	// @mutable tagmanager.accounts.containers.workspaces.create
+	// @mutable tagmanager.accounts.containers.workspaces.update
 	Description string `json:"description,omitempty"`
 
 	// Fingerprint: The fingerprint of the GTM Workspace as computed at
-	// storage time. This value is recomputed whenever the workspace is
-	// modified.
+	// storage time. This
+	// value is recomputed whenever the workspace is modified.
 	Fingerprint string `json:"fingerprint,omitempty"`
 
 	// Name: Workspace display name.
+	// @mutable tagmanager.accounts.containers.workspaces.create
+	// @mutable tagmanager.accounts.containers.workspaces.update
 	Name string `json:"name,omitempty"`
 
 	// Path: GTM Workspace's API relative path.
@@ -3057,7 +3289,8 @@
 	ContainerId string `json:"containerId,omitempty"`
 
 	// Fingerprint: The fingerprint of the GTM Zone as computed at storage
-	// time. This value is recomputed whenever the zone is modified.
+	// time.
+	// This value is recomputed whenever the zone is modified.
 	Fingerprint string `json:"fingerprint,omitempty"`
 
 	// Name: Zone display name.
@@ -3114,8 +3347,8 @@
 	Condition []*Condition `json:"condition,omitempty"`
 
 	// CustomEvaluationTriggerId: Custom evaluation trigger IDs. A zone will
-	// evaluate its boundary conditions when any of the listed triggers are
-	// true.
+	// evaluate its boundary
+	// conditions when any of the listed triggers are true.
 	CustomEvaluationTriggerId []string `json:"customEvaluationTriggerId,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Condition") to
@@ -3269,7 +3502,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("GET", urls, body)
 	if err != nil {
@@ -3321,6 +3554,7 @@
 	return ret, nil
 	// {
 	//   "description": "Gets a GTM Account.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}",
 	//   "httpMethod": "GET",
 	//   "id": "tagmanager.accounts.get",
 	//   "parameterOrder": [
@@ -3328,13 +3562,14 @@
 	//   ],
 	//   "parameters": {
 	//     "path": {
-	//       "description": "GTM Accounts's API relative path. Example: accounts/{account_id}",
+	//       "description": "GTM Accounts's API relative path.\nExample: accounts/{account_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "response": {
 	//     "$ref": "Account"
 	//   },
@@ -3417,7 +3652,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "accounts")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/accounts")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("GET", urls, body)
 	if err != nil {
@@ -3466,8 +3701,10 @@
 	return ret, nil
 	// {
 	//   "description": "Lists all GTM Accounts that a user has access to.",
+	//   "flatPath": "tagmanager/v2/accounts",
 	//   "httpMethod": "GET",
 	//   "id": "tagmanager.accounts.list",
+	//   "parameterOrder": [],
 	//   "parameters": {
 	//     "pageToken": {
 	//       "description": "Continuation token for fetching the next page of results.",
@@ -3475,7 +3712,7 @@
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "accounts",
+	//   "path": "tagmanager/v2/accounts",
 	//   "response": {
 	//     "$ref": "ListAccountsResponse"
 	//   },
@@ -3529,8 +3766,8 @@
 }
 
 // Fingerprint sets the optional parameter "fingerprint": When provided,
-// this fingerprint must match the fingerprint of the account in
-// storage.
+// this fingerprint must match the fingerprint of the account
+// in storage.
 func (c *AccountsUpdateCall) Fingerprint(fingerprint string) *AccountsUpdateCall {
 	c.urlParams_.Set("fingerprint", fingerprint)
 	return c
@@ -3575,7 +3812,7 @@
 	reqHeaders.Set("Content-Type", "application/json")
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("PUT", urls, body)
 	if err != nil {
@@ -3627,6 +3864,7 @@
 	return ret, nil
 	// {
 	//   "description": "Updates a GTM Account.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}",
 	//   "httpMethod": "PUT",
 	//   "id": "tagmanager.accounts.update",
 	//   "parameterOrder": [
@@ -3634,18 +3872,19 @@
 	//   ],
 	//   "parameters": {
 	//     "fingerprint": {
-	//       "description": "When provided, this fingerprint must match the fingerprint of the account in storage.",
+	//       "description": "When provided, this fingerprint must match the fingerprint of the account\nin storage.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
 	//     "path": {
-	//       "description": "GTM Accounts's API relative path. Example: accounts/{account_id}",
+	//       "description": "GTM Accounts's API relative path.\nExample: accounts/{account_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "request": {
 	//     "$ref": "Account"
 	//   },
@@ -3717,7 +3956,7 @@
 	reqHeaders.Set("Content-Type", "application/json")
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+parent}/containers")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+parent}/containers")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("POST", urls, body)
 	if err != nil {
@@ -3769,6 +4008,7 @@
 	return ret, nil
 	// {
 	//   "description": "Creates a Container.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers",
 	//   "httpMethod": "POST",
 	//   "id": "tagmanager.accounts.containers.create",
 	//   "parameterOrder": [
@@ -3776,13 +4016,14 @@
 	//   ],
 	//   "parameters": {
 	//     "parent": {
-	//       "description": "GTM Account's API relative path. Example: accounts/{account_id}.",
+	//       "description": "GTM Account's API relative path.\nExample: accounts/{account_id}.",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+parent}/containers",
+	//   "path": "tagmanager/v2/{+parent}/containers",
 	//   "request": {
 	//     "$ref": "Container"
 	//   },
@@ -3847,7 +4088,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("DELETE", urls, body)
 	if err != nil {
@@ -3874,6 +4115,7 @@
 	return nil
 	// {
 	//   "description": "Deletes a Container.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}",
 	//   "httpMethod": "DELETE",
 	//   "id": "tagmanager.accounts.containers.delete",
 	//   "parameterOrder": [
@@ -3881,13 +4123,14 @@
 	//   ],
 	//   "parameters": {
 	//     "path": {
-	//       "description": "GTM Container's API relative path. Example: accounts/{account_id}/containers/{container_id}",
+	//       "description": "GTM Container's API relative path.\nExample: accounts/{account_id}/containers/{container_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "scopes": [
 	//     "https://www.googleapis.com/auth/tagmanager.delete.containers"
 	//   ]
@@ -3960,7 +4203,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("GET", urls, body)
 	if err != nil {
@@ -4012,6 +4255,7 @@
 	return ret, nil
 	// {
 	//   "description": "Gets a Container.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}",
 	//   "httpMethod": "GET",
 	//   "id": "tagmanager.accounts.containers.get",
 	//   "parameterOrder": [
@@ -4019,13 +4263,14 @@
 	//   ],
 	//   "parameters": {
 	//     "path": {
-	//       "description": "GTM Container's API relative path. Example: accounts/{account_id}/containers/{container_id}",
+	//       "description": "GTM Container's API relative path.\nExample: accounts/{account_id}/containers/{container_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "response": {
 	//     "$ref": "Container"
 	//   },
@@ -4109,7 +4354,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+parent}/containers")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+parent}/containers")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("GET", urls, body)
 	if err != nil {
@@ -4161,6 +4406,7 @@
 	return ret, nil
 	// {
 	//   "description": "Lists all Containers that belongs to a GTM Account.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers",
 	//   "httpMethod": "GET",
 	//   "id": "tagmanager.accounts.containers.list",
 	//   "parameterOrder": [
@@ -4173,13 +4419,14 @@
 	//       "type": "string"
 	//     },
 	//     "parent": {
-	//       "description": "GTM Accounts's API relative path. Example: accounts/{account_id}.",
+	//       "description": "GTM Accounts's API relative path.\nExample: accounts/{account_id}.",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+parent}/containers",
+	//   "path": "tagmanager/v2/{+parent}/containers",
 	//   "response": {
 	//     "$ref": "ListContainersResponse"
 	//   },
@@ -4232,8 +4479,8 @@
 }
 
 // Fingerprint sets the optional parameter "fingerprint": When provided,
-// this fingerprint must match the fingerprint of the container in
-// storage.
+// this fingerprint must match the fingerprint of the
+// container in storage.
 func (c *AccountsContainersUpdateCall) Fingerprint(fingerprint string) *AccountsContainersUpdateCall {
 	c.urlParams_.Set("fingerprint", fingerprint)
 	return c
@@ -4278,7 +4525,7 @@
 	reqHeaders.Set("Content-Type", "application/json")
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("PUT", urls, body)
 	if err != nil {
@@ -4330,6 +4577,7 @@
 	return ret, nil
 	// {
 	//   "description": "Updates a Container.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}",
 	//   "httpMethod": "PUT",
 	//   "id": "tagmanager.accounts.containers.update",
 	//   "parameterOrder": [
@@ -4337,18 +4585,19 @@
 	//   ],
 	//   "parameters": {
 	//     "fingerprint": {
-	//       "description": "When provided, this fingerprint must match the fingerprint of the container in storage.",
+	//       "description": "When provided, this fingerprint must match the fingerprint of the\ncontainer in storage.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
 	//     "path": {
-	//       "description": "GTM Container's API relative path. Example: accounts/{account_id}/containers/{container_id}",
+	//       "description": "GTM Container's API relative path.\nExample: accounts/{account_id}/containers/{container_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "request": {
 	//     "$ref": "Container"
 	//   },
@@ -4420,7 +4669,7 @@
 	reqHeaders.Set("Content-Type", "application/json")
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+parent}/environments")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+parent}/environments")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("POST", urls, body)
 	if err != nil {
@@ -4472,6 +4721,7 @@
 	return ret, nil
 	// {
 	//   "description": "Creates a GTM Environment.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/environments",
 	//   "httpMethod": "POST",
 	//   "id": "tagmanager.accounts.containers.environments.create",
 	//   "parameterOrder": [
@@ -4479,13 +4729,14 @@
 	//   ],
 	//   "parameters": {
 	//     "parent": {
-	//       "description": "GTM Container's API relative path. Example: accounts/{account_id}/containers/{container_id}",
+	//       "description": "GTM Container's API relative path.\nExample: accounts/{account_id}/containers/{container_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+parent}/environments",
+	//   "path": "tagmanager/v2/{+parent}/environments",
 	//   "request": {
 	//     "$ref": "Environment"
 	//   },
@@ -4550,7 +4801,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("DELETE", urls, body)
 	if err != nil {
@@ -4577,6 +4828,7 @@
 	return nil
 	// {
 	//   "description": "Deletes a GTM Environment.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/environments/{environmentsId}",
 	//   "httpMethod": "DELETE",
 	//   "id": "tagmanager.accounts.containers.environments.delete",
 	//   "parameterOrder": [
@@ -4584,13 +4836,14 @@
 	//   ],
 	//   "parameters": {
 	//     "path": {
-	//       "description": "GTM Environment's API relative path. Example: accounts/{account_id}/containers/{container_id}/environments/{environment_id}",
+	//       "description": "GTM Environment's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/environments/{environment_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/environments/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "scopes": [
 	//     "https://www.googleapis.com/auth/tagmanager.edit.containers"
 	//   ]
@@ -4663,7 +4916,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("GET", urls, body)
 	if err != nil {
@@ -4715,6 +4968,7 @@
 	return ret, nil
 	// {
 	//   "description": "Gets a GTM Environment.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/environments/{environmentsId}",
 	//   "httpMethod": "GET",
 	//   "id": "tagmanager.accounts.containers.environments.get",
 	//   "parameterOrder": [
@@ -4722,13 +4976,14 @@
 	//   ],
 	//   "parameters": {
 	//     "path": {
-	//       "description": "GTM Environment's API relative path. Example: accounts/{account_id}/containers/{container_id}/environments/{environment_id}",
+	//       "description": "GTM Environment's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/environments/{environment_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/environments/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "response": {
 	//     "$ref": "Environment"
 	//   },
@@ -4812,7 +5067,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+parent}/environments")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+parent}/environments")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("GET", urls, body)
 	if err != nil {
@@ -4864,6 +5119,7 @@
 	return ret, nil
 	// {
 	//   "description": "Lists all GTM Environments of a GTM Container.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/environments",
 	//   "httpMethod": "GET",
 	//   "id": "tagmanager.accounts.containers.environments.list",
 	//   "parameterOrder": [
@@ -4876,13 +5132,14 @@
 	//       "type": "string"
 	//     },
 	//     "parent": {
-	//       "description": "GTM Container's API relative path. Example: accounts/{account_id}/containers/{container_id}",
+	//       "description": "GTM Container's API relative path.\nExample: accounts/{account_id}/containers/{container_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+parent}/environments",
+	//   "path": "tagmanager/v2/{+parent}/environments",
 	//   "response": {
 	//     "$ref": "ListEnvironmentsResponse"
 	//   },
@@ -4974,7 +5231,7 @@
 	reqHeaders.Set("Content-Type", "application/json")
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}:reauthorize")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}:reauthorize")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("POST", urls, body)
 	if err != nil {
@@ -5026,6 +5283,7 @@
 	return ret, nil
 	// {
 	//   "description": "Re-generates the authorization code for a GTM Environment.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/environments/{environmentsId}:reauthorize",
 	//   "httpMethod": "POST",
 	//   "id": "tagmanager.accounts.containers.environments.reauthorize",
 	//   "parameterOrder": [
@@ -5033,13 +5291,14 @@
 	//   ],
 	//   "parameters": {
 	//     "path": {
-	//       "description": "GTM Environment's API relative path. Example: accounts/{account_id}/containers/{container_id}/environments/{environment_id}",
+	//       "description": "GTM Environment's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/environments/{environment_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/environments/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}:reauthorize",
+	//   "path": "tagmanager/v2/{+path}:reauthorize",
 	//   "request": {
 	//     "$ref": "Environment"
 	//   },
@@ -5073,8 +5332,8 @@
 }
 
 // Fingerprint sets the optional parameter "fingerprint": When provided,
-// this fingerprint must match the fingerprint of the environment in
-// storage.
+// this fingerprint must match the fingerprint of the
+// environment in storage.
 func (c *AccountsContainersEnvironmentsUpdateCall) Fingerprint(fingerprint string) *AccountsContainersEnvironmentsUpdateCall {
 	c.urlParams_.Set("fingerprint", fingerprint)
 	return c
@@ -5119,7 +5378,7 @@
 	reqHeaders.Set("Content-Type", "application/json")
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("PUT", urls, body)
 	if err != nil {
@@ -5171,6 +5430,7 @@
 	return ret, nil
 	// {
 	//   "description": "Updates a GTM Environment.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/environments/{environmentsId}",
 	//   "httpMethod": "PUT",
 	//   "id": "tagmanager.accounts.containers.environments.update",
 	//   "parameterOrder": [
@@ -5178,18 +5438,19 @@
 	//   ],
 	//   "parameters": {
 	//     "fingerprint": {
-	//       "description": "When provided, this fingerprint must match the fingerprint of the environment in storage.",
+	//       "description": "When provided, this fingerprint must match the fingerprint of the\nenvironment in storage.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
 	//     "path": {
-	//       "description": "GTM Environment's API relative path. Example: accounts/{account_id}/containers/{container_id}/environments/{environment_id}",
+	//       "description": "GTM Environment's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/environments/{environment_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/environments/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "request": {
 	//     "$ref": "Environment"
 	//   },
@@ -5268,7 +5529,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+parent}/version_headers:latest")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+parent}/version_headers:latest")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("GET", urls, body)
 	if err != nil {
@@ -5320,6 +5581,7 @@
 	return ret, nil
 	// {
 	//   "description": "Gets the latest container version header",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/version_headers:latest",
 	//   "httpMethod": "GET",
 	//   "id": "tagmanager.accounts.containers.version_headers.latest",
 	//   "parameterOrder": [
@@ -5327,13 +5589,14 @@
 	//   ],
 	//   "parameters": {
 	//     "parent": {
-	//       "description": "GTM Container's API relative path. Example: accounts/{account_id}/containers/{container_id}",
+	//       "description": "GTM Container's API relative path.\nExample: accounts/{account_id}/containers/{container_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+parent}/version_headers:latest",
+	//   "path": "tagmanager/v2/{+parent}/version_headers:latest",
 	//   "response": {
 	//     "$ref": "ContainerVersionHeader"
 	//   },
@@ -5424,7 +5687,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+parent}/version_headers")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+parent}/version_headers")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("GET", urls, body)
 	if err != nil {
@@ -5476,6 +5739,7 @@
 	return ret, nil
 	// {
 	//   "description": "Lists all Container Versions of a GTM Container.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/version_headers",
 	//   "httpMethod": "GET",
 	//   "id": "tagmanager.accounts.containers.version_headers.list",
 	//   "parameterOrder": [
@@ -5493,13 +5757,14 @@
 	//       "type": "string"
 	//     },
 	//     "parent": {
-	//       "description": "GTM Container's API relative path. Example: accounts/{account_id}/containers/{container_id}",
+	//       "description": "GTM Container's API relative path.\nExample: accounts/{account_id}/containers/{container_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+parent}/version_headers",
+	//   "path": "tagmanager/v2/{+parent}/version_headers",
 	//   "response": {
 	//     "$ref": "ListContainerVersionsResponse"
 	//   },
@@ -5584,7 +5849,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("DELETE", urls, body)
 	if err != nil {
@@ -5611,6 +5876,7 @@
 	return nil
 	// {
 	//   "description": "Deletes a Container Version.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/versions/{versionsId}",
 	//   "httpMethod": "DELETE",
 	//   "id": "tagmanager.accounts.containers.versions.delete",
 	//   "parameterOrder": [
@@ -5618,13 +5884,14 @@
 	//   ],
 	//   "parameters": {
 	//     "path": {
-	//       "description": "GTM ContainerVersion's API relative path. Example: accounts/{account_id}/containers/{container_id}/versions/{version_id}",
+	//       "description": "GTM ContainerVersion's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/versions/{version_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/versions/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "scopes": [
 	//     "https://www.googleapis.com/auth/tagmanager.edit.containerversions"
 	//   ]
@@ -5651,8 +5918,9 @@
 }
 
 // ContainerVersionId sets the optional parameter "containerVersionId":
-// The GTM ContainerVersion ID. Specify published to retrieve the
-// currently published version.
+// The GTM ContainerVersion ID. Specify <code>published</code> to
+// retrieve
+// the currently published version.
 func (c *AccountsContainersVersionsGetCall) ContainerVersionId(containerVersionId string) *AccountsContainersVersionsGetCall {
 	c.urlParams_.Set("containerVersionId", containerVersionId)
 	return c
@@ -5705,7 +5973,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("GET", urls, body)
 	if err != nil {
@@ -5757,6 +6025,7 @@
 	return ret, nil
 	// {
 	//   "description": "Gets a Container Version.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/versions/{versionsId}",
 	//   "httpMethod": "GET",
 	//   "id": "tagmanager.accounts.containers.versions.get",
 	//   "parameterOrder": [
@@ -5764,18 +6033,19 @@
 	//   ],
 	//   "parameters": {
 	//     "containerVersionId": {
-	//       "description": "The GTM ContainerVersion ID. Specify published to retrieve the currently published version.",
+	//       "description": "The GTM ContainerVersion ID. Specify \u003ccode\u003epublished\u003c/code\u003e to retrieve\nthe currently published version.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
 	//     "path": {
-	//       "description": "GTM ContainerVersion's API relative path. Example: accounts/{account_id}/containers/{container_id}/versions/{version_id}",
+	//       "description": "GTM ContainerVersion's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/versions/{version_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/versions/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "response": {
 	//     "$ref": "ContainerVersion"
 	//   },
@@ -5853,7 +6123,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+parent}/versions:live")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+parent}/versions:live")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("GET", urls, body)
 	if err != nil {
@@ -5905,6 +6175,7 @@
 	return ret, nil
 	// {
 	//   "description": "Gets the live (i.e. published) container version",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/versions:live",
 	//   "httpMethod": "GET",
 	//   "id": "tagmanager.accounts.containers.versions.live",
 	//   "parameterOrder": [
@@ -5912,13 +6183,14 @@
 	//   ],
 	//   "parameters": {
 	//     "parent": {
-	//       "description": "GTM Container's API relative path. Example: accounts/{account_id}/containers/{container_id}",
+	//       "description": "GTM Container's API relative path.\nExample: accounts/{account_id}/containers/{container_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+parent}/versions:live",
+	//   "path": "tagmanager/v2/{+parent}/versions:live",
 	//   "response": {
 	//     "$ref": "ContainerVersion"
 	//   },
@@ -5948,8 +6220,8 @@
 }
 
 // Fingerprint sets the optional parameter "fingerprint": When provided,
-// this fingerprint must match the fingerprint of the container version
-// in storage.
+// this fingerprint must match the fingerprint of the
+// container version in storage.
 func (c *AccountsContainersVersionsPublishCall) Fingerprint(fingerprint string) *AccountsContainersVersionsPublishCall {
 	c.urlParams_.Set("fingerprint", fingerprint)
 	return c
@@ -5989,7 +6261,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}:publish")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}:publish")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("POST", urls, body)
 	if err != nil {
@@ -6041,6 +6313,7 @@
 	return ret, nil
 	// {
 	//   "description": "Publishes a Container Version.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/versions/{versionsId}:publish",
 	//   "httpMethod": "POST",
 	//   "id": "tagmanager.accounts.containers.versions.publish",
 	//   "parameterOrder": [
@@ -6048,18 +6321,19 @@
 	//   ],
 	//   "parameters": {
 	//     "fingerprint": {
-	//       "description": "When provided, this fingerprint must match the fingerprint of the container version in storage.",
+	//       "description": "When provided, this fingerprint must match the fingerprint of the\ncontainer version in storage.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
 	//     "path": {
-	//       "description": "GTM ContainerVersion's API relative path. Example: accounts/{account_id}/containers/{container_id}/versions/{version_id}",
+	//       "description": "GTM ContainerVersion's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/versions/{version_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/versions/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}:publish",
+	//   "path": "tagmanager/v2/{+path}:publish",
 	//   "response": {
 	//     "$ref": "PublishContainerVersionResponse"
 	//   },
@@ -6081,7 +6355,8 @@
 }
 
 // SetLatest: Sets the latest version used for synchronization of
-// workspaces when detecting conflicts and errors.
+// workspaces when
+// detecting conflicts and errors.
 func (r *AccountsContainersVersionsService) SetLatest(path string) *AccountsContainersVersionsSetLatestCall {
 	c := &AccountsContainersVersionsSetLatestCall{s: r.s, urlParams_: make(gensupport.URLParams)}
 	c.path = path
@@ -6122,7 +6397,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}:set_latest")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}:set_latest")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("POST", urls, body)
 	if err != nil {
@@ -6173,7 +6448,8 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Sets the latest version used for synchronization of workspaces when detecting conflicts and errors.",
+	//   "description": "Sets the latest version used for synchronization of workspaces when\ndetecting conflicts and errors.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/versions/{versionsId}:set_latest",
 	//   "httpMethod": "POST",
 	//   "id": "tagmanager.accounts.containers.versions.set_latest",
 	//   "parameterOrder": [
@@ -6181,13 +6457,14 @@
 	//   ],
 	//   "parameters": {
 	//     "path": {
-	//       "description": "GTM ContainerVersion's API relative path. Example: accounts/{account_id}/containers/{container_id}/versions/{version_id}",
+	//       "description": "GTM ContainerVersion's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/versions/{version_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/versions/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}:set_latest",
+	//   "path": "tagmanager/v2/{+path}:set_latest",
 	//   "response": {
 	//     "$ref": "ContainerVersion"
 	//   },
@@ -6249,7 +6526,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}:undelete")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}:undelete")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("POST", urls, body)
 	if err != nil {
@@ -6301,6 +6578,7 @@
 	return ret, nil
 	// {
 	//   "description": "Undeletes a Container Version.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/versions/{versionsId}:undelete",
 	//   "httpMethod": "POST",
 	//   "id": "tagmanager.accounts.containers.versions.undelete",
 	//   "parameterOrder": [
@@ -6308,13 +6586,14 @@
 	//   ],
 	//   "parameters": {
 	//     "path": {
-	//       "description": "GTM ContainerVersion's API relative path. Example: accounts/{account_id}/containers/{container_id}/versions/{version_id}",
+	//       "description": "GTM ContainerVersion's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/versions/{version_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/versions/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}:undelete",
+	//   "path": "tagmanager/v2/{+path}:undelete",
 	//   "response": {
 	//     "$ref": "ContainerVersion"
 	//   },
@@ -6345,8 +6624,8 @@
 }
 
 // Fingerprint sets the optional parameter "fingerprint": When provided,
-// this fingerprint must match the fingerprint of the container version
-// in storage.
+// this fingerprint must match the fingerprint of the
+// container version in storage.
 func (c *AccountsContainersVersionsUpdateCall) Fingerprint(fingerprint string) *AccountsContainersVersionsUpdateCall {
 	c.urlParams_.Set("fingerprint", fingerprint)
 	return c
@@ -6391,7 +6670,7 @@
 	reqHeaders.Set("Content-Type", "application/json")
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("PUT", urls, body)
 	if err != nil {
@@ -6443,6 +6722,7 @@
 	return ret, nil
 	// {
 	//   "description": "Updates a Container Version.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/versions/{versionsId}",
 	//   "httpMethod": "PUT",
 	//   "id": "tagmanager.accounts.containers.versions.update",
 	//   "parameterOrder": [
@@ -6450,18 +6730,19 @@
 	//   ],
 	//   "parameters": {
 	//     "fingerprint": {
-	//       "description": "When provided, this fingerprint must match the fingerprint of the container version in storage.",
+	//       "description": "When provided, this fingerprint must match the fingerprint of the\ncontainer version in storage.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
 	//     "path": {
-	//       "description": "GTM ContainerVersion's API relative path. Example: accounts/{account_id}/containers/{container_id}/versions/{version_id}",
+	//       "description": "GTM ContainerVersion's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/versions/{version_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/versions/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "request": {
 	//     "$ref": "ContainerVersion"
 	//   },
@@ -6533,7 +6814,7 @@
 	reqHeaders.Set("Content-Type", "application/json")
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+parent}/workspaces")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+parent}/workspaces")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("POST", urls, body)
 	if err != nil {
@@ -6585,6 +6866,7 @@
 	return ret, nil
 	// {
 	//   "description": "Creates a Workspace.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces",
 	//   "httpMethod": "POST",
 	//   "id": "tagmanager.accounts.containers.workspaces.create",
 	//   "parameterOrder": [
@@ -6592,13 +6874,14 @@
 	//   ],
 	//   "parameters": {
 	//     "parent": {
-	//       "description": "GTM parent Container's API relative path. Example: accounts/{account_id}/containers/{container_id}",
+	//       "description": "GTM parent Container's API relative path.\nExample: accounts/{account_id}/containers/{container_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+parent}/workspaces",
+	//   "path": "tagmanager/v2/{+parent}/workspaces",
 	//   "request": {
 	//     "$ref": "Workspace"
 	//   },
@@ -6624,8 +6907,10 @@
 }
 
 // CreateVersion: Creates a Container Version from the entities present
-// in the workspace, deletes the workspace, and sets the base container
-// version to the newly created version.
+// in the workspace,
+// deletes the workspace, and sets the base container version to the
+// newly
+// created version.
 func (r *AccountsContainersWorkspacesService) CreateVersion(path string, createcontainerversionrequestversionoptions *CreateContainerVersionRequestVersionOptions) *AccountsContainersWorkspacesCreateVersionCall {
 	c := &AccountsContainersWorkspacesCreateVersionCall{s: r.s, urlParams_: make(gensupport.URLParams)}
 	c.path = path
@@ -6672,7 +6957,7 @@
 	reqHeaders.Set("Content-Type", "application/json")
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}:create_version")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}:create_version")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("POST", urls, body)
 	if err != nil {
@@ -6723,7 +7008,8 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Creates a Container Version from the entities present in the workspace, deletes the workspace, and sets the base container version to the newly created version.",
+	//   "description": "Creates a Container Version from the entities present in the workspace,\ndeletes the workspace, and sets the base container version to the newly\ncreated version.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}:create_version",
 	//   "httpMethod": "POST",
 	//   "id": "tagmanager.accounts.containers.workspaces.create_version",
 	//   "parameterOrder": [
@@ -6731,13 +7017,14 @@
 	//   ],
 	//   "parameters": {
 	//     "path": {
-	//       "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+	//       "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}:create_version",
+	//   "path": "tagmanager/v2/{+path}:create_version",
 	//   "request": {
 	//     "$ref": "CreateContainerVersionRequestVersionOptions"
 	//   },
@@ -6802,7 +7089,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("DELETE", urls, body)
 	if err != nil {
@@ -6829,6 +7116,7 @@
 	return nil
 	// {
 	//   "description": "Deletes a Workspace.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}",
 	//   "httpMethod": "DELETE",
 	//   "id": "tagmanager.accounts.containers.workspaces.delete",
 	//   "parameterOrder": [
@@ -6836,13 +7124,14 @@
 	//   ],
 	//   "parameters": {
 	//     "path": {
-	//       "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+	//       "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "scopes": [
 	//     "https://www.googleapis.com/auth/tagmanager.delete.containers"
 	//   ]
@@ -6915,7 +7204,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("GET", urls, body)
 	if err != nil {
@@ -6967,6 +7256,7 @@
 	return ret, nil
 	// {
 	//   "description": "Gets a Workspace.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}",
 	//   "httpMethod": "GET",
 	//   "id": "tagmanager.accounts.containers.workspaces.get",
 	//   "parameterOrder": [
@@ -6974,13 +7264,14 @@
 	//   ],
 	//   "parameters": {
 	//     "path": {
-	//       "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+	//       "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "response": {
 	//     "$ref": "Workspace"
 	//   },
@@ -7057,7 +7348,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}/status")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}/status")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("GET", urls, body)
 	if err != nil {
@@ -7109,6 +7400,7 @@
 	return ret, nil
 	// {
 	//   "description": "Finds conflicting and modified entities in the workspace.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/status",
 	//   "httpMethod": "GET",
 	//   "id": "tagmanager.accounts.containers.workspaces.getStatus",
 	//   "parameterOrder": [
@@ -7116,13 +7408,14 @@
 	//   ],
 	//   "parameters": {
 	//     "path": {
-	//       "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+	//       "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}/status",
+	//   "path": "tagmanager/v2/{+path}/status",
 	//   "response": {
 	//     "$ref": "GetWorkspaceStatusResponse"
 	//   },
@@ -7206,7 +7499,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+parent}/workspaces")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+parent}/workspaces")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("GET", urls, body)
 	if err != nil {
@@ -7258,6 +7551,7 @@
 	return ret, nil
 	// {
 	//   "description": "Lists all Workspaces that belong to a GTM Container.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces",
 	//   "httpMethod": "GET",
 	//   "id": "tagmanager.accounts.containers.workspaces.list",
 	//   "parameterOrder": [
@@ -7270,13 +7564,14 @@
 	//       "type": "string"
 	//     },
 	//     "parent": {
-	//       "description": "GTM parent Container's API relative path. Example: accounts/{account_id}/containers/{container_id}",
+	//       "description": "GTM parent Container's API relative path.\nExample: accounts/{account_id}/containers/{container_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+parent}/workspaces",
+	//   "path": "tagmanager/v2/{+parent}/workspaces",
 	//   "response": {
 	//     "$ref": "ListWorkspacesResponse"
 	//   },
@@ -7320,7 +7615,8 @@
 }
 
 // QuickPreview: Quick previews a workspace by creating a fake container
-// version from all entities in the provided workspace.
+// version from all
+// entities in the provided workspace.
 func (r *AccountsContainersWorkspacesService) QuickPreview(path string) *AccountsContainersWorkspacesQuickPreviewCall {
 	c := &AccountsContainersWorkspacesQuickPreviewCall{s: r.s, urlParams_: make(gensupport.URLParams)}
 	c.path = path
@@ -7361,7 +7657,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}:quick_preview")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}:quick_preview")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("POST", urls, body)
 	if err != nil {
@@ -7412,7 +7708,8 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Quick previews a workspace by creating a fake container version from all entities in the provided workspace.",
+	//   "description": "Quick previews a workspace by creating a fake container version from all\nentities in the provided workspace.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}:quick_preview",
 	//   "httpMethod": "POST",
 	//   "id": "tagmanager.accounts.containers.workspaces.quick_preview",
 	//   "parameterOrder": [
@@ -7420,13 +7717,14 @@
 	//   ],
 	//   "parameters": {
 	//     "path": {
-	//       "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+	//       "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}:quick_preview",
+	//   "path": "tagmanager/v2/{+path}:quick_preview",
 	//   "response": {
 	//     "$ref": "QuickPreviewResponse"
 	//   },
@@ -7449,7 +7747,8 @@
 }
 
 // ResolveConflict: Resolves a merge conflict for a workspace entity by
-// updating it to the resolved entity passed in the request.
+// updating it to the
+// resolved entity passed in the request.
 func (r *AccountsContainersWorkspacesService) ResolveConflict(path string, entity *Entity) *AccountsContainersWorkspacesResolveConflictCall {
 	c := &AccountsContainersWorkspacesResolveConflictCall{s: r.s, urlParams_: make(gensupport.URLParams)}
 	c.path = path
@@ -7458,7 +7757,8 @@
 }
 
 // Fingerprint sets the optional parameter "fingerprint": When provided,
-// this fingerprint must match the fingerprint of the
+// this fingerprint must match the fingerprint of
+// the
 // entity_in_workspace in the merge conflict.
 func (c *AccountsContainersWorkspacesResolveConflictCall) Fingerprint(fingerprint string) *AccountsContainersWorkspacesResolveConflictCall {
 	c.urlParams_.Set("fingerprint", fingerprint)
@@ -7504,7 +7804,7 @@
 	reqHeaders.Set("Content-Type", "application/json")
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}:resolve_conflict")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}:resolve_conflict")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("POST", urls, body)
 	if err != nil {
@@ -7530,7 +7830,8 @@
 	}
 	return nil
 	// {
-	//   "description": "Resolves a merge conflict for a workspace entity by updating it to the resolved entity passed in the request.",
+	//   "description": "Resolves a merge conflict for a workspace entity by updating it to the\nresolved entity passed in the request.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}:resolve_conflict",
 	//   "httpMethod": "POST",
 	//   "id": "tagmanager.accounts.containers.workspaces.resolve_conflict",
 	//   "parameterOrder": [
@@ -7538,18 +7839,19 @@
 	//   ],
 	//   "parameters": {
 	//     "fingerprint": {
-	//       "description": "When provided, this fingerprint must match the fingerprint of the entity_in_workspace in the merge conflict.",
+	//       "description": "When provided, this fingerprint must match the fingerprint of the\nentity_in_workspace in the merge conflict.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
 	//     "path": {
-	//       "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+	//       "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}:resolve_conflict",
+	//   "path": "tagmanager/v2/{+path}:resolve_conflict",
 	//   "request": {
 	//     "$ref": "Entity"
 	//   },
@@ -7571,8 +7873,10 @@
 }
 
 // Sync: Syncs a workspace to the latest container version by updating
-// all unmodified workspace entities and displaying conflicts for
-// modified entities.
+// all
+// unmodified workspace entities and displaying conflicts for
+// modified
+// entities.
 func (r *AccountsContainersWorkspacesService) Sync(path string) *AccountsContainersWorkspacesSyncCall {
 	c := &AccountsContainersWorkspacesSyncCall{s: r.s, urlParams_: make(gensupport.URLParams)}
 	c.path = path
@@ -7613,7 +7917,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}:sync")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}:sync")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("POST", urls, body)
 	if err != nil {
@@ -7664,7 +7968,8 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Syncs a workspace to the latest container version by updating all unmodified workspace entities and displaying conflicts for modified entities.",
+	//   "description": "Syncs a workspace to the latest container version by updating all\nunmodified workspace entities and displaying conflicts for modified\nentities.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}:sync",
 	//   "httpMethod": "POST",
 	//   "id": "tagmanager.accounts.containers.workspaces.sync",
 	//   "parameterOrder": [
@@ -7672,13 +7977,14 @@
 	//   ],
 	//   "parameters": {
 	//     "path": {
-	//       "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+	//       "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}:sync",
+	//   "path": "tagmanager/v2/{+path}:sync",
 	//   "response": {
 	//     "$ref": "SyncWorkspaceResponse"
 	//   },
@@ -7709,8 +8015,8 @@
 }
 
 // Fingerprint sets the optional parameter "fingerprint": When provided,
-// this fingerprint must match the fingerprint of the workspace in
-// storage.
+// this fingerprint must match the fingerprint of the
+// workspace in storage.
 func (c *AccountsContainersWorkspacesUpdateCall) Fingerprint(fingerprint string) *AccountsContainersWorkspacesUpdateCall {
 	c.urlParams_.Set("fingerprint", fingerprint)
 	return c
@@ -7755,7 +8061,7 @@
 	reqHeaders.Set("Content-Type", "application/json")
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("PUT", urls, body)
 	if err != nil {
@@ -7807,6 +8113,7 @@
 	return ret, nil
 	// {
 	//   "description": "Updates a Workspace.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}",
 	//   "httpMethod": "PUT",
 	//   "id": "tagmanager.accounts.containers.workspaces.update",
 	//   "parameterOrder": [
@@ -7814,18 +8121,19 @@
 	//   ],
 	//   "parameters": {
 	//     "fingerprint": {
-	//       "description": "When provided, this fingerprint must match the fingerprint of the workspace in storage.",
+	//       "description": "When provided, this fingerprint must match the fingerprint of the\nworkspace in storage.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
 	//     "path": {
-	//       "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+	//       "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "request": {
 	//     "$ref": "Workspace"
 	//   },
@@ -7860,111 +8168,111 @@
 // variables to enable.
 //
 // Possible values:
-//   "advertiserId"
-//   "advertisingTrackingEnabled"
-//   "ampBrowserLanguage"
-//   "ampCanonicalHost"
-//   "ampCanonicalPath"
-//   "ampCanonicalUrl"
-//   "ampClientId"
-//   "ampClientMaxScrollX"
-//   "ampClientMaxScrollY"
-//   "ampClientScreenHeight"
-//   "ampClientScreenWidth"
-//   "ampClientScrollX"
-//   "ampClientScrollY"
-//   "ampClientTimestamp"
-//   "ampClientTimezone"
-//   "ampGtmEvent"
-//   "ampPageDownloadTime"
-//   "ampPageLoadTime"
-//   "ampPageViewId"
-//   "ampReferrer"
-//   "ampTitle"
-//   "ampTotalEngagedTime"
-//   "appId"
-//   "appName"
-//   "appVersionCode"
-//   "appVersionName"
-//   "builtInVariableTypeUnspecified"
-//   "clickClasses"
-//   "clickElement"
-//   "clickId"
-//   "clickTarget"
-//   "clickText"
-//   "clickUrl"
-//   "containerId"
-//   "containerVersion"
-//   "debugMode"
-//   "deviceName"
-//   "elementVisibilityFirstTime"
-//   "elementVisibilityRatio"
-//   "elementVisibilityRecentTime"
-//   "elementVisibilityTime"
-//   "environmentName"
-//   "errorLine"
-//   "errorMessage"
-//   "errorUrl"
-//   "event"
-//   "eventName"
-//   "firebaseEventParameterCampaign"
-//   "firebaseEventParameterCampaignAclid"
-//   "firebaseEventParameterCampaignAnid"
-//   "firebaseEventParameterCampaignClickTimestamp"
-//   "firebaseEventParameterCampaignContent"
-//   "firebaseEventParameterCampaignCp1"
-//   "firebaseEventParameterCampaignGclid"
-//   "firebaseEventParameterCampaignSource"
-//   "firebaseEventParameterCampaignTerm"
-//   "firebaseEventParameterCurrency"
-//   "firebaseEventParameterDynamicLinkAcceptTime"
-//   "firebaseEventParameterDynamicLinkLinkid"
-//   "firebaseEventParameterNotificationMessageDeviceTime"
-//   "firebaseEventParameterNotificationMessageId"
-//   "firebaseEventParameterNotificationMessageName"
-//   "firebaseEventParameterNotificationMessageTime"
-//   "firebaseEventParameterNotificationTopic"
-//   "firebaseEventParameterPreviousAppVersion"
-//   "firebaseEventParameterPreviousOsVersion"
-//   "firebaseEventParameterPrice"
-//   "firebaseEventParameterProductId"
-//   "firebaseEventParameterQuantity"
-//   "firebaseEventParameterValue"
-//   "formClasses"
-//   "formElement"
-//   "formId"
-//   "formTarget"
-//   "formText"
-//   "formUrl"
-//   "historySource"
-//   "htmlId"
-//   "language"
-//   "newHistoryFragment"
-//   "newHistoryState"
-//   "newHistoryUrl"
-//   "oldHistoryFragment"
-//   "oldHistoryState"
-//   "oldHistoryUrl"
-//   "osVersion"
-//   "pageHostname"
-//   "pagePath"
-//   "pageUrl"
-//   "platform"
-//   "randomNumber"
-//   "referrer"
-//   "resolution"
-//   "scrollDepthDirection"
-//   "scrollDepthThreshold"
-//   "scrollDepthUnits"
-//   "sdkVersion"
-//   "videoCurrentTime"
-//   "videoDuration"
-//   "videoPercent"
-//   "videoProvider"
-//   "videoStatus"
-//   "videoTitle"
-//   "videoUrl"
-//   "videoVisible"
+//   "BUILT_IN_VARIABLE_TYPE_UNSPECIFIED"
+//   "PAGE_URL"
+//   "PAGE_HOSTNAME"
+//   "PAGE_PATH"
+//   "REFERRER"
+//   "EVENT"
+//   "CLICK_ELEMENT"
+//   "CLICK_CLASSES"
+//   "CLICK_ID"
+//   "CLICK_TARGET"
+//   "CLICK_URL"
+//   "CLICK_TEXT"
+//   "FORM_ELEMENT"
+//   "FORM_CLASSES"
+//   "FORM_ID"
+//   "FORM_TARGET"
+//   "FORM_URL"
+//   "FORM_TEXT"
+//   "ERROR_MESSAGE"
+//   "ERROR_URL"
+//   "ERROR_LINE"
+//   "NEW_HISTORY_URL"
+//   "OLD_HISTORY_URL"
+//   "NEW_HISTORY_FRAGMENT"
+//   "OLD_HISTORY_FRAGMENT"
+//   "NEW_HISTORY_STATE"
+//   "OLD_HISTORY_STATE"
+//   "HISTORY_SOURCE"
+//   "CONTAINER_VERSION"
+//   "DEBUG_MODE"
+//   "RANDOM_NUMBER"
+//   "CONTAINER_ID"
+//   "APP_ID"
+//   "APP_NAME"
+//   "APP_VERSION_CODE"
+//   "APP_VERSION_NAME"
+//   "LANGUAGE"
+//   "OS_VERSION"
+//   "PLATFORM"
+//   "SDK_VERSION"
+//   "DEVICE_NAME"
+//   "RESOLUTION"
+//   "ADVERTISER_ID"
+//   "ADVERTISING_TRACKING_ENABLED"
+//   "HTML_ID"
+//   "ENVIRONMENT_NAME"
+//   "AMP_BROWSER_LANGUAGE"
+//   "AMP_CANONICAL_PATH"
+//   "AMP_CANONICAL_URL"
+//   "AMP_CANONICAL_HOST"
+//   "AMP_REFERRER"
+//   "AMP_TITLE"
+//   "AMP_CLIENT_ID"
+//   "AMP_CLIENT_TIMEZONE"
+//   "AMP_CLIENT_TIMESTAMP"
+//   "AMP_CLIENT_SCREEN_WIDTH"
+//   "AMP_CLIENT_SCREEN_HEIGHT"
+//   "AMP_CLIENT_SCROLL_X"
+//   "AMP_CLIENT_SCROLL_Y"
+//   "AMP_CLIENT_MAX_SCROLL_X"
+//   "AMP_CLIENT_MAX_SCROLL_Y"
+//   "AMP_TOTAL_ENGAGED_TIME"
+//   "AMP_PAGE_VIEW_ID"
+//   "AMP_PAGE_LOAD_TIME"
+//   "AMP_PAGE_DOWNLOAD_TIME"
+//   "AMP_GTM_EVENT"
+//   "EVENT_NAME"
+//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN"
+//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN_ACLID"
+//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN_ANID"
+//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN_CLICK_TIMESTAMP"
+//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN_CONTENT"
+//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN_CP1"
+//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN_GCLID"
+//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN_SOURCE"
+//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN_TERM"
+//   "FIREBASE_EVENT_PARAMETER_CURRENCY"
+//   "FIREBASE_EVENT_PARAMETER_DYNAMIC_LINK_ACCEPT_TIME"
+//   "FIREBASE_EVENT_PARAMETER_DYNAMIC_LINK_LINKID"
+//   "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_DEVICE_TIME"
+//   "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_ID"
+//   "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_NAME"
+//   "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_TIME"
+//   "FIREBASE_EVENT_PARAMETER_NOTIFICATION_TOPIC"
+//   "FIREBASE_EVENT_PARAMETER_PREVIOUS_APP_VERSION"
+//   "FIREBASE_EVENT_PARAMETER_PREVIOUS_OS_VERSION"
+//   "FIREBASE_EVENT_PARAMETER_PRICE"
+//   "FIREBASE_EVENT_PARAMETER_PRODUCT_ID"
+//   "FIREBASE_EVENT_PARAMETER_QUANTITY"
+//   "FIREBASE_EVENT_PARAMETER_VALUE"
+//   "VIDEO_PROVIDER"
+//   "VIDEO_URL"
+//   "VIDEO_TITLE"
+//   "VIDEO_DURATION"
+//   "VIDEO_PERCENT"
+//   "VIDEO_VISIBLE"
+//   "VIDEO_STATUS"
+//   "VIDEO_CURRENT_TIME"
+//   "SCROLL_DEPTH_THRESHOLD"
+//   "SCROLL_DEPTH_UNITS"
+//   "SCROLL_DEPTH_DIRECTION"
+//   "ELEMENT_VISIBILITY_RATIO"
+//   "ELEMENT_VISIBILITY_TIME"
+//   "ELEMENT_VISIBILITY_FIRST_TIME"
+//   "ELEMENT_VISIBILITY_RECENT_TIME"
 func (c *AccountsContainersWorkspacesBuiltInVariablesCreateCall) Type(type_ ...string) *AccountsContainersWorkspacesBuiltInVariablesCreateCall {
 	c.urlParams_.SetMulti("type", append([]string{}, type_...))
 	return c
@@ -8004,7 +8312,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+parent}/built_in_variables")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+parent}/built_in_variables")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("POST", urls, body)
 	if err != nil {
@@ -8056,6 +8364,7 @@
 	return ret, nil
 	// {
 	//   "description": "Creates one or more GTM Built-In Variables.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/built_in_variables",
 	//   "httpMethod": "POST",
 	//   "id": "tagmanager.accounts.containers.workspaces.built_in_variables.create",
 	//   "parameterOrder": [
@@ -8063,233 +8372,127 @@
 	//   ],
 	//   "parameters": {
 	//     "parent": {
-	//       "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+	//       "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     },
 	//     "type": {
 	//       "description": "The types of built-in variables to enable.",
 	//       "enum": [
-	//         "advertiserId",
-	//         "advertisingTrackingEnabled",
-	//         "ampBrowserLanguage",
-	//         "ampCanonicalHost",
-	//         "ampCanonicalPath",
-	//         "ampCanonicalUrl",
-	//         "ampClientId",
-	//         "ampClientMaxScrollX",
-	//         "ampClientMaxScrollY",
-	//         "ampClientScreenHeight",
-	//         "ampClientScreenWidth",
-	//         "ampClientScrollX",
-	//         "ampClientScrollY",
-	//         "ampClientTimestamp",
-	//         "ampClientTimezone",
-	//         "ampGtmEvent",
-	//         "ampPageDownloadTime",
-	//         "ampPageLoadTime",
-	//         "ampPageViewId",
-	//         "ampReferrer",
-	//         "ampTitle",
-	//         "ampTotalEngagedTime",
-	//         "appId",
-	//         "appName",
-	//         "appVersionCode",
-	//         "appVersionName",
-	//         "builtInVariableTypeUnspecified",
-	//         "clickClasses",
-	//         "clickElement",
-	//         "clickId",
-	//         "clickTarget",
-	//         "clickText",
-	//         "clickUrl",
-	//         "containerId",
-	//         "containerVersion",
-	//         "debugMode",
-	//         "deviceName",
-	//         "elementVisibilityFirstTime",
-	//         "elementVisibilityRatio",
-	//         "elementVisibilityRecentTime",
-	//         "elementVisibilityTime",
-	//         "environmentName",
-	//         "errorLine",
-	//         "errorMessage",
-	//         "errorUrl",
-	//         "event",
-	//         "eventName",
-	//         "firebaseEventParameterCampaign",
-	//         "firebaseEventParameterCampaignAclid",
-	//         "firebaseEventParameterCampaignAnid",
-	//         "firebaseEventParameterCampaignClickTimestamp",
-	//         "firebaseEventParameterCampaignContent",
-	//         "firebaseEventParameterCampaignCp1",
-	//         "firebaseEventParameterCampaignGclid",
-	//         "firebaseEventParameterCampaignSource",
-	//         "firebaseEventParameterCampaignTerm",
-	//         "firebaseEventParameterCurrency",
-	//         "firebaseEventParameterDynamicLinkAcceptTime",
-	//         "firebaseEventParameterDynamicLinkLinkid",
-	//         "firebaseEventParameterNotificationMessageDeviceTime",
-	//         "firebaseEventParameterNotificationMessageId",
-	//         "firebaseEventParameterNotificationMessageName",
-	//         "firebaseEventParameterNotificationMessageTime",
-	//         "firebaseEventParameterNotificationTopic",
-	//         "firebaseEventParameterPreviousAppVersion",
-	//         "firebaseEventParameterPreviousOsVersion",
-	//         "firebaseEventParameterPrice",
-	//         "firebaseEventParameterProductId",
-	//         "firebaseEventParameterQuantity",
-	//         "firebaseEventParameterValue",
-	//         "formClasses",
-	//         "formElement",
-	//         "formId",
-	//         "formTarget",
-	//         "formText",
-	//         "formUrl",
-	//         "historySource",
-	//         "htmlId",
-	//         "language",
-	//         "newHistoryFragment",
-	//         "newHistoryState",
-	//         "newHistoryUrl",
-	//         "oldHistoryFragment",
-	//         "oldHistoryState",
-	//         "oldHistoryUrl",
-	//         "osVersion",
-	//         "pageHostname",
-	//         "pagePath",
-	//         "pageUrl",
-	//         "platform",
-	//         "randomNumber",
-	//         "referrer",
-	//         "resolution",
-	//         "scrollDepthDirection",
-	//         "scrollDepthThreshold",
-	//         "scrollDepthUnits",
-	//         "sdkVersion",
-	//         "videoCurrentTime",
-	//         "videoDuration",
-	//         "videoPercent",
-	//         "videoProvider",
-	//         "videoStatus",
-	//         "videoTitle",
-	//         "videoUrl",
-	//         "videoVisible"
-	//       ],
-	//       "enumDescriptions": [
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         ""
+	//         "BUILT_IN_VARIABLE_TYPE_UNSPECIFIED",
+	//         "PAGE_URL",
+	//         "PAGE_HOSTNAME",
+	//         "PAGE_PATH",
+	//         "REFERRER",
+	//         "EVENT",
+	//         "CLICK_ELEMENT",
+	//         "CLICK_CLASSES",
+	//         "CLICK_ID",
+	//         "CLICK_TARGET",
+	//         "CLICK_URL",
+	//         "CLICK_TEXT",
+	//         "FORM_ELEMENT",
+	//         "FORM_CLASSES",
+	//         "FORM_ID",
+	//         "FORM_TARGET",
+	//         "FORM_URL",
+	//         "FORM_TEXT",
+	//         "ERROR_MESSAGE",
+	//         "ERROR_URL",
+	//         "ERROR_LINE",
+	//         "NEW_HISTORY_URL",
+	//         "OLD_HISTORY_URL",
+	//         "NEW_HISTORY_FRAGMENT",
+	//         "OLD_HISTORY_FRAGMENT",
+	//         "NEW_HISTORY_STATE",
+	//         "OLD_HISTORY_STATE",
+	//         "HISTORY_SOURCE",
+	//         "CONTAINER_VERSION",
+	//         "DEBUG_MODE",
+	//         "RANDOM_NUMBER",
+	//         "CONTAINER_ID",
+	//         "APP_ID",
+	//         "APP_NAME",
+	//         "APP_VERSION_CODE",
+	//         "APP_VERSION_NAME",
+	//         "LANGUAGE",
+	//         "OS_VERSION",
+	//         "PLATFORM",
+	//         "SDK_VERSION",
+	//         "DEVICE_NAME",
+	//         "RESOLUTION",
+	//         "ADVERTISER_ID",
+	//         "ADVERTISING_TRACKING_ENABLED",
+	//         "HTML_ID",
+	//         "ENVIRONMENT_NAME",
+	//         "AMP_BROWSER_LANGUAGE",
+	//         "AMP_CANONICAL_PATH",
+	//         "AMP_CANONICAL_URL",
+	//         "AMP_CANONICAL_HOST",
+	//         "AMP_REFERRER",
+	//         "AMP_TITLE",
+	//         "AMP_CLIENT_ID",
+	//         "AMP_CLIENT_TIMEZONE",
+	//         "AMP_CLIENT_TIMESTAMP",
+	//         "AMP_CLIENT_SCREEN_WIDTH",
+	//         "AMP_CLIENT_SCREEN_HEIGHT",
+	//         "AMP_CLIENT_SCROLL_X",
+	//         "AMP_CLIENT_SCROLL_Y",
+	//         "AMP_CLIENT_MAX_SCROLL_X",
+	//         "AMP_CLIENT_MAX_SCROLL_Y",
+	//         "AMP_TOTAL_ENGAGED_TIME",
+	//         "AMP_PAGE_VIEW_ID",
+	//         "AMP_PAGE_LOAD_TIME",
+	//         "AMP_PAGE_DOWNLOAD_TIME",
+	//         "AMP_GTM_EVENT",
+	//         "EVENT_NAME",
+	//         "FIREBASE_EVENT_PARAMETER_CAMPAIGN",
+	//         "FIREBASE_EVENT_PARAMETER_CAMPAIGN_ACLID",
+	//         "FIREBASE_EVENT_PARAMETER_CAMPAIGN_ANID",
+	//         "FIREBASE_EVENT_PARAMETER_CAMPAIGN_CLICK_TIMESTAMP",
+	//         "FIREBASE_EVENT_PARAMETER_CAMPAIGN_CONTENT",
+	//         "FIREBASE_EVENT_PARAMETER_CAMPAIGN_CP1",
+	//         "FIREBASE_EVENT_PARAMETER_CAMPAIGN_GCLID",
+	//         "FIREBASE_EVENT_PARAMETER_CAMPAIGN_SOURCE",
+	//         "FIREBASE_EVENT_PARAMETER_CAMPAIGN_TERM",
+	//         "FIREBASE_EVENT_PARAMETER_CURRENCY",
+	//         "FIREBASE_EVENT_PARAMETER_DYNAMIC_LINK_ACCEPT_TIME",
+	//         "FIREBASE_EVENT_PARAMETER_DYNAMIC_LINK_LINKID",
+	//         "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_DEVICE_TIME",
+	//         "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_ID",
+	//         "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_NAME",
+	//         "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_TIME",
+	//         "FIREBASE_EVENT_PARAMETER_NOTIFICATION_TOPIC",
+	//         "FIREBASE_EVENT_PARAMETER_PREVIOUS_APP_VERSION",
+	//         "FIREBASE_EVENT_PARAMETER_PREVIOUS_OS_VERSION",
+	//         "FIREBASE_EVENT_PARAMETER_PRICE",
+	//         "FIREBASE_EVENT_PARAMETER_PRODUCT_ID",
+	//         "FIREBASE_EVENT_PARAMETER_QUANTITY",
+	//         "FIREBASE_EVENT_PARAMETER_VALUE",
+	//         "VIDEO_PROVIDER",
+	//         "VIDEO_URL",
+	//         "VIDEO_TITLE",
+	//         "VIDEO_DURATION",
+	//         "VIDEO_PERCENT",
+	//         "VIDEO_VISIBLE",
+	//         "VIDEO_STATUS",
+	//         "VIDEO_CURRENT_TIME",
+	//         "SCROLL_DEPTH_THRESHOLD",
+	//         "SCROLL_DEPTH_UNITS",
+	//         "SCROLL_DEPTH_DIRECTION",
+	//         "ELEMENT_VISIBILITY_RATIO",
+	//         "ELEMENT_VISIBILITY_TIME",
+	//         "ELEMENT_VISIBILITY_FIRST_TIME",
+	//         "ELEMENT_VISIBILITY_RECENT_TIME"
 	//       ],
 	//       "location": "query",
 	//       "repeated": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+parent}/built_in_variables",
+	//   "path": "tagmanager/v2/{+parent}/built_in_variables",
 	//   "response": {
 	//     "$ref": "CreateBuiltInVariableResponse"
 	//   },
@@ -8321,111 +8524,111 @@
 // variables to delete.
 //
 // Possible values:
-//   "advertiserId"
-//   "advertisingTrackingEnabled"
-//   "ampBrowserLanguage"
-//   "ampCanonicalHost"
-//   "ampCanonicalPath"
-//   "ampCanonicalUrl"
-//   "ampClientId"
-//   "ampClientMaxScrollX"
-//   "ampClientMaxScrollY"
-//   "ampClientScreenHeight"
-//   "ampClientScreenWidth"
-//   "ampClientScrollX"
-//   "ampClientScrollY"
-//   "ampClientTimestamp"
-//   "ampClientTimezone"
-//   "ampGtmEvent"
-//   "ampPageDownloadTime"
-//   "ampPageLoadTime"
-//   "ampPageViewId"
-//   "ampReferrer"
-//   "ampTitle"
-//   "ampTotalEngagedTime"
-//   "appId"
-//   "appName"
-//   "appVersionCode"
-//   "appVersionName"
-//   "builtInVariableTypeUnspecified"
-//   "clickClasses"
-//   "clickElement"
-//   "clickId"
-//   "clickTarget"
-//   "clickText"
-//   "clickUrl"
-//   "containerId"
-//   "containerVersion"
-//   "debugMode"
-//   "deviceName"
-//   "elementVisibilityFirstTime"
-//   "elementVisibilityRatio"
-//   "elementVisibilityRecentTime"
-//   "elementVisibilityTime"
-//   "environmentName"
-//   "errorLine"
-//   "errorMessage"
-//   "errorUrl"
-//   "event"
-//   "eventName"
-//   "firebaseEventParameterCampaign"
-//   "firebaseEventParameterCampaignAclid"
-//   "firebaseEventParameterCampaignAnid"
-//   "firebaseEventParameterCampaignClickTimestamp"
-//   "firebaseEventParameterCampaignContent"
-//   "firebaseEventParameterCampaignCp1"
-//   "firebaseEventParameterCampaignGclid"
-//   "firebaseEventParameterCampaignSource"
-//   "firebaseEventParameterCampaignTerm"
-//   "firebaseEventParameterCurrency"
-//   "firebaseEventParameterDynamicLinkAcceptTime"
-//   "firebaseEventParameterDynamicLinkLinkid"
-//   "firebaseEventParameterNotificationMessageDeviceTime"
-//   "firebaseEventParameterNotificationMessageId"
-//   "firebaseEventParameterNotificationMessageName"
-//   "firebaseEventParameterNotificationMessageTime"
-//   "firebaseEventParameterNotificationTopic"
-//   "firebaseEventParameterPreviousAppVersion"
-//   "firebaseEventParameterPreviousOsVersion"
-//   "firebaseEventParameterPrice"
-//   "firebaseEventParameterProductId"
-//   "firebaseEventParameterQuantity"
-//   "firebaseEventParameterValue"
-//   "formClasses"
-//   "formElement"
-//   "formId"
-//   "formTarget"
-//   "formText"
-//   "formUrl"
-//   "historySource"
-//   "htmlId"
-//   "language"
-//   "newHistoryFragment"
-//   "newHistoryState"
-//   "newHistoryUrl"
-//   "oldHistoryFragment"
-//   "oldHistoryState"
-//   "oldHistoryUrl"
-//   "osVersion"
-//   "pageHostname"
-//   "pagePath"
-//   "pageUrl"
-//   "platform"
-//   "randomNumber"
-//   "referrer"
-//   "resolution"
-//   "scrollDepthDirection"
-//   "scrollDepthThreshold"
-//   "scrollDepthUnits"
-//   "sdkVersion"
-//   "videoCurrentTime"
-//   "videoDuration"
-//   "videoPercent"
-//   "videoProvider"
-//   "videoStatus"
-//   "videoTitle"
-//   "videoUrl"
-//   "videoVisible"
+//   "BUILT_IN_VARIABLE_TYPE_UNSPECIFIED"
+//   "PAGE_URL"
+//   "PAGE_HOSTNAME"
+//   "PAGE_PATH"
+//   "REFERRER"
+//   "EVENT"
+//   "CLICK_ELEMENT"
+//   "CLICK_CLASSES"
+//   "CLICK_ID"
+//   "CLICK_TARGET"
+//   "CLICK_URL"
+//   "CLICK_TEXT"
+//   "FORM_ELEMENT"
+//   "FORM_CLASSES"
+//   "FORM_ID"
+//   "FORM_TARGET"
+//   "FORM_URL"
+//   "FORM_TEXT"
+//   "ERROR_MESSAGE"
+//   "ERROR_URL"
+//   "ERROR_LINE"
+//   "NEW_HISTORY_URL"
+//   "OLD_HISTORY_URL"
+//   "NEW_HISTORY_FRAGMENT"
+//   "OLD_HISTORY_FRAGMENT"
+//   "NEW_HISTORY_STATE"
+//   "OLD_HISTORY_STATE"
+//   "HISTORY_SOURCE"
+//   "CONTAINER_VERSION"
+//   "DEBUG_MODE"
+//   "RANDOM_NUMBER"
+//   "CONTAINER_ID"
+//   "APP_ID"
+//   "APP_NAME"
+//   "APP_VERSION_CODE"
+//   "APP_VERSION_NAME"
+//   "LANGUAGE"
+//   "OS_VERSION"
+//   "PLATFORM"
+//   "SDK_VERSION"
+//   "DEVICE_NAME"
+//   "RESOLUTION"
+//   "ADVERTISER_ID"
+//   "ADVERTISING_TRACKING_ENABLED"
+//   "HTML_ID"
+//   "ENVIRONMENT_NAME"
+//   "AMP_BROWSER_LANGUAGE"
+//   "AMP_CANONICAL_PATH"
+//   "AMP_CANONICAL_URL"
+//   "AMP_CANONICAL_HOST"
+//   "AMP_REFERRER"
+//   "AMP_TITLE"
+//   "AMP_CLIENT_ID"
+//   "AMP_CLIENT_TIMEZONE"
+//   "AMP_CLIENT_TIMESTAMP"
+//   "AMP_CLIENT_SCREEN_WIDTH"
+//   "AMP_CLIENT_SCREEN_HEIGHT"
+//   "AMP_CLIENT_SCROLL_X"
+//   "AMP_CLIENT_SCROLL_Y"
+//   "AMP_CLIENT_MAX_SCROLL_X"
+//   "AMP_CLIENT_MAX_SCROLL_Y"
+//   "AMP_TOTAL_ENGAGED_TIME"
+//   "AMP_PAGE_VIEW_ID"
+//   "AMP_PAGE_LOAD_TIME"
+//   "AMP_PAGE_DOWNLOAD_TIME"
+//   "AMP_GTM_EVENT"
+//   "EVENT_NAME"
+//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN"
+//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN_ACLID"
+//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN_ANID"
+//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN_CLICK_TIMESTAMP"
+//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN_CONTENT"
+//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN_CP1"
+//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN_GCLID"
+//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN_SOURCE"
+//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN_TERM"
+//   "FIREBASE_EVENT_PARAMETER_CURRENCY"
+//   "FIREBASE_EVENT_PARAMETER_DYNAMIC_LINK_ACCEPT_TIME"
+//   "FIREBASE_EVENT_PARAMETER_DYNAMIC_LINK_LINKID"
+//   "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_DEVICE_TIME"
+//   "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_ID"
+//   "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_NAME"
+//   "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_TIME"
+//   "FIREBASE_EVENT_PARAMETER_NOTIFICATION_TOPIC"
+//   "FIREBASE_EVENT_PARAMETER_PREVIOUS_APP_VERSION"
+//   "FIREBASE_EVENT_PARAMETER_PREVIOUS_OS_VERSION"
+//   "FIREBASE_EVENT_PARAMETER_PRICE"
+//   "FIREBASE_EVENT_PARAMETER_PRODUCT_ID"
+//   "FIREBASE_EVENT_PARAMETER_QUANTITY"
+//   "FIREBASE_EVENT_PARAMETER_VALUE"
+//   "VIDEO_PROVIDER"
+//   "VIDEO_URL"
+//   "VIDEO_TITLE"
+//   "VIDEO_DURATION"
+//   "VIDEO_PERCENT"
+//   "VIDEO_VISIBLE"
+//   "VIDEO_STATUS"
+//   "VIDEO_CURRENT_TIME"
+//   "SCROLL_DEPTH_THRESHOLD"
+//   "SCROLL_DEPTH_UNITS"
+//   "SCROLL_DEPTH_DIRECTION"
+//   "ELEMENT_VISIBILITY_RATIO"
+//   "ELEMENT_VISIBILITY_TIME"
+//   "ELEMENT_VISIBILITY_FIRST_TIME"
+//   "ELEMENT_VISIBILITY_RECENT_TIME"
 func (c *AccountsContainersWorkspacesBuiltInVariablesDeleteCall) Type(type_ ...string) *AccountsContainersWorkspacesBuiltInVariablesDeleteCall {
 	c.urlParams_.SetMulti("type", append([]string{}, type_...))
 	return c
@@ -8465,7 +8668,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("DELETE", urls, body)
 	if err != nil {
@@ -8492,6 +8695,7 @@
 	return nil
 	// {
 	//   "description": "Deletes one or more GTM Built-In Variables.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/built_in_variables",
 	//   "httpMethod": "DELETE",
 	//   "id": "tagmanager.accounts.containers.workspaces.built_in_variables.delete",
 	//   "parameterOrder": [
@@ -8499,233 +8703,127 @@
 	//   ],
 	//   "parameters": {
 	//     "path": {
-	//       "description": "GTM BuiltInVariable's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/built_in_variables",
+	//       "description": "GTM BuiltInVariable's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/built_in_variables",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/built_in_variables$",
 	//       "required": true,
 	//       "type": "string"
 	//     },
 	//     "type": {
 	//       "description": "The types of built-in variables to delete.",
 	//       "enum": [
-	//         "advertiserId",
-	//         "advertisingTrackingEnabled",
-	//         "ampBrowserLanguage",
-	//         "ampCanonicalHost",
-	//         "ampCanonicalPath",
-	//         "ampCanonicalUrl",
-	//         "ampClientId",
-	//         "ampClientMaxScrollX",
-	//         "ampClientMaxScrollY",
-	//         "ampClientScreenHeight",
-	//         "ampClientScreenWidth",
-	//         "ampClientScrollX",
-	//         "ampClientScrollY",
-	//         "ampClientTimestamp",
-	//         "ampClientTimezone",
-	//         "ampGtmEvent",
-	//         "ampPageDownloadTime",
-	//         "ampPageLoadTime",
-	//         "ampPageViewId",
-	//         "ampReferrer",
-	//         "ampTitle",
-	//         "ampTotalEngagedTime",
-	//         "appId",
-	//         "appName",
-	//         "appVersionCode",
-	//         "appVersionName",
-	//         "builtInVariableTypeUnspecified",
-	//         "clickClasses",
-	//         "clickElement",
-	//         "clickId",
-	//         "clickTarget",
-	//         "clickText",
-	//         "clickUrl",
-	//         "containerId",
-	//         "containerVersion",
-	//         "debugMode",
-	//         "deviceName",
-	//         "elementVisibilityFirstTime",
-	//         "elementVisibilityRatio",
-	//         "elementVisibilityRecentTime",
-	//         "elementVisibilityTime",
-	//         "environmentName",
-	//         "errorLine",
-	//         "errorMessage",
-	//         "errorUrl",
-	//         "event",
-	//         "eventName",
-	//         "firebaseEventParameterCampaign",
-	//         "firebaseEventParameterCampaignAclid",
-	//         "firebaseEventParameterCampaignAnid",
-	//         "firebaseEventParameterCampaignClickTimestamp",
-	//         "firebaseEventParameterCampaignContent",
-	//         "firebaseEventParameterCampaignCp1",
-	//         "firebaseEventParameterCampaignGclid",
-	//         "firebaseEventParameterCampaignSource",
-	//         "firebaseEventParameterCampaignTerm",
-	//         "firebaseEventParameterCurrency",
-	//         "firebaseEventParameterDynamicLinkAcceptTime",
-	//         "firebaseEventParameterDynamicLinkLinkid",
-	//         "firebaseEventParameterNotificationMessageDeviceTime",
-	//         "firebaseEventParameterNotificationMessageId",
-	//         "firebaseEventParameterNotificationMessageName",
-	//         "firebaseEventParameterNotificationMessageTime",
-	//         "firebaseEventParameterNotificationTopic",
-	//         "firebaseEventParameterPreviousAppVersion",
-	//         "firebaseEventParameterPreviousOsVersion",
-	//         "firebaseEventParameterPrice",
-	//         "firebaseEventParameterProductId",
-	//         "firebaseEventParameterQuantity",
-	//         "firebaseEventParameterValue",
-	//         "formClasses",
-	//         "formElement",
-	//         "formId",
-	//         "formTarget",
-	//         "formText",
-	//         "formUrl",
-	//         "historySource",
-	//         "htmlId",
-	//         "language",
-	//         "newHistoryFragment",
-	//         "newHistoryState",
-	//         "newHistoryUrl",
-	//         "oldHistoryFragment",
-	//         "oldHistoryState",
-	//         "oldHistoryUrl",
-	//         "osVersion",
-	//         "pageHostname",
-	//         "pagePath",
-	//         "pageUrl",
-	//         "platform",
-	//         "randomNumber",
-	//         "referrer",
-	//         "resolution",
-	//         "scrollDepthDirection",
-	//         "scrollDepthThreshold",
-	//         "scrollDepthUnits",
-	//         "sdkVersion",
-	//         "videoCurrentTime",
-	//         "videoDuration",
-	//         "videoPercent",
-	//         "videoProvider",
-	//         "videoStatus",
-	//         "videoTitle",
-	//         "videoUrl",
-	//         "videoVisible"
-	//       ],
-	//       "enumDescriptions": [
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         ""
+	//         "BUILT_IN_VARIABLE_TYPE_UNSPECIFIED",
+	//         "PAGE_URL",
+	//         "PAGE_HOSTNAME",
+	//         "PAGE_PATH",
+	//         "REFERRER",
+	//         "EVENT",
+	//         "CLICK_ELEMENT",
+	//         "CLICK_CLASSES",
+	//         "CLICK_ID",
+	//         "CLICK_TARGET",
+	//         "CLICK_URL",
+	//         "CLICK_TEXT",
+	//         "FORM_ELEMENT",
+	//         "FORM_CLASSES",
+	//         "FORM_ID",
+	//         "FORM_TARGET",
+	//         "FORM_URL",
+	//         "FORM_TEXT",
+	//         "ERROR_MESSAGE",
+	//         "ERROR_URL",
+	//         "ERROR_LINE",
+	//         "NEW_HISTORY_URL",
+	//         "OLD_HISTORY_URL",
+	//         "NEW_HISTORY_FRAGMENT",
+	//         "OLD_HISTORY_FRAGMENT",
+	//         "NEW_HISTORY_STATE",
+	//         "OLD_HISTORY_STATE",
+	//         "HISTORY_SOURCE",
+	//         "CONTAINER_VERSION",
+	//         "DEBUG_MODE",
+	//         "RANDOM_NUMBER",
+	//         "CONTAINER_ID",
+	//         "APP_ID",
+	//         "APP_NAME",
+	//         "APP_VERSION_CODE",
+	//         "APP_VERSION_NAME",
+	//         "LANGUAGE",
+	//         "OS_VERSION",
+	//         "PLATFORM",
+	//         "SDK_VERSION",
+	//         "DEVICE_NAME",
+	//         "RESOLUTION",
+	//         "ADVERTISER_ID",
+	//         "ADVERTISING_TRACKING_ENABLED",
+	//         "HTML_ID",
+	//         "ENVIRONMENT_NAME",
+	//         "AMP_BROWSER_LANGUAGE",
+	//         "AMP_CANONICAL_PATH",
+	//         "AMP_CANONICAL_URL",
+	//         "AMP_CANONICAL_HOST",
+	//         "AMP_REFERRER",
+	//         "AMP_TITLE",
+	//         "AMP_CLIENT_ID",
+	//         "AMP_CLIENT_TIMEZONE",
+	//         "AMP_CLIENT_TIMESTAMP",
+	//         "AMP_CLIENT_SCREEN_WIDTH",
+	//         "AMP_CLIENT_SCREEN_HEIGHT",
+	//         "AMP_CLIENT_SCROLL_X",
+	//         "AMP_CLIENT_SCROLL_Y",
+	//         "AMP_CLIENT_MAX_SCROLL_X",
+	//         "AMP_CLIENT_MAX_SCROLL_Y",
+	//         "AMP_TOTAL_ENGAGED_TIME",
+	//         "AMP_PAGE_VIEW_ID",
+	//         "AMP_PAGE_LOAD_TIME",
+	//         "AMP_PAGE_DOWNLOAD_TIME",
+	//         "AMP_GTM_EVENT",
+	//         "EVENT_NAME",
+	//         "FIREBASE_EVENT_PARAMETER_CAMPAIGN",
+	//         "FIREBASE_EVENT_PARAMETER_CAMPAIGN_ACLID",
+	//         "FIREBASE_EVENT_PARAMETER_CAMPAIGN_ANID",
+	//         "FIREBASE_EVENT_PARAMETER_CAMPAIGN_CLICK_TIMESTAMP",
+	//         "FIREBASE_EVENT_PARAMETER_CAMPAIGN_CONTENT",
+	//         "FIREBASE_EVENT_PARAMETER_CAMPAIGN_CP1",
+	//         "FIREBASE_EVENT_PARAMETER_CAMPAIGN_GCLID",
+	//         "FIREBASE_EVENT_PARAMETER_CAMPAIGN_SOURCE",
+	//         "FIREBASE_EVENT_PARAMETER_CAMPAIGN_TERM",
+	//         "FIREBASE_EVENT_PARAMETER_CURRENCY",
+	//         "FIREBASE_EVENT_PARAMETER_DYNAMIC_LINK_ACCEPT_TIME",
+	//         "FIREBASE_EVENT_PARAMETER_DYNAMIC_LINK_LINKID",
+	//         "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_DEVICE_TIME",
+	//         "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_ID",
+	//         "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_NAME",
+	//         "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_TIME",
+	//         "FIREBASE_EVENT_PARAMETER_NOTIFICATION_TOPIC",
+	//         "FIREBASE_EVENT_PARAMETER_PREVIOUS_APP_VERSION",
+	//         "FIREBASE_EVENT_PARAMETER_PREVIOUS_OS_VERSION",
+	//         "FIREBASE_EVENT_PARAMETER_PRICE",
+	//         "FIREBASE_EVENT_PARAMETER_PRODUCT_ID",
+	//         "FIREBASE_EVENT_PARAMETER_QUANTITY",
+	//         "FIREBASE_EVENT_PARAMETER_VALUE",
+	//         "VIDEO_PROVIDER",
+	//         "VIDEO_URL",
+	//         "VIDEO_TITLE",
+	//         "VIDEO_DURATION",
+	//         "VIDEO_PERCENT",
+	//         "VIDEO_VISIBLE",
+	//         "VIDEO_STATUS",
+	//         "VIDEO_CURRENT_TIME",
+	//         "SCROLL_DEPTH_THRESHOLD",
+	//         "SCROLL_DEPTH_UNITS",
+	//         "SCROLL_DEPTH_DIRECTION",
+	//         "ELEMENT_VISIBILITY_RATIO",
+	//         "ELEMENT_VISIBILITY_TIME",
+	//         "ELEMENT_VISIBILITY_FIRST_TIME",
+	//         "ELEMENT_VISIBILITY_RECENT_TIME"
 	//       ],
 	//       "location": "query",
 	//       "repeated": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "scopes": [
 	//     "https://www.googleapis.com/auth/tagmanager.edit.containers"
 	//   ]
@@ -8805,7 +8903,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+parent}/built_in_variables")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+parent}/built_in_variables")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("GET", urls, body)
 	if err != nil {
@@ -8858,6 +8956,7 @@
 	return ret, nil
 	// {
 	//   "description": "Lists all the enabled Built-In Variables of a GTM Container.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/built_in_variables",
 	//   "httpMethod": "GET",
 	//   "id": "tagmanager.accounts.containers.workspaces.built_in_variables.list",
 	//   "parameterOrder": [
@@ -8870,13 +8969,14 @@
 	//       "type": "string"
 	//     },
 	//     "parent": {
-	//       "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+	//       "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+parent}/built_in_variables",
+	//   "path": "tagmanager/v2/{+parent}/built_in_variables",
 	//   "response": {
 	//     "$ref": "ListEnabledBuiltInVariablesResponse"
 	//   },
@@ -8931,111 +9031,111 @@
 // variable to revert.
 //
 // Possible values:
-//   "advertiserId"
-//   "advertisingTrackingEnabled"
-//   "ampBrowserLanguage"
-//   "ampCanonicalHost"
-//   "ampCanonicalPath"
-//   "ampCanonicalUrl"
-//   "ampClientId"
-//   "ampClientMaxScrollX"
-//   "ampClientMaxScrollY"
-//   "ampClientScreenHeight"
-//   "ampClientScreenWidth"
-//   "ampClientScrollX"
-//   "ampClientScrollY"
-//   "ampClientTimestamp"
-//   "ampClientTimezone"
-//   "ampGtmEvent"
-//   "ampPageDownloadTime"
-//   "ampPageLoadTime"
-//   "ampPageViewId"
-//   "ampReferrer"
-//   "ampTitle"
-//   "ampTotalEngagedTime"
-//   "appId"
-//   "appName"
-//   "appVersionCode"
-//   "appVersionName"
-//   "builtInVariableTypeUnspecified"
-//   "clickClasses"
-//   "clickElement"
-//   "clickId"
-//   "clickTarget"
-//   "clickText"
-//   "clickUrl"
-//   "containerId"
-//   "containerVersion"
-//   "debugMode"
-//   "deviceName"
-//   "elementVisibilityFirstTime"
-//   "elementVisibilityRatio"
-//   "elementVisibilityRecentTime"
-//   "elementVisibilityTime"
-//   "environmentName"
-//   "errorLine"
-//   "errorMessage"
-//   "errorUrl"
-//   "event"
-//   "eventName"
-//   "firebaseEventParameterCampaign"
-//   "firebaseEventParameterCampaignAclid"
-//   "firebaseEventParameterCampaignAnid"
-//   "firebaseEventParameterCampaignClickTimestamp"
-//   "firebaseEventParameterCampaignContent"
-//   "firebaseEventParameterCampaignCp1"
-//   "firebaseEventParameterCampaignGclid"
-//   "firebaseEventParameterCampaignSource"
-//   "firebaseEventParameterCampaignTerm"
-//   "firebaseEventParameterCurrency"
-//   "firebaseEventParameterDynamicLinkAcceptTime"
-//   "firebaseEventParameterDynamicLinkLinkid"
-//   "firebaseEventParameterNotificationMessageDeviceTime"
-//   "firebaseEventParameterNotificationMessageId"
-//   "firebaseEventParameterNotificationMessageName"
-//   "firebaseEventParameterNotificationMessageTime"
-//   "firebaseEventParameterNotificationTopic"
-//   "firebaseEventParameterPreviousAppVersion"
-//   "firebaseEventParameterPreviousOsVersion"
-//   "firebaseEventParameterPrice"
-//   "firebaseEventParameterProductId"
-//   "firebaseEventParameterQuantity"
-//   "firebaseEventParameterValue"
-//   "formClasses"
-//   "formElement"
-//   "formId"
-//   "formTarget"
-//   "formText"
-//   "formUrl"
-//   "historySource"
-//   "htmlId"
-//   "language"
-//   "newHistoryFragment"
-//   "newHistoryState"
-//   "newHistoryUrl"
-//   "oldHistoryFragment"
-//   "oldHistoryState"
-//   "oldHistoryUrl"
-//   "osVersion"
-//   "pageHostname"
-//   "pagePath"
-//   "pageUrl"
-//   "platform"
-//   "randomNumber"
-//   "referrer"
-//   "resolution"
-//   "scrollDepthDirection"
-//   "scrollDepthThreshold"
-//   "scrollDepthUnits"
-//   "sdkVersion"
-//   "videoCurrentTime"
-//   "videoDuration"
-//   "videoPercent"
-//   "videoProvider"
-//   "videoStatus"
-//   "videoTitle"
-//   "videoUrl"
-//   "videoVisible"
+//   "BUILT_IN_VARIABLE_TYPE_UNSPECIFIED"
+//   "PAGE_URL"
+//   "PAGE_HOSTNAME"
+//   "PAGE_PATH"
+//   "REFERRER"
+//   "EVENT"
+//   "CLICK_ELEMENT"
+//   "CLICK_CLASSES"
+//   "CLICK_ID"
+//   "CLICK_TARGET"
+//   "CLICK_URL"
+//   "CLICK_TEXT"
+//   "FORM_ELEMENT"
+//   "FORM_CLASSES"
+//   "FORM_ID"
+//   "FORM_TARGET"
+//   "FORM_URL"
+//   "FORM_TEXT"
+//   "ERROR_MESSAGE"
+//   "ERROR_URL"
+//   "ERROR_LINE"
+//   "NEW_HISTORY_URL"
+//   "OLD_HISTORY_URL"
+//   "NEW_HISTORY_FRAGMENT"
+//   "OLD_HISTORY_FRAGMENT"
+//   "NEW_HISTORY_STATE"
+//   "OLD_HISTORY_STATE"
+//   "HISTORY_SOURCE"
+//   "CONTAINER_VERSION"
+//   "DEBUG_MODE"
+//   "RANDOM_NUMBER"
+//   "CONTAINER_ID"
+//   "APP_ID"
+//   "APP_NAME"
+//   "APP_VERSION_CODE"
+//   "APP_VERSION_NAME"
+//   "LANGUAGE"
+//   "OS_VERSION"
+//   "PLATFORM"
+//   "SDK_VERSION"
+//   "DEVICE_NAME"
+//   "RESOLUTION"
+//   "ADVERTISER_ID"
+//   "ADVERTISING_TRACKING_ENABLED"
+//   "HTML_ID"
+//   "ENVIRONMENT_NAME"
+//   "AMP_BROWSER_LANGUAGE"
+//   "AMP_CANONICAL_PATH"
+//   "AMP_CANONICAL_URL"
+//   "AMP_CANONICAL_HOST"
+//   "AMP_REFERRER"
+//   "AMP_TITLE"
+//   "AMP_CLIENT_ID"
+//   "AMP_CLIENT_TIMEZONE"
+//   "AMP_CLIENT_TIMESTAMP"
+//   "AMP_CLIENT_SCREEN_WIDTH"
+//   "AMP_CLIENT_SCREEN_HEIGHT"
+//   "AMP_CLIENT_SCROLL_X"
+//   "AMP_CLIENT_SCROLL_Y"
+//   "AMP_CLIENT_MAX_SCROLL_X"
+//   "AMP_CLIENT_MAX_SCROLL_Y"
+//   "AMP_TOTAL_ENGAGED_TIME"
+//   "AMP_PAGE_VIEW_ID"
+//   "AMP_PAGE_LOAD_TIME"
+//   "AMP_PAGE_DOWNLOAD_TIME"
+//   "AMP_GTM_EVENT"
+//   "EVENT_NAME"
+//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN"
+//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN_ACLID"
+//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN_ANID"
+//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN_CLICK_TIMESTAMP"
+//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN_CONTENT"
+//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN_CP1"
+//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN_GCLID"
+//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN_SOURCE"
+//   "FIREBASE_EVENT_PARAMETER_CAMPAIGN_TERM"
+//   "FIREBASE_EVENT_PARAMETER_CURRENCY"
+//   "FIREBASE_EVENT_PARAMETER_DYNAMIC_LINK_ACCEPT_TIME"
+//   "FIREBASE_EVENT_PARAMETER_DYNAMIC_LINK_LINKID"
+//   "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_DEVICE_TIME"
+//   "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_ID"
+//   "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_NAME"
+//   "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_TIME"
+//   "FIREBASE_EVENT_PARAMETER_NOTIFICATION_TOPIC"
+//   "FIREBASE_EVENT_PARAMETER_PREVIOUS_APP_VERSION"
+//   "FIREBASE_EVENT_PARAMETER_PREVIOUS_OS_VERSION"
+//   "FIREBASE_EVENT_PARAMETER_PRICE"
+//   "FIREBASE_EVENT_PARAMETER_PRODUCT_ID"
+//   "FIREBASE_EVENT_PARAMETER_QUANTITY"
+//   "FIREBASE_EVENT_PARAMETER_VALUE"
+//   "VIDEO_PROVIDER"
+//   "VIDEO_URL"
+//   "VIDEO_TITLE"
+//   "VIDEO_DURATION"
+//   "VIDEO_PERCENT"
+//   "VIDEO_VISIBLE"
+//   "VIDEO_STATUS"
+//   "VIDEO_CURRENT_TIME"
+//   "SCROLL_DEPTH_THRESHOLD"
+//   "SCROLL_DEPTH_UNITS"
+//   "SCROLL_DEPTH_DIRECTION"
+//   "ELEMENT_VISIBILITY_RATIO"
+//   "ELEMENT_VISIBILITY_TIME"
+//   "ELEMENT_VISIBILITY_FIRST_TIME"
+//   "ELEMENT_VISIBILITY_RECENT_TIME"
 func (c *AccountsContainersWorkspacesBuiltInVariablesRevertCall) Type(type_ string) *AccountsContainersWorkspacesBuiltInVariablesRevertCall {
 	c.urlParams_.Set("type", type_)
 	return c
@@ -9075,7 +9175,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}/built_in_variables:revert")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}/built_in_variables:revert")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("POST", urls, body)
 	if err != nil {
@@ -9127,6 +9227,7 @@
 	return ret, nil
 	// {
 	//   "description": "Reverts changes to a GTM Built-In Variables in a GTM Workspace.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/built_in_variables:revert",
 	//   "httpMethod": "POST",
 	//   "id": "tagmanager.accounts.containers.workspaces.built_in_variables.revert",
 	//   "parameterOrder": [
@@ -9134,232 +9235,126 @@
 	//   ],
 	//   "parameters": {
 	//     "path": {
-	//       "description": "GTM BuiltInVariable's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/built_in_variables",
+	//       "description": "GTM BuiltInVariable's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/built_in_variables",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     },
 	//     "type": {
 	//       "description": "The type of built-in variable to revert.",
 	//       "enum": [
-	//         "advertiserId",
-	//         "advertisingTrackingEnabled",
-	//         "ampBrowserLanguage",
-	//         "ampCanonicalHost",
-	//         "ampCanonicalPath",
-	//         "ampCanonicalUrl",
-	//         "ampClientId",
-	//         "ampClientMaxScrollX",
-	//         "ampClientMaxScrollY",
-	//         "ampClientScreenHeight",
-	//         "ampClientScreenWidth",
-	//         "ampClientScrollX",
-	//         "ampClientScrollY",
-	//         "ampClientTimestamp",
-	//         "ampClientTimezone",
-	//         "ampGtmEvent",
-	//         "ampPageDownloadTime",
-	//         "ampPageLoadTime",
-	//         "ampPageViewId",
-	//         "ampReferrer",
-	//         "ampTitle",
-	//         "ampTotalEngagedTime",
-	//         "appId",
-	//         "appName",
-	//         "appVersionCode",
-	//         "appVersionName",
-	//         "builtInVariableTypeUnspecified",
-	//         "clickClasses",
-	//         "clickElement",
-	//         "clickId",
-	//         "clickTarget",
-	//         "clickText",
-	//         "clickUrl",
-	//         "containerId",
-	//         "containerVersion",
-	//         "debugMode",
-	//         "deviceName",
-	//         "elementVisibilityFirstTime",
-	//         "elementVisibilityRatio",
-	//         "elementVisibilityRecentTime",
-	//         "elementVisibilityTime",
-	//         "environmentName",
-	//         "errorLine",
-	//         "errorMessage",
-	//         "errorUrl",
-	//         "event",
-	//         "eventName",
-	//         "firebaseEventParameterCampaign",
-	//         "firebaseEventParameterCampaignAclid",
-	//         "firebaseEventParameterCampaignAnid",
-	//         "firebaseEventParameterCampaignClickTimestamp",
-	//         "firebaseEventParameterCampaignContent",
-	//         "firebaseEventParameterCampaignCp1",
-	//         "firebaseEventParameterCampaignGclid",
-	//         "firebaseEventParameterCampaignSource",
-	//         "firebaseEventParameterCampaignTerm",
-	//         "firebaseEventParameterCurrency",
-	//         "firebaseEventParameterDynamicLinkAcceptTime",
-	//         "firebaseEventParameterDynamicLinkLinkid",
-	//         "firebaseEventParameterNotificationMessageDeviceTime",
-	//         "firebaseEventParameterNotificationMessageId",
-	//         "firebaseEventParameterNotificationMessageName",
-	//         "firebaseEventParameterNotificationMessageTime",
-	//         "firebaseEventParameterNotificationTopic",
-	//         "firebaseEventParameterPreviousAppVersion",
-	//         "firebaseEventParameterPreviousOsVersion",
-	//         "firebaseEventParameterPrice",
-	//         "firebaseEventParameterProductId",
-	//         "firebaseEventParameterQuantity",
-	//         "firebaseEventParameterValue",
-	//         "formClasses",
-	//         "formElement",
-	//         "formId",
-	//         "formTarget",
-	//         "formText",
-	//         "formUrl",
-	//         "historySource",
-	//         "htmlId",
-	//         "language",
-	//         "newHistoryFragment",
-	//         "newHistoryState",
-	//         "newHistoryUrl",
-	//         "oldHistoryFragment",
-	//         "oldHistoryState",
-	//         "oldHistoryUrl",
-	//         "osVersion",
-	//         "pageHostname",
-	//         "pagePath",
-	//         "pageUrl",
-	//         "platform",
-	//         "randomNumber",
-	//         "referrer",
-	//         "resolution",
-	//         "scrollDepthDirection",
-	//         "scrollDepthThreshold",
-	//         "scrollDepthUnits",
-	//         "sdkVersion",
-	//         "videoCurrentTime",
-	//         "videoDuration",
-	//         "videoPercent",
-	//         "videoProvider",
-	//         "videoStatus",
-	//         "videoTitle",
-	//         "videoUrl",
-	//         "videoVisible"
-	//       ],
-	//       "enumDescriptions": [
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         "",
-	//         ""
+	//         "BUILT_IN_VARIABLE_TYPE_UNSPECIFIED",
+	//         "PAGE_URL",
+	//         "PAGE_HOSTNAME",
+	//         "PAGE_PATH",
+	//         "REFERRER",
+	//         "EVENT",
+	//         "CLICK_ELEMENT",
+	//         "CLICK_CLASSES",
+	//         "CLICK_ID",
+	//         "CLICK_TARGET",
+	//         "CLICK_URL",
+	//         "CLICK_TEXT",
+	//         "FORM_ELEMENT",
+	//         "FORM_CLASSES",
+	//         "FORM_ID",
+	//         "FORM_TARGET",
+	//         "FORM_URL",
+	//         "FORM_TEXT",
+	//         "ERROR_MESSAGE",
+	//         "ERROR_URL",
+	//         "ERROR_LINE",
+	//         "NEW_HISTORY_URL",
+	//         "OLD_HISTORY_URL",
+	//         "NEW_HISTORY_FRAGMENT",
+	//         "OLD_HISTORY_FRAGMENT",
+	//         "NEW_HISTORY_STATE",
+	//         "OLD_HISTORY_STATE",
+	//         "HISTORY_SOURCE",
+	//         "CONTAINER_VERSION",
+	//         "DEBUG_MODE",
+	//         "RANDOM_NUMBER",
+	//         "CONTAINER_ID",
+	//         "APP_ID",
+	//         "APP_NAME",
+	//         "APP_VERSION_CODE",
+	//         "APP_VERSION_NAME",
+	//         "LANGUAGE",
+	//         "OS_VERSION",
+	//         "PLATFORM",
+	//         "SDK_VERSION",
+	//         "DEVICE_NAME",
+	//         "RESOLUTION",
+	//         "ADVERTISER_ID",
+	//         "ADVERTISING_TRACKING_ENABLED",
+	//         "HTML_ID",
+	//         "ENVIRONMENT_NAME",
+	//         "AMP_BROWSER_LANGUAGE",
+	//         "AMP_CANONICAL_PATH",
+	//         "AMP_CANONICAL_URL",
+	//         "AMP_CANONICAL_HOST",
+	//         "AMP_REFERRER",
+	//         "AMP_TITLE",
+	//         "AMP_CLIENT_ID",
+	//         "AMP_CLIENT_TIMEZONE",
+	//         "AMP_CLIENT_TIMESTAMP",
+	//         "AMP_CLIENT_SCREEN_WIDTH",
+	//         "AMP_CLIENT_SCREEN_HEIGHT",
+	//         "AMP_CLIENT_SCROLL_X",
+	//         "AMP_CLIENT_SCROLL_Y",
+	//         "AMP_CLIENT_MAX_SCROLL_X",
+	//         "AMP_CLIENT_MAX_SCROLL_Y",
+	//         "AMP_TOTAL_ENGAGED_TIME",
+	//         "AMP_PAGE_VIEW_ID",
+	//         "AMP_PAGE_LOAD_TIME",
+	//         "AMP_PAGE_DOWNLOAD_TIME",
+	//         "AMP_GTM_EVENT",
+	//         "EVENT_NAME",
+	//         "FIREBASE_EVENT_PARAMETER_CAMPAIGN",
+	//         "FIREBASE_EVENT_PARAMETER_CAMPAIGN_ACLID",
+	//         "FIREBASE_EVENT_PARAMETER_CAMPAIGN_ANID",
+	//         "FIREBASE_EVENT_PARAMETER_CAMPAIGN_CLICK_TIMESTAMP",
+	//         "FIREBASE_EVENT_PARAMETER_CAMPAIGN_CONTENT",
+	//         "FIREBASE_EVENT_PARAMETER_CAMPAIGN_CP1",
+	//         "FIREBASE_EVENT_PARAMETER_CAMPAIGN_GCLID",
+	//         "FIREBASE_EVENT_PARAMETER_CAMPAIGN_SOURCE",
+	//         "FIREBASE_EVENT_PARAMETER_CAMPAIGN_TERM",
+	//         "FIREBASE_EVENT_PARAMETER_CURRENCY",
+	//         "FIREBASE_EVENT_PARAMETER_DYNAMIC_LINK_ACCEPT_TIME",
+	//         "FIREBASE_EVENT_PARAMETER_DYNAMIC_LINK_LINKID",
+	//         "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_DEVICE_TIME",
+	//         "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_ID",
+	//         "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_NAME",
+	//         "FIREBASE_EVENT_PARAMETER_NOTIFICATION_MESSAGE_TIME",
+	//         "FIREBASE_EVENT_PARAMETER_NOTIFICATION_TOPIC",
+	//         "FIREBASE_EVENT_PARAMETER_PREVIOUS_APP_VERSION",
+	//         "FIREBASE_EVENT_PARAMETER_PREVIOUS_OS_VERSION",
+	//         "FIREBASE_EVENT_PARAMETER_PRICE",
+	//         "FIREBASE_EVENT_PARAMETER_PRODUCT_ID",
+	//         "FIREBASE_EVENT_PARAMETER_QUANTITY",
+	//         "FIREBASE_EVENT_PARAMETER_VALUE",
+	//         "VIDEO_PROVIDER",
+	//         "VIDEO_URL",
+	//         "VIDEO_TITLE",
+	//         "VIDEO_DURATION",
+	//         "VIDEO_PERCENT",
+	//         "VIDEO_VISIBLE",
+	//         "VIDEO_STATUS",
+	//         "VIDEO_CURRENT_TIME",
+	//         "SCROLL_DEPTH_THRESHOLD",
+	//         "SCROLL_DEPTH_UNITS",
+	//         "SCROLL_DEPTH_DIRECTION",
+	//         "ELEMENT_VISIBILITY_RATIO",
+	//         "ELEMENT_VISIBILITY_TIME",
+	//         "ELEMENT_VISIBILITY_FIRST_TIME",
+	//         "ELEMENT_VISIBILITY_RECENT_TIME"
 	//       ],
 	//       "location": "query",
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}/built_in_variables:revert",
+	//   "path": "tagmanager/v2/{+path}/built_in_variables:revert",
 	//   "response": {
 	//     "$ref": "RevertBuiltInVariableResponse"
 	//   },
@@ -9428,7 +9423,7 @@
 	reqHeaders.Set("Content-Type", "application/json")
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+parent}/folders")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+parent}/folders")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("POST", urls, body)
 	if err != nil {
@@ -9480,6 +9475,7 @@
 	return ret, nil
 	// {
 	//   "description": "Creates a GTM Folder.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/folders",
 	//   "httpMethod": "POST",
 	//   "id": "tagmanager.accounts.containers.workspaces.folders.create",
 	//   "parameterOrder": [
@@ -9487,13 +9483,14 @@
 	//   ],
 	//   "parameters": {
 	//     "parent": {
-	//       "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+	//       "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+parent}/folders",
+	//   "path": "tagmanager/v2/{+parent}/folders",
 	//   "request": {
 	//     "$ref": "Folder"
 	//   },
@@ -9558,7 +9555,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("DELETE", urls, body)
 	if err != nil {
@@ -9585,6 +9582,7 @@
 	return nil
 	// {
 	//   "description": "Deletes a GTM Folder.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/folders/{foldersId}",
 	//   "httpMethod": "DELETE",
 	//   "id": "tagmanager.accounts.containers.workspaces.folders.delete",
 	//   "parameterOrder": [
@@ -9592,13 +9590,14 @@
 	//   ],
 	//   "parameters": {
 	//     "path": {
-	//       "description": "GTM Folder's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/folders/{folder_id}",
+	//       "description": "GTM Folder's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/folders/{folder_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/folders/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "scopes": [
 	//     "https://www.googleapis.com/auth/tagmanager.edit.containers"
 	//   ]
@@ -9664,7 +9663,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}:entities")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}:entities")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("POST", urls, body)
 	if err != nil {
@@ -9716,6 +9715,7 @@
 	return ret, nil
 	// {
 	//   "description": "List all entities in a GTM Folder.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/folders/{foldersId}:entities",
 	//   "httpMethod": "POST",
 	//   "id": "tagmanager.accounts.containers.workspaces.folders.entities",
 	//   "parameterOrder": [
@@ -9728,13 +9728,14 @@
 	//       "type": "string"
 	//     },
 	//     "path": {
-	//       "description": "GTM Folder's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/folders/{folder_id}",
+	//       "description": "GTM Folder's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/folders/{folder_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/folders/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}:entities",
+	//   "path": "tagmanager/v2/{+path}:entities",
 	//   "response": {
 	//     "$ref": "FolderEntities"
 	//   },
@@ -9832,7 +9833,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("GET", urls, body)
 	if err != nil {
@@ -9884,6 +9885,7 @@
 	return ret, nil
 	// {
 	//   "description": "Gets a GTM Folder.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/folders/{foldersId}",
 	//   "httpMethod": "GET",
 	//   "id": "tagmanager.accounts.containers.workspaces.folders.get",
 	//   "parameterOrder": [
@@ -9891,13 +9893,14 @@
 	//   ],
 	//   "parameters": {
 	//     "path": {
-	//       "description": "GTM Folder's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/folders/{folder_id}",
+	//       "description": "GTM Folder's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/folders/{folder_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/folders/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "response": {
 	//     "$ref": "Folder"
 	//   },
@@ -9981,7 +9984,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+parent}/folders")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+parent}/folders")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("GET", urls, body)
 	if err != nil {
@@ -10033,6 +10036,7 @@
 	return ret, nil
 	// {
 	//   "description": "Lists all GTM Folders of a Container.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/folders",
 	//   "httpMethod": "GET",
 	//   "id": "tagmanager.accounts.containers.workspaces.folders.list",
 	//   "parameterOrder": [
@@ -10045,13 +10049,14 @@
 	//       "type": "string"
 	//     },
 	//     "parent": {
-	//       "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+	//       "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+parent}/folders",
+	//   "path": "tagmanager/v2/{+parent}/folders",
 	//   "response": {
 	//     "$ref": "ListFoldersResponse"
 	//   },
@@ -10163,7 +10168,7 @@
 	reqHeaders.Set("Content-Type", "application/json")
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}:move_entities_to_folder")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}:move_entities_to_folder")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("POST", urls, body)
 	if err != nil {
@@ -10190,6 +10195,7 @@
 	return nil
 	// {
 	//   "description": "Moves entities to a GTM Folder.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/folders/{foldersId}:move_entities_to_folder",
 	//   "httpMethod": "POST",
 	//   "id": "tagmanager.accounts.containers.workspaces.folders.move_entities_to_folder",
 	//   "parameterOrder": [
@@ -10197,8 +10203,9 @@
 	//   ],
 	//   "parameters": {
 	//     "path": {
-	//       "description": "GTM Folder's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/folders/{folder_id}",
+	//       "description": "GTM Folder's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/folders/{folder_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/folders/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     },
@@ -10221,7 +10228,7 @@
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}:move_entities_to_folder",
+	//   "path": "tagmanager/v2/{+path}:move_entities_to_folder",
 	//   "request": {
 	//     "$ref": "Folder"
 	//   },
@@ -10250,7 +10257,8 @@
 }
 
 // Fingerprint sets the optional parameter "fingerprint": When provided,
-// this fingerprint must match the fingerprint of the tag in storage.
+// this fingerprint must match the fingerprint of the tag
+// in storage.
 func (c *AccountsContainersWorkspacesFoldersRevertCall) Fingerprint(fingerprint string) *AccountsContainersWorkspacesFoldersRevertCall {
 	c.urlParams_.Set("fingerprint", fingerprint)
 	return c
@@ -10290,7 +10298,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}:revert")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}:revert")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("POST", urls, body)
 	if err != nil {
@@ -10342,6 +10350,7 @@
 	return ret, nil
 	// {
 	//   "description": "Reverts changes to a GTM Folder in a GTM Workspace.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/folders/{foldersId}:revert",
 	//   "httpMethod": "POST",
 	//   "id": "tagmanager.accounts.containers.workspaces.folders.revert",
 	//   "parameterOrder": [
@@ -10349,18 +10358,19 @@
 	//   ],
 	//   "parameters": {
 	//     "fingerprint": {
-	//       "description": "When provided, this fingerprint must match the fingerprint of the tag in storage.",
+	//       "description": "When provided, this fingerprint must match the fingerprint of the tag\nin storage.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
 	//     "path": {
-	//       "description": "GTM Folder's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/folders/{folder_id}",
+	//       "description": "GTM Folder's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/folders/{folder_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/folders/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}:revert",
+	//   "path": "tagmanager/v2/{+path}:revert",
 	//   "response": {
 	//     "$ref": "RevertFolderResponse"
 	//   },
@@ -10391,7 +10401,8 @@
 }
 
 // Fingerprint sets the optional parameter "fingerprint": When provided,
-// this fingerprint must match the fingerprint of the folder in storage.
+// this fingerprint must match the fingerprint of the folder in
+// storage.
 func (c *AccountsContainersWorkspacesFoldersUpdateCall) Fingerprint(fingerprint string) *AccountsContainersWorkspacesFoldersUpdateCall {
 	c.urlParams_.Set("fingerprint", fingerprint)
 	return c
@@ -10436,7 +10447,7 @@
 	reqHeaders.Set("Content-Type", "application/json")
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("PUT", urls, body)
 	if err != nil {
@@ -10488,6 +10499,7 @@
 	return ret, nil
 	// {
 	//   "description": "Updates a GTM Folder.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/folders/{foldersId}",
 	//   "httpMethod": "PUT",
 	//   "id": "tagmanager.accounts.containers.workspaces.folders.update",
 	//   "parameterOrder": [
@@ -10495,18 +10507,19 @@
 	//   ],
 	//   "parameters": {
 	//     "fingerprint": {
-	//       "description": "When provided, this fingerprint must match the fingerprint of the folder in storage.",
+	//       "description": "When provided, this fingerprint must match the fingerprint of the folder in\nstorage.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
 	//     "path": {
-	//       "description": "GTM Folder's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/folders/{folder_id}",
+	//       "description": "GTM Folder's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/folders/{folder_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/folders/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "request": {
 	//     "$ref": "Folder"
 	//   },
@@ -10578,7 +10591,7 @@
 	reqHeaders.Set("Content-Type", "application/json")
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+parent}/tags")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+parent}/tags")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("POST", urls, body)
 	if err != nil {
@@ -10630,6 +10643,7 @@
 	return ret, nil
 	// {
 	//   "description": "Creates a GTM Tag.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/tags",
 	//   "httpMethod": "POST",
 	//   "id": "tagmanager.accounts.containers.workspaces.tags.create",
 	//   "parameterOrder": [
@@ -10637,13 +10651,14 @@
 	//   ],
 	//   "parameters": {
 	//     "parent": {
-	//       "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+	//       "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+parent}/tags",
+	//   "path": "tagmanager/v2/{+parent}/tags",
 	//   "request": {
 	//     "$ref": "Tag"
 	//   },
@@ -10708,7 +10723,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("DELETE", urls, body)
 	if err != nil {
@@ -10735,6 +10750,7 @@
 	return nil
 	// {
 	//   "description": "Deletes a GTM Tag.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/tags/{tagsId}",
 	//   "httpMethod": "DELETE",
 	//   "id": "tagmanager.accounts.containers.workspaces.tags.delete",
 	//   "parameterOrder": [
@@ -10742,13 +10758,14 @@
 	//   ],
 	//   "parameters": {
 	//     "path": {
-	//       "description": "GTM Tag's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/tags/{tag_id}",
+	//       "description": "GTM Tag's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/tags/{tag_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/tags/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "scopes": [
 	//     "https://www.googleapis.com/auth/tagmanager.edit.containers"
 	//   ]
@@ -10821,7 +10838,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("GET", urls, body)
 	if err != nil {
@@ -10873,6 +10890,7 @@
 	return ret, nil
 	// {
 	//   "description": "Gets a GTM Tag.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/tags/{tagsId}",
 	//   "httpMethod": "GET",
 	//   "id": "tagmanager.accounts.containers.workspaces.tags.get",
 	//   "parameterOrder": [
@@ -10880,13 +10898,14 @@
 	//   ],
 	//   "parameters": {
 	//     "path": {
-	//       "description": "GTM Tag's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/tags/{tag_id}",
+	//       "description": "GTM Tag's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/tags/{tag_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/tags/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "response": {
 	//     "$ref": "Tag"
 	//   },
@@ -10970,7 +10989,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+parent}/tags")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+parent}/tags")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("GET", urls, body)
 	if err != nil {
@@ -11022,6 +11041,7 @@
 	return ret, nil
 	// {
 	//   "description": "Lists all GTM Tags of a Container.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/tags",
 	//   "httpMethod": "GET",
 	//   "id": "tagmanager.accounts.containers.workspaces.tags.list",
 	//   "parameterOrder": [
@@ -11034,13 +11054,14 @@
 	//       "type": "string"
 	//     },
 	//     "parent": {
-	//       "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+	//       "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+parent}/tags",
+	//   "path": "tagmanager/v2/{+parent}/tags",
 	//   "response": {
 	//     "$ref": "ListTagsResponse"
 	//   },
@@ -11091,7 +11112,8 @@
 }
 
 // Fingerprint sets the optional parameter "fingerprint": When provided,
-// this fingerprint must match the fingerprint of thetag in storage.
+// this fingerprint must match the fingerprint of thetag
+// in storage.
 func (c *AccountsContainersWorkspacesTagsRevertCall) Fingerprint(fingerprint string) *AccountsContainersWorkspacesTagsRevertCall {
 	c.urlParams_.Set("fingerprint", fingerprint)
 	return c
@@ -11131,7 +11153,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}:revert")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}:revert")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("POST", urls, body)
 	if err != nil {
@@ -11183,6 +11205,7 @@
 	return ret, nil
 	// {
 	//   "description": "Reverts changes to a GTM Tag in a GTM Workspace.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/tags/{tagsId}:revert",
 	//   "httpMethod": "POST",
 	//   "id": "tagmanager.accounts.containers.workspaces.tags.revert",
 	//   "parameterOrder": [
@@ -11190,18 +11213,19 @@
 	//   ],
 	//   "parameters": {
 	//     "fingerprint": {
-	//       "description": "When provided, this fingerprint must match the fingerprint of thetag in storage.",
+	//       "description": "When provided, this fingerprint must match the fingerprint of thetag\nin storage.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
 	//     "path": {
-	//       "description": "GTM Tag's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/tags/{tag_id}",
+	//       "description": "GTM Tag's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/tags/{tag_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/tags/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}:revert",
+	//   "path": "tagmanager/v2/{+path}:revert",
 	//   "response": {
 	//     "$ref": "RevertTagResponse"
 	//   },
@@ -11232,7 +11256,8 @@
 }
 
 // Fingerprint sets the optional parameter "fingerprint": When provided,
-// this fingerprint must match the fingerprint of the tag in storage.
+// this fingerprint must match the fingerprint of the tag in
+// storage.
 func (c *AccountsContainersWorkspacesTagsUpdateCall) Fingerprint(fingerprint string) *AccountsContainersWorkspacesTagsUpdateCall {
 	c.urlParams_.Set("fingerprint", fingerprint)
 	return c
@@ -11277,7 +11302,7 @@
 	reqHeaders.Set("Content-Type", "application/json")
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("PUT", urls, body)
 	if err != nil {
@@ -11329,6 +11354,7 @@
 	return ret, nil
 	// {
 	//   "description": "Updates a GTM Tag.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/tags/{tagsId}",
 	//   "httpMethod": "PUT",
 	//   "id": "tagmanager.accounts.containers.workspaces.tags.update",
 	//   "parameterOrder": [
@@ -11336,18 +11362,19 @@
 	//   ],
 	//   "parameters": {
 	//     "fingerprint": {
-	//       "description": "When provided, this fingerprint must match the fingerprint of the tag in storage.",
+	//       "description": "When provided, this fingerprint must match the fingerprint of the tag in\nstorage.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
 	//     "path": {
-	//       "description": "GTM Tag's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/tags/{tag_id}",
+	//       "description": "GTM Tag's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/tags/{tag_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/tags/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "request": {
 	//     "$ref": "Tag"
 	//   },
@@ -11419,7 +11446,7 @@
 	reqHeaders.Set("Content-Type", "application/json")
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+parent}/templates")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+parent}/templates")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("POST", urls, body)
 	if err != nil {
@@ -11471,6 +11498,7 @@
 	return ret, nil
 	// {
 	//   "description": "Creates a GTM Custom Template.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/templates",
 	//   "httpMethod": "POST",
 	//   "id": "tagmanager.accounts.containers.workspaces.templates.create",
 	//   "parameterOrder": [
@@ -11478,13 +11506,14 @@
 	//   ],
 	//   "parameters": {
 	//     "parent": {
-	//       "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+	//       "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+parent}/templates",
+	//   "path": "tagmanager/v2/{+parent}/templates",
 	//   "request": {
 	//     "$ref": "CustomTemplate"
 	//   },
@@ -11549,7 +11578,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("DELETE", urls, body)
 	if err != nil {
@@ -11576,6 +11605,7 @@
 	return nil
 	// {
 	//   "description": "Deletes a GTM Template.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/templates/{templatesId}",
 	//   "httpMethod": "DELETE",
 	//   "id": "tagmanager.accounts.containers.workspaces.templates.delete",
 	//   "parameterOrder": [
@@ -11583,13 +11613,14 @@
 	//   ],
 	//   "parameters": {
 	//     "path": {
-	//       "description": "GTM Custom Template's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/templates/{template_id}",
+	//       "description": "GTM Custom Template's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/templates/{template_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/templates/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "scopes": [
 	//     "https://www.googleapis.com/auth/tagmanager.edit.containers"
 	//   ]
@@ -11662,7 +11693,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("GET", urls, body)
 	if err != nil {
@@ -11714,6 +11745,7 @@
 	return ret, nil
 	// {
 	//   "description": "Gets a GTM Template.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/templates/{templatesId}",
 	//   "httpMethod": "GET",
 	//   "id": "tagmanager.accounts.containers.workspaces.templates.get",
 	//   "parameterOrder": [
@@ -11721,13 +11753,14 @@
 	//   ],
 	//   "parameters": {
 	//     "path": {
-	//       "description": "GTM Custom Template's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/templates/{template_id}",
+	//       "description": "GTM Custom Template's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/templates/{template_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/templates/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "response": {
 	//     "$ref": "CustomTemplate"
 	//   },
@@ -11811,7 +11844,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+parent}/templates")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+parent}/templates")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("GET", urls, body)
 	if err != nil {
@@ -11863,6 +11896,7 @@
 	return ret, nil
 	// {
 	//   "description": "Lists all GTM Templates of a GTM container workspace.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/templates",
 	//   "httpMethod": "GET",
 	//   "id": "tagmanager.accounts.containers.workspaces.templates.list",
 	//   "parameterOrder": [
@@ -11875,13 +11909,14 @@
 	//       "type": "string"
 	//     },
 	//     "parent": {
-	//       "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+	//       "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+parent}/templates",
+	//   "path": "tagmanager/v2/{+parent}/templates",
 	//   "response": {
 	//     "$ref": "ListTemplatesResponse"
 	//   },
@@ -11932,8 +11967,8 @@
 }
 
 // Fingerprint sets the optional parameter "fingerprint": When provided,
-// this fingerprint must match the fingerprint of the template in
-// storage.
+// this fingerprint must match the fingerprint of the template
+// in storage.
 func (c *AccountsContainersWorkspacesTemplatesRevertCall) Fingerprint(fingerprint string) *AccountsContainersWorkspacesTemplatesRevertCall {
 	c.urlParams_.Set("fingerprint", fingerprint)
 	return c
@@ -11973,7 +12008,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}:revert")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}:revert")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("POST", urls, body)
 	if err != nil {
@@ -12025,6 +12060,7 @@
 	return ret, nil
 	// {
 	//   "description": "Reverts changes to a GTM Template in a GTM Workspace.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/templates/{templatesId}:revert",
 	//   "httpMethod": "POST",
 	//   "id": "tagmanager.accounts.containers.workspaces.templates.revert",
 	//   "parameterOrder": [
@@ -12032,18 +12068,19 @@
 	//   ],
 	//   "parameters": {
 	//     "fingerprint": {
-	//       "description": "When provided, this fingerprint must match the fingerprint of the template in storage.",
+	//       "description": "When provided, this fingerprint must match the fingerprint of the template\nin storage.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
 	//     "path": {
-	//       "description": "GTM Custom Template's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/templates/{template_id}",
+	//       "description": "GTM Custom Template's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/templates/{template_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/templates/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}:revert",
+	//   "path": "tagmanager/v2/{+path}:revert",
 	//   "response": {
 	//     "$ref": "RevertTemplateResponse"
 	//   },
@@ -12074,8 +12111,8 @@
 }
 
 // Fingerprint sets the optional parameter "fingerprint": When provided,
-// this fingerprint must match the fingerprint of the templates in
-// storage.
+// this fingerprint must match the fingerprint of the templates
+// in storage.
 func (c *AccountsContainersWorkspacesTemplatesUpdateCall) Fingerprint(fingerprint string) *AccountsContainersWorkspacesTemplatesUpdateCall {
 	c.urlParams_.Set("fingerprint", fingerprint)
 	return c
@@ -12120,7 +12157,7 @@
 	reqHeaders.Set("Content-Type", "application/json")
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("PUT", urls, body)
 	if err != nil {
@@ -12172,6 +12209,7 @@
 	return ret, nil
 	// {
 	//   "description": "Updates a GTM Template.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/templates/{templatesId}",
 	//   "httpMethod": "PUT",
 	//   "id": "tagmanager.accounts.containers.workspaces.templates.update",
 	//   "parameterOrder": [
@@ -12179,18 +12217,19 @@
 	//   ],
 	//   "parameters": {
 	//     "fingerprint": {
-	//       "description": "When provided, this fingerprint must match the fingerprint of the templates in storage.",
+	//       "description": "When provided, this fingerprint must match the fingerprint of the templates\nin storage.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
 	//     "path": {
-	//       "description": "GTM Custom Template's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/templates/{template_id}",
+	//       "description": "GTM Custom Template's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/templates/{template_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/templates/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "request": {
 	//     "$ref": "CustomTemplate"
 	//   },
@@ -12262,7 +12301,7 @@
 	reqHeaders.Set("Content-Type", "application/json")
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+parent}/triggers")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+parent}/triggers")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("POST", urls, body)
 	if err != nil {
@@ -12314,6 +12353,7 @@
 	return ret, nil
 	// {
 	//   "description": "Creates a GTM Trigger.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/triggers",
 	//   "httpMethod": "POST",
 	//   "id": "tagmanager.accounts.containers.workspaces.triggers.create",
 	//   "parameterOrder": [
@@ -12321,13 +12361,14 @@
 	//   ],
 	//   "parameters": {
 	//     "parent": {
-	//       "description": "GTM Workspaces's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+	//       "description": "GTM Workspaces's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+parent}/triggers",
+	//   "path": "tagmanager/v2/{+parent}/triggers",
 	//   "request": {
 	//     "$ref": "Trigger"
 	//   },
@@ -12392,7 +12433,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("DELETE", urls, body)
 	if err != nil {
@@ -12419,6 +12460,7 @@
 	return nil
 	// {
 	//   "description": "Deletes a GTM Trigger.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/triggers/{triggersId}",
 	//   "httpMethod": "DELETE",
 	//   "id": "tagmanager.accounts.containers.workspaces.triggers.delete",
 	//   "parameterOrder": [
@@ -12426,13 +12468,14 @@
 	//   ],
 	//   "parameters": {
 	//     "path": {
-	//       "description": "GTM Trigger's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/triggers/{trigger_id}",
+	//       "description": "GTM Trigger's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/triggers/{trigger_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/triggers/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "scopes": [
 	//     "https://www.googleapis.com/auth/tagmanager.edit.containers"
 	//   ]
@@ -12505,7 +12548,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("GET", urls, body)
 	if err != nil {
@@ -12557,6 +12600,7 @@
 	return ret, nil
 	// {
 	//   "description": "Gets a GTM Trigger.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/triggers/{triggersId}",
 	//   "httpMethod": "GET",
 	//   "id": "tagmanager.accounts.containers.workspaces.triggers.get",
 	//   "parameterOrder": [
@@ -12564,13 +12608,14 @@
 	//   ],
 	//   "parameters": {
 	//     "path": {
-	//       "description": "GTM Trigger's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/triggers/{trigger_id}",
+	//       "description": "GTM Trigger's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/triggers/{trigger_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/triggers/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "response": {
 	//     "$ref": "Trigger"
 	//   },
@@ -12654,7 +12699,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+parent}/triggers")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+parent}/triggers")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("GET", urls, body)
 	if err != nil {
@@ -12706,6 +12751,7 @@
 	return ret, nil
 	// {
 	//   "description": "Lists all GTM Triggers of a Container.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/triggers",
 	//   "httpMethod": "GET",
 	//   "id": "tagmanager.accounts.containers.workspaces.triggers.list",
 	//   "parameterOrder": [
@@ -12718,13 +12764,14 @@
 	//       "type": "string"
 	//     },
 	//     "parent": {
-	//       "description": "GTM Workspaces's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+	//       "description": "GTM Workspaces's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+parent}/triggers",
+	//   "path": "tagmanager/v2/{+parent}/triggers",
 	//   "response": {
 	//     "$ref": "ListTriggersResponse"
 	//   },
@@ -12775,8 +12822,8 @@
 }
 
 // Fingerprint sets the optional parameter "fingerprint": When provided,
-// this fingerprint must match the fingerprint of the trigger in
-// storage.
+// this fingerprint must match the fingerprint of the trigger
+// in storage.
 func (c *AccountsContainersWorkspacesTriggersRevertCall) Fingerprint(fingerprint string) *AccountsContainersWorkspacesTriggersRevertCall {
 	c.urlParams_.Set("fingerprint", fingerprint)
 	return c
@@ -12816,7 +12863,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}:revert")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}:revert")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("POST", urls, body)
 	if err != nil {
@@ -12868,6 +12915,7 @@
 	return ret, nil
 	// {
 	//   "description": "Reverts changes to a GTM Trigger in a GTM Workspace.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/triggers/{triggersId}:revert",
 	//   "httpMethod": "POST",
 	//   "id": "tagmanager.accounts.containers.workspaces.triggers.revert",
 	//   "parameterOrder": [
@@ -12875,18 +12923,19 @@
 	//   ],
 	//   "parameters": {
 	//     "fingerprint": {
-	//       "description": "When provided, this fingerprint must match the fingerprint of the trigger in storage.",
+	//       "description": "When provided, this fingerprint must match the fingerprint of the trigger\nin storage.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
 	//     "path": {
-	//       "description": "GTM Trigger's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/triggers/{trigger_id}",
+	//       "description": "GTM Trigger's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/triggers/{trigger_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/triggers/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}:revert",
+	//   "path": "tagmanager/v2/{+path}:revert",
 	//   "response": {
 	//     "$ref": "RevertTriggerResponse"
 	//   },
@@ -12917,8 +12966,8 @@
 }
 
 // Fingerprint sets the optional parameter "fingerprint": When provided,
-// this fingerprint must match the fingerprint of the trigger in
-// storage.
+// this fingerprint must match the fingerprint of the trigger
+// in storage.
 func (c *AccountsContainersWorkspacesTriggersUpdateCall) Fingerprint(fingerprint string) *AccountsContainersWorkspacesTriggersUpdateCall {
 	c.urlParams_.Set("fingerprint", fingerprint)
 	return c
@@ -12963,7 +13012,7 @@
 	reqHeaders.Set("Content-Type", "application/json")
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("PUT", urls, body)
 	if err != nil {
@@ -13015,6 +13064,7 @@
 	return ret, nil
 	// {
 	//   "description": "Updates a GTM Trigger.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/triggers/{triggersId}",
 	//   "httpMethod": "PUT",
 	//   "id": "tagmanager.accounts.containers.workspaces.triggers.update",
 	//   "parameterOrder": [
@@ -13022,18 +13072,19 @@
 	//   ],
 	//   "parameters": {
 	//     "fingerprint": {
-	//       "description": "When provided, this fingerprint must match the fingerprint of the trigger in storage.",
+	//       "description": "When provided, this fingerprint must match the fingerprint of the trigger\nin storage.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
 	//     "path": {
-	//       "description": "GTM Trigger's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/triggers/{trigger_id}",
+	//       "description": "GTM Trigger's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/triggers/{trigger_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/triggers/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "request": {
 	//     "$ref": "Trigger"
 	//   },
@@ -13105,7 +13156,7 @@
 	reqHeaders.Set("Content-Type", "application/json")
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+parent}/variables")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+parent}/variables")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("POST", urls, body)
 	if err != nil {
@@ -13157,6 +13208,7 @@
 	return ret, nil
 	// {
 	//   "description": "Creates a GTM Variable.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/variables",
 	//   "httpMethod": "POST",
 	//   "id": "tagmanager.accounts.containers.workspaces.variables.create",
 	//   "parameterOrder": [
@@ -13164,13 +13216,14 @@
 	//   ],
 	//   "parameters": {
 	//     "parent": {
-	//       "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+	//       "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+parent}/variables",
+	//   "path": "tagmanager/v2/{+parent}/variables",
 	//   "request": {
 	//     "$ref": "Variable"
 	//   },
@@ -13235,7 +13288,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("DELETE", urls, body)
 	if err != nil {
@@ -13262,6 +13315,7 @@
 	return nil
 	// {
 	//   "description": "Deletes a GTM Variable.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/variables/{variablesId}",
 	//   "httpMethod": "DELETE",
 	//   "id": "tagmanager.accounts.containers.workspaces.variables.delete",
 	//   "parameterOrder": [
@@ -13269,13 +13323,14 @@
 	//   ],
 	//   "parameters": {
 	//     "path": {
-	//       "description": "GTM Variable's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/variables/{variable_id}",
+	//       "description": "GTM Variable's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/variables/{variable_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/variables/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "scopes": [
 	//     "https://www.googleapis.com/auth/tagmanager.edit.containers"
 	//   ]
@@ -13348,7 +13403,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("GET", urls, body)
 	if err != nil {
@@ -13400,6 +13455,7 @@
 	return ret, nil
 	// {
 	//   "description": "Gets a GTM Variable.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/variables/{variablesId}",
 	//   "httpMethod": "GET",
 	//   "id": "tagmanager.accounts.containers.workspaces.variables.get",
 	//   "parameterOrder": [
@@ -13407,13 +13463,14 @@
 	//   ],
 	//   "parameters": {
 	//     "path": {
-	//       "description": "GTM Variable's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/variables/{variable_id}",
+	//       "description": "GTM Variable's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/variables/{variable_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/variables/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "response": {
 	//     "$ref": "Variable"
 	//   },
@@ -13497,7 +13554,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+parent}/variables")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+parent}/variables")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("GET", urls, body)
 	if err != nil {
@@ -13549,6 +13606,7 @@
 	return ret, nil
 	// {
 	//   "description": "Lists all GTM Variables of a Container.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/variables",
 	//   "httpMethod": "GET",
 	//   "id": "tagmanager.accounts.containers.workspaces.variables.list",
 	//   "parameterOrder": [
@@ -13561,13 +13619,14 @@
 	//       "type": "string"
 	//     },
 	//     "parent": {
-	//       "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+	//       "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+parent}/variables",
+	//   "path": "tagmanager/v2/{+parent}/variables",
 	//   "response": {
 	//     "$ref": "ListVariablesResponse"
 	//   },
@@ -13618,8 +13677,8 @@
 }
 
 // Fingerprint sets the optional parameter "fingerprint": When provided,
-// this fingerprint must match the fingerprint of the variable in
-// storage.
+// this fingerprint must match the fingerprint of the variable
+// in storage.
 func (c *AccountsContainersWorkspacesVariablesRevertCall) Fingerprint(fingerprint string) *AccountsContainersWorkspacesVariablesRevertCall {
 	c.urlParams_.Set("fingerprint", fingerprint)
 	return c
@@ -13659,7 +13718,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}:revert")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}:revert")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("POST", urls, body)
 	if err != nil {
@@ -13711,6 +13770,7 @@
 	return ret, nil
 	// {
 	//   "description": "Reverts changes to a GTM Variable in a GTM Workspace.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/variables/{variablesId}:revert",
 	//   "httpMethod": "POST",
 	//   "id": "tagmanager.accounts.containers.workspaces.variables.revert",
 	//   "parameterOrder": [
@@ -13718,18 +13778,19 @@
 	//   ],
 	//   "parameters": {
 	//     "fingerprint": {
-	//       "description": "When provided, this fingerprint must match the fingerprint of the variable in storage.",
+	//       "description": "When provided, this fingerprint must match the fingerprint of the variable\nin storage.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
 	//     "path": {
-	//       "description": "GTM Variable's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/variables/{variable_id}",
+	//       "description": "GTM Variable's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/variables/{variable_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/variables/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}:revert",
+	//   "path": "tagmanager/v2/{+path}:revert",
 	//   "response": {
 	//     "$ref": "RevertVariableResponse"
 	//   },
@@ -13760,8 +13821,8 @@
 }
 
 // Fingerprint sets the optional parameter "fingerprint": When provided,
-// this fingerprint must match the fingerprint of the variable in
-// storage.
+// this fingerprint must match the fingerprint of the variable
+// in storage.
 func (c *AccountsContainersWorkspacesVariablesUpdateCall) Fingerprint(fingerprint string) *AccountsContainersWorkspacesVariablesUpdateCall {
 	c.urlParams_.Set("fingerprint", fingerprint)
 	return c
@@ -13806,7 +13867,7 @@
 	reqHeaders.Set("Content-Type", "application/json")
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("PUT", urls, body)
 	if err != nil {
@@ -13858,6 +13919,7 @@
 	return ret, nil
 	// {
 	//   "description": "Updates a GTM Variable.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/variables/{variablesId}",
 	//   "httpMethod": "PUT",
 	//   "id": "tagmanager.accounts.containers.workspaces.variables.update",
 	//   "parameterOrder": [
@@ -13865,18 +13927,19 @@
 	//   ],
 	//   "parameters": {
 	//     "fingerprint": {
-	//       "description": "When provided, this fingerprint must match the fingerprint of the variable in storage.",
+	//       "description": "When provided, this fingerprint must match the fingerprint of the variable\nin storage.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
 	//     "path": {
-	//       "description": "GTM Variable's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/variables/{variable_id}",
+	//       "description": "GTM Variable's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/variables/{variable_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/variables/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "request": {
 	//     "$ref": "Variable"
 	//   },
@@ -13948,7 +14011,7 @@
 	reqHeaders.Set("Content-Type", "application/json")
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+parent}/zones")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+parent}/zones")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("POST", urls, body)
 	if err != nil {
@@ -14000,6 +14063,7 @@
 	return ret, nil
 	// {
 	//   "description": "Creates a GTM Zone.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/zones",
 	//   "httpMethod": "POST",
 	//   "id": "tagmanager.accounts.containers.workspaces.zones.create",
 	//   "parameterOrder": [
@@ -14007,13 +14071,14 @@
 	//   ],
 	//   "parameters": {
 	//     "parent": {
-	//       "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+	//       "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+parent}/zones",
+	//   "path": "tagmanager/v2/{+parent}/zones",
 	//   "request": {
 	//     "$ref": "Zone"
 	//   },
@@ -14078,7 +14143,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("DELETE", urls, body)
 	if err != nil {
@@ -14105,6 +14170,7 @@
 	return nil
 	// {
 	//   "description": "Deletes a GTM Zone.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/zones/{zonesId}",
 	//   "httpMethod": "DELETE",
 	//   "id": "tagmanager.accounts.containers.workspaces.zones.delete",
 	//   "parameterOrder": [
@@ -14112,13 +14178,14 @@
 	//   ],
 	//   "parameters": {
 	//     "path": {
-	//       "description": "GTM Zone's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/zones/{zone_id}",
+	//       "description": "GTM Zone's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/zones/{zone_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/zones/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "scopes": [
 	//     "https://www.googleapis.com/auth/tagmanager.edit.containers"
 	//   ]
@@ -14191,7 +14258,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("GET", urls, body)
 	if err != nil {
@@ -14243,6 +14310,7 @@
 	return ret, nil
 	// {
 	//   "description": "Gets a GTM Zone.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/zones/{zonesId}",
 	//   "httpMethod": "GET",
 	//   "id": "tagmanager.accounts.containers.workspaces.zones.get",
 	//   "parameterOrder": [
@@ -14250,13 +14318,14 @@
 	//   ],
 	//   "parameters": {
 	//     "path": {
-	//       "description": "GTM Zone's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/zones/{zone_id}",
+	//       "description": "GTM Zone's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/zones/{zone_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/zones/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "response": {
 	//     "$ref": "Zone"
 	//   },
@@ -14340,7 +14409,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+parent}/zones")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+parent}/zones")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("GET", urls, body)
 	if err != nil {
@@ -14392,6 +14461,7 @@
 	return ret, nil
 	// {
 	//   "description": "Lists all GTM Zones of a GTM container workspace.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/zones",
 	//   "httpMethod": "GET",
 	//   "id": "tagmanager.accounts.containers.workspaces.zones.list",
 	//   "parameterOrder": [
@@ -14404,13 +14474,14 @@
 	//       "type": "string"
 	//     },
 	//     "parent": {
-	//       "description": "GTM Workspace's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
+	//       "description": "GTM Workspace's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+parent}/zones",
+	//   "path": "tagmanager/v2/{+parent}/zones",
 	//   "response": {
 	//     "$ref": "ListZonesResponse"
 	//   },
@@ -14461,7 +14532,8 @@
 }
 
 // Fingerprint sets the optional parameter "fingerprint": When provided,
-// this fingerprint must match the fingerprint of the zone in storage.
+// this fingerprint must match the fingerprint of the zone in
+// storage.
 func (c *AccountsContainersWorkspacesZonesRevertCall) Fingerprint(fingerprint string) *AccountsContainersWorkspacesZonesRevertCall {
 	c.urlParams_.Set("fingerprint", fingerprint)
 	return c
@@ -14501,7 +14573,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}:revert")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}:revert")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("POST", urls, body)
 	if err != nil {
@@ -14553,6 +14625,7 @@
 	return ret, nil
 	// {
 	//   "description": "Reverts changes to a GTM Zone in a GTM Workspace.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/zones/{zonesId}:revert",
 	//   "httpMethod": "POST",
 	//   "id": "tagmanager.accounts.containers.workspaces.zones.revert",
 	//   "parameterOrder": [
@@ -14560,18 +14633,19 @@
 	//   ],
 	//   "parameters": {
 	//     "fingerprint": {
-	//       "description": "When provided, this fingerprint must match the fingerprint of the zone in storage.",
+	//       "description": "When provided, this fingerprint must match the fingerprint of the zone in\nstorage.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
 	//     "path": {
-	//       "description": "GTM Zone's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/zones/{zone_id}",
+	//       "description": "GTM Zone's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/zones/{zone_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/zones/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}:revert",
+	//   "path": "tagmanager/v2/{+path}:revert",
 	//   "response": {
 	//     "$ref": "RevertZoneResponse"
 	//   },
@@ -14602,7 +14676,8 @@
 }
 
 // Fingerprint sets the optional parameter "fingerprint": When provided,
-// this fingerprint must match the fingerprint of the zone in storage.
+// this fingerprint must match the fingerprint of the zone in
+// storage.
 func (c *AccountsContainersWorkspacesZonesUpdateCall) Fingerprint(fingerprint string) *AccountsContainersWorkspacesZonesUpdateCall {
 	c.urlParams_.Set("fingerprint", fingerprint)
 	return c
@@ -14647,7 +14722,7 @@
 	reqHeaders.Set("Content-Type", "application/json")
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("PUT", urls, body)
 	if err != nil {
@@ -14699,6 +14774,7 @@
 	return ret, nil
 	// {
 	//   "description": "Updates a GTM Zone.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/containers/{containersId}/workspaces/{workspacesId}/zones/{zonesId}",
 	//   "httpMethod": "PUT",
 	//   "id": "tagmanager.accounts.containers.workspaces.zones.update",
 	//   "parameterOrder": [
@@ -14706,18 +14782,19 @@
 	//   ],
 	//   "parameters": {
 	//     "fingerprint": {
-	//       "description": "When provided, this fingerprint must match the fingerprint of the zone in storage.",
+	//       "description": "When provided, this fingerprint must match the fingerprint of the zone in\nstorage.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
 	//     "path": {
-	//       "description": "GTM Zone's API relative path. Example: accounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/zones/{zone_id}",
+	//       "description": "GTM Zone's API relative path.\nExample:\naccounts/{account_id}/containers/{container_id}/workspaces/{workspace_id}/zones/{zone_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/containers/[^/]+/workspaces/[^/]+/zones/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "request": {
 	//     "$ref": "Zone"
 	//   },
@@ -14789,7 +14866,7 @@
 	reqHeaders.Set("Content-Type", "application/json")
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+parent}/user_permissions")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+parent}/user_permissions")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("POST", urls, body)
 	if err != nil {
@@ -14841,6 +14918,7 @@
 	return ret, nil
 	// {
 	//   "description": "Creates a user's Account \u0026 Container access.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/user_permissions",
 	//   "httpMethod": "POST",
 	//   "id": "tagmanager.accounts.user_permissions.create",
 	//   "parameterOrder": [
@@ -14848,13 +14926,14 @@
 	//   ],
 	//   "parameters": {
 	//     "parent": {
-	//       "description": "GTM Account's API relative path. Example: accounts/{account_id}",
+	//       "description": "GTM Account's API relative path.\nExample: accounts/{account_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+parent}/user_permissions",
+	//   "path": "tagmanager/v2/{+parent}/user_permissions",
 	//   "request": {
 	//     "$ref": "UserPermission"
 	//   },
@@ -14879,7 +14958,8 @@
 }
 
 // Delete: Removes a user from the account, revoking access to it and
-// all of its containers.
+// all of its
+// containers.
 func (r *AccountsUserPermissionsService) Delete(path string) *AccountsUserPermissionsDeleteCall {
 	c := &AccountsUserPermissionsDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
 	c.path = path
@@ -14920,7 +15000,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("DELETE", urls, body)
 	if err != nil {
@@ -14946,7 +15026,8 @@
 	}
 	return nil
 	// {
-	//   "description": "Removes a user from the account, revoking access to it and all of its containers.",
+	//   "description": "Removes a user from the account, revoking access to it and all of its\ncontainers.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/user_permissions/{user_permissionsId}",
 	//   "httpMethod": "DELETE",
 	//   "id": "tagmanager.accounts.user_permissions.delete",
 	//   "parameterOrder": [
@@ -14954,13 +15035,14 @@
 	//   ],
 	//   "parameters": {
 	//     "path": {
-	//       "description": "GTM UserPermission's API relative path. Example: accounts/{account_id}/user_permissions/{user_permission_id}",
+	//       "description": "GTM UserPermission's API relative path.\nExample: accounts/{account_id}/user_permissions/{user_permission_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/user_permissions/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "scopes": [
 	//     "https://www.googleapis.com/auth/tagmanager.manage.users"
 	//   ]
@@ -15033,7 +15115,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("GET", urls, body)
 	if err != nil {
@@ -15085,6 +15167,7 @@
 	return ret, nil
 	// {
 	//   "description": "Gets a user's Account \u0026 Container access.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/user_permissions/{user_permissionsId}",
 	//   "httpMethod": "GET",
 	//   "id": "tagmanager.accounts.user_permissions.get",
 	//   "parameterOrder": [
@@ -15092,13 +15175,14 @@
 	//   ],
 	//   "parameters": {
 	//     "path": {
-	//       "description": "GTM UserPermission's API relative path. Example: accounts/{account_id}/user_permissions/{user_permission_id}",
+	//       "description": "GTM UserPermission's API relative path.\nExample: accounts/{account_id}/user_permissions/{user_permission_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/user_permissions/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "response": {
 	//     "$ref": "UserPermission"
 	//   },
@@ -15121,7 +15205,8 @@
 }
 
 // List: List all users that have access to the account along with
-// Account and Container user access granted to each of them.
+// Account and
+// Container user access granted to each of them.
 func (r *AccountsUserPermissionsService) List(parent string) *AccountsUserPermissionsListCall {
 	c := &AccountsUserPermissionsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
 	c.parent = parent
@@ -15182,7 +15267,7 @@
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+parent}/user_permissions")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+parent}/user_permissions")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("GET", urls, body)
 	if err != nil {
@@ -15233,7 +15318,8 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "List all users that have access to the account along with Account and Container user access granted to each of them.",
+	//   "description": "List all users that have access to the account along with Account and\nContainer user access granted to each of them.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/user_permissions",
 	//   "httpMethod": "GET",
 	//   "id": "tagmanager.accounts.user_permissions.list",
 	//   "parameterOrder": [
@@ -15246,13 +15332,14 @@
 	//       "type": "string"
 	//     },
 	//     "parent": {
-	//       "description": "GTM Accounts's API relative path. Example: accounts/{account_id}",
+	//       "description": "GTM Accounts's API relative path.\nExample: accounts/{account_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+parent}/user_permissions",
+	//   "path": "tagmanager/v2/{+parent}/user_permissions",
 	//   "response": {
 	//     "$ref": "ListUserPermissionsResponse"
 	//   },
@@ -15342,7 +15429,7 @@
 	reqHeaders.Set("Content-Type", "application/json")
 	c.urlParams_.Set("alt", alt)
 	c.urlParams_.Set("prettyPrint", "false")
-	urls := googleapi.ResolveRelative(c.s.BasePath, "{+path}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "tagmanager/v2/{+path}")
 	urls += "?" + c.urlParams_.Encode()
 	req, err := http.NewRequest("PUT", urls, body)
 	if err != nil {
@@ -15394,6 +15481,7 @@
 	return ret, nil
 	// {
 	//   "description": "Updates a user's Account \u0026 Container access.",
+	//   "flatPath": "tagmanager/v2/accounts/{accountsId}/user_permissions/{user_permissionsId}",
 	//   "httpMethod": "PUT",
 	//   "id": "tagmanager.accounts.user_permissions.update",
 	//   "parameterOrder": [
@@ -15401,13 +15489,14 @@
 	//   ],
 	//   "parameters": {
 	//     "path": {
-	//       "description": "GTM UserPermission's API relative path. Example: accounts/{account_id}/user_permissions/{user_permission_id}",
+	//       "description": "GTM UserPermission's API relative path.\nExample: accounts/{account_id}/user_permissions/{user_permission_id}",
 	//       "location": "path",
+	//       "pattern": "^accounts/[^/]+/user_permissions/[^/]+$",
 	//       "required": true,
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "{+path}",
+	//   "path": "tagmanager/v2/{+path}",
 	//   "request": {
 	//     "$ref": "UserPermission"
 	//   },